概览
本教程介绍三种创建触发器的技术:
轮询:定期调用端点以检查变更。Webhook:通过单一 URL 监听用户事件。应用 Webhook(订阅):使用开发者应用(通过 OAuth2)在单一 URL 接收所有授权用户的事件(暂不支持)。
要创建新的触发器,请运行以下命令:
npm run cli triggers create
Piece 文件夹名称:与触发器所在文件夹关联的名称。有助于在 Piece 内组织和分类触发器。触发器显示名称:用户在界面中看到的名称,清晰传达触发器的用途。触发器描述:在 UI 中显示的简短说明信息,指导用户了解触发器的功能和目的。触发器技术:指定触发器类型——轮询或 Webhook。
触发器结构
export const createNewIssue = createTrigger({
auth: PieceAuth | undefined
name: string, // 在整个 Piece 中唯一。
displayName: string, // 界面上显示的名称。
description: string, // 动作的描述
sampleData: null,
type: TriggerStrategy.WEBHOOK | TriggerStrategy.POLLING | TriggerStrategy.APP_WEBHOOK,
props: {}; // 用户需要提供的属性。
// 在用户启用或发布工作流时运行。
onEnable: (ctx) => {},
// 在用户禁用工作流或旧工作流被新发布的工作流替换后删除时运行。
onDisable: (ctx) => {},
// 触发器实现,接受上下文作为参数。
// 应返回一个负载数组,每个负载都会触发工作流。
run: async run(ctx): unknown[] => {}
})
上下文对象
上下文对象包含多个有用的信息和工具,在开发过程中非常有用。
// 存储:一个简单的轻量级键值存储,在开发需要跨运行持久化信息的触发器时非常有用,例如存储上次轮询日期。
await context.store.put('_lastFetchedDate', new Date());
const lastFetchedData = await context.store.get('_lastFetchedDate', new Date());
// Webhook URL:一个自动生成的唯一 URL,用于触发工作流。在开发基于 Webhook 的触发器时非常有用。
context.webhookUrl;
// 负载:包含第三方发送的 HTTP 请求信息。有三个属性:status、headers 和 body。
context.payload;
// PropsValue:包含用户在已定义属性中填写的信息。
context.propsValue;
应用 Webhook(暂不支持)
某些服务(如 Slack 和 Square)仅在开发者应用级别支持 Webhook。
这意味着该应用的所有授权用户都将被发送到同一个端点。虽然此技术即将得到支持,但目前可以通过对该端点进行轮询来解决。