概览

本教程介绍三种创建触发器的技术:

  • 轮询:定期调用端点以检查变更。
  • Webhook:通过单一 URL 监听用户事件。
  • 应用 Webhook(订阅):使用开发者应用(通过 OAuth2)在单一 URL 接收所有授权用户的事件(暂不支持)。

要创建新的触发器,请运行以下命令:

npm run cli triggers create
  1. Piece 文件夹名称:与触发器所在文件夹关联的名称。有助于在 Piece 内组织和分类触发器。
  2. 触发器显示名称:用户在界面中看到的名称,清晰传达触发器的用途。
  3. 触发器描述:在 UI 中显示的简短说明信息,指导用户了解触发器的功能和目的。
  4. 触发器技术:指定触发器类型——轮询或 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[] => {}
})
请注意,`run` 方法返回一个数组。原因是单次轮询可能包含多个触发器,因此数组中的每一项都会触发工作流运行。

上下文对象

上下文对象包含多个有用的信息和工具,在开发过程中非常有用。

// 存储:一个简单的轻量级键值存储,在开发需要跨运行持久化信息的触发器时非常有用,例如存储上次轮询日期。
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(暂不支持)

某些服务(如 SlackSquare)仅在开发者应用级别支持 Webhook。 这意味着该应用的所有授权用户都将被发送到同一个端点。虽然此技术即将得到支持,但目前可以通过对该端点进行轮询来解决。