创建触发器
本教程将指导你为 Gelato Piece 创建一个监听新冰淇淋口味的触发器。
触发器定义
运行以下命令创建触发器:
npm run cli triggers create
Piece 文件夹名称:与触发器所在文件夹关联的名称。有助于在 Piece 内组织和分类触发器。触发器显示名称:用户在界面中看到的名称,清晰传达触发器的用途。触发器描述:在 UI 中显示的简短说明信息,指导用户了解触发器的功能和目的。触发器技术:指定触发器类型——轮询 或 Webhook。
示例:
npm run cli triggers create
? 请输入 piece 文件夹名称:gelato
? 请输入触发器显示名称:new flavor created
? 请输入触发器描述:当创建新冰淇淋口味时触发。
? 请选择触发器技术:polling
这将在 packages/pieces/community/gelato/src/lib/triggers 目录下创建一个名为 new-flavor-created.ts 的新 TypeScript 文件。
在该文件中粘贴以下代码:
import { gelatoAuth } from '../../';
import {
DedupeStrategy,
HttpMethod,
HttpRequest,
Polling,
httpClient,
pollingHelper,
} from '@activepieces/pieces-common';
import {
TriggerStrategy,
createTrigger,
AppConnectionValueForAuthProperty
} from '@activepieces/pieces-framework';
import dayjs from 'dayjs';
const polling: Polling<
AppConnectionValueForAuthProperty<typeof gelatoAuth>,
Record<string, never>
> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
const request: HttpRequest = {
method: HttpMethod.GET,
url: 'https://cloud.activepieces.com/api/v1/webhooks/aHlEaNLc6vcF1nY2XJ2ed/sync',
headers: {
authorization: auth,
},
};
const res = await httpClient.sendRequest(request);
return res.body['flavors'].map((flavor: string) => ({
epochMilliSeconds: dayjs().valueOf(),
data: flavor,
}));
},
};
export const newFlavorCreated = createTrigger({
auth: gelatoAuth,
name: 'newFlavorCreated',
displayName: '新口味已创建',
description: '当创建新冰淇淋口味时触发。',
props: {},
sampleData: {},
type: TriggerStrategy.POLLING,
async test(context) {
return await pollingHelper.test(polling, context);
},
async onEnable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onEnable(polling, { store, auth, propsValue });
},
async onDisable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onDisable(polling, { store, auth, propsValue });
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});
轮询触发器的工作方式通常如下:
Run:run 方法每 5 分钟执行一次,从端点获取指定时间戳范围内的数据,或持续遍历直到找到最后一个项目 ID。然后以数组形式返回新项目。在此示例中,使用 httpClient.sendRequest 方法获取新口味,随后将其与时间戳一起存入存储中。
暴露定义
要使触发器能被 Activepieces 识别,请将其添加到 Piece 定义的 triggers 数组中。
import { createPiece } from '@activepieces/pieces-framework';
import { getIcecreamFlavor } from './lib/actions/get-icecream-flavor';
// 不要忘记添加以下导入。
import { newFlavorCreated } from './lib/triggers/new-flavor-created';
export const gelato = createPiece({
displayName: 'Gelato 教程',
logoUrl: 'https://cdn.activepieces.com/pieces/gelato.png',
authors: [],
auth: gelatoAuth,
actions: [getIcecreamFlavor],
// 在此处添加触发器。
triggers: [newFlavorCreated], // <--------
});
测试
默认情况下,开发环境只构建特定的组件。打开 .env.dev 文件,在 AP_DEV_PIECES 中添加 “gelato”。
更多详情请查看 Piece 开发 部分。
编辑环境变量后,重新启动后端。Piece 将被重新构建。之后,你需要刷新前端才能看到更改。
要测试触发器,请在 Activepieces 中使用工作流构建器加载示例数据。其运行效果应如截图所示。
- 安装 localxpose。
- 按照文档启动第一个指向 localhost:4200 的隧道。
- 复制隧道域名,例如 wozcsvaint.loclx.io,并将
.env.dev中的AP_FRONTEND_URL环境变量替换为暴露的 URL,例如 https://wozcsvaint.loclx.io。 - 前往 /packages/web/vite.config.ts,取消注释 allowedHosts 并将值替换为相同的隧道域名,例如 wozcsvaint.loclx.io。
完成这些配置后,你将能够测试 Webhook 触发器和运行包含它们的已发布工作流。
