尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Automatisch 的 Notion 触发器实战:New / Updated Database Items 轮询原理与配置指南

Automatisch 的 Notion 触发器实战:New / Updated Database Items 轮询原理与配置指南 Automatisch 的 Notion 触发器实战New / Updated Database Items 轮询原理与配置指南【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch导读本文聚焦开源自动化平台 Automatisch 中Notion 应用的触发器Triggers围绕官方文档 packages/docs/pages/apps/notion/triggers.md 所定义的两个触发器——New database items新建数据库条目与Updated database items更新数据库条目深入讲解其使用方式、动态数据库选择、轮询机制与内部实现原理。读完本文你将掌握如何在 Automatisch 中为 Notion 数据库搭建「新建条目」与「条目更新」两类自动化触发场景并理解其背后的 15 秒轮询、排序策略、分页处理与去重逻辑可直接上手搭建可运行的工作流。触发器总览根据 triggers.md 的 frontmatter 定义Notion 应用共提供两个触发器触发器名称触发条件New database items当所选数据库中有新条目被创建时触发Updated database items当所选数据库中的条目发生更新时触发这两个触发器的注册实现在 triggers/index.js 中由newDatabaseItems与updatedDatabaseItems两个定义合并导出并在应用入口 index.js 中挂载到 Notion 应用的triggers字段。在 Automatisch 的工作流编辑器中当你在触发器步骤里选择Notion应用时就会看到这两个可选项它们的描述与文档中的 desc 字段一一对应。前提先完成 Notion 连接Connection使用任何 Notion 触发器之前必须先在 Automatisch 中建立 Notion 连接。连接步骤详见 connection.md核心流程如下在 Notion 官网的My integrations页面创建 Integration填写 Name 字段并提交进入侧边栏Capabilities页面在User Capabilities下勾选Read user information without email addresses并保存进入Distribution页面开启 Make integration public 复选框填写Organization Information下的必填字段从 Automatisch 复制OAuth Redirect URL粘贴到 Notion 集成配置的Redirect URIs字段提交后在弹出的对话框中确认将集成公开Continue将OAuth client ID与OAuth client secret分别粘贴到 Automatisch 的Client ID与Client Secret在 Automatisch 点击 Submit 完成连接。从源码看连接建立后所有请求会由 common/add-auth-header.js 注入认证头并由 common/add-notion-version-header.js 注入 Notion API 要求的版本头对应应用配置中beforeRequest: [addAuthHeader, addNotionVersionHeader]请求将发往https://api.notion.com见应用配置中的apiBaseUrl。注意若当前文档步骤与你使用的版本存在差异请以 Notion 官方最新要求为准。触发器一New database items行为说明当所选数据库中新创建一条条目时触发。在 new-database-items/index.js 中定义name: New database itemskey: newDatabaseItemspollInterval: 15采用轮询方式每 15 秒检查一次description: Triggers when a new database item is created数据库参数触发器提供一个名为Database的dropdown下拉参数key: databaseId它并非必填required: false数据来自动态数据源listDatabasessource.type: queryname: getDynamicData。该动态数据源的实现在 dynamic-data/list-databases/index.js它向 Notion 的/v1/search接口发起POST请求携带filter: { value: database, property: object }过滤出所有数据库对象并循环处理next_cursor完成分页最终为每个数据库返回{ value: database.id, name: database.title?.[0]?.plain_text || Untitled Database }。也就是说下拉框中展示的是数据库标题选中后实际使用的是数据库 ID。轮询实现原理核心查询逻辑位于 new-database-items/new-database-items.jsconst payload { sorts: [ { timestamp: created_time, direction: descending, }, ], }; const databaseId $.step.parameters.databaseId; const path /v1/databases/${databaseId}/query; do { const response await $.http.post(path, payload); payload.start_cursor response.data.next_cursor; for (const databaseItem of response.data.results) { $.pushTriggerItem({ raw: databaseItem, meta: { internalId: databaseItem.id, }, }); } } while (payload.start_cursor);关键点请求路径为POST /v1/databases/{databaseId}/query其中databaseId即工作流中你选择的数据库 ID通过sorts按created_time降序排列保证最新创建的条目优先被读取使用do...whilestart_cursor遍历所有分页结果每个条目调用$.pushTriggerItem推送为触发数据internalId使用条目的idAutomautisch 据此去重——同一条目在多次轮询中不会重复触发。适用场景适合所有「新数据进来就立刻处理」的需求例如Notion 数据库中新增的任务、客户线索、订单记录或内容投稿被创建后自动同步到 Gmail、Slack、Google Sheets 等其他应用或触发后续动作步骤。触发器二Updated database items行为说明当所选数据库中的条目发生更新时触发。定义见 updated-database-items/index.jsname: Updated database itemskey: updatedDatabaseItemspollInterval: 15同样是每 15 秒轮询一次description: Triggers when there is an update to an item in a chosen database与第一个触发器一致它也提供Database下拉参数key: databaseId数据同样来自listDatabases动态数据源用于选定要监听的数据库。轮询实现原理核心逻辑位于 updated-database-items/updated-database-items.jsconst payload { sorts: [ { timestamp: last_edited_time, direction: descending, }, ], }; const databaseId $.step.parameters.databaseId; const path /v1/databases/${databaseId}/query; do { const response await $.http.post(path, payload); payload.start_cursor response.data.next_cursor; for (const databaseItem of response.data.results) { $.pushTriggerItem({ raw: databaseItem, meta: { internalId: ${databaseItem.id}-${databaseItem.last_edited_time}, }, }); } } while (payload.start_cursor);与「New database items」的关键差异维度New database itemsUpdated database items排序字段created_time降序last_edited_time降序internalId 去重键databaseItem.id${databaseItem.id}-${databaseItem.last_edited_time}触发语义新条目被创建条目被更新最核心的设计在internalId上更新触发器把「条目 ID 最后编辑时间」拼接作为内部去重键。由于条目的last_edited_time会在每次内容变更时变化因此同一个条目被多次修改时会生成不同的 internalId从而每次真正的更新都能独立触发一次而未被修改的条目 internalId 保持不变不会被重复推送。这正是它能够区分「更新」与「静态条目」的实现基础。适用场景适合「状态变化驱动后续动作」的需求例如Notion 中任务状态从「待办」变为「完成」、客户跟进记录被更新、文档内容被修订后自动发送通知、更新其他系统数据或归档执行记录。轮询触发器的通用机制从 Automatisch 的通用定义器 define-trigger.js 可以看出平台对触发器的统一约束const isWebhookOrPoll triggerDefinition.pollInterval || triggerDefinition.type webhook;任何一个触发器定义必须有pollInterval或声明为webhook否则会直接抛出Trigger must have a poll interval or be a webhook错误。Notion 应用并未接入 webhookNotion 官方 API 当前不提供变更回调因此两个触发器都选择pollInterval: 15的轮询方案即 Automatisch 每 15 秒代表工作流调用一次 Notion API再基于 internalId 去重后推送满足条件的数据。这意味着数据从 Notion 变更到触发器实际推送理论上最长延迟约 15 秒不适合对实时性要求极高的场景轮询会持续消耗 Notion API 配额实际使用时需结合你的 API 限制评估工作流数量。触发器数据在后续步骤中的使用触发器通过$.pushTriggerItem({ raw: databaseItem, ... })推送的raw数据是 Notion API 返回的完整数据库条目对象包含id、created_time、last_edited_time、properties各属性字段等结构。在工作流编辑器中后续动作步骤可以直接引用这些字段做变量映射例如读取properties中的标题、状态、日期等属性值作为邮件正文、Slack 消息或表格写入的内容。小结Automatisch 的 Notion 应用提供两个触发器New database items与Updated database items定义于 triggers.md注册于 triggers/index.js两者均为 15 秒轮询型触发器通过POST /v1/databases/{databaseId}/query查询数据并用start_cursor处理分页新建触发器按created_time排序、以条目id去重更新触发器按last_edited_time排序、以「id-last_edited_time」去重从而正确识别「更新」语义使用前需先按 connection.md 完成 Notion OAuth 连接并在触发器中选择目标数据库。围绕这两个触发器你可以快速搭建诸如「Notion 新任务自动通知 Slack」「Notion 状态变更后同步 Google Sheets」等自动化场景而理解其轮询与去重原理将帮助你在真实数据量下准确预判触发行为与 API 消耗。【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表