ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何在 Twenty 中创建 Webhook 订阅记录变更事件并验证请求载荷格式?

如何在 Twenty 中创建 Webhook 订阅记录变更事件并验证请求载荷格式? 如何在 Twenty 中创建 Webhook 订阅记录变更事件并验证请求载荷格式【免费下载链接】twentyThe open alternative to Salesforce, designed for AI.项目地址: https://gitcode.com/GitHub_Trending/tw/twentyTwenty 中每当一条记录被创建、更新或删除都会向你的 URL 发送一次 HTTP POST无需轮询。本文的任务是在 Twenty 的后台设置里创建一个 Webhook让你的外部端点开始接收记录变更事件然后在你自己的端点一侧确认请求载荷payload的结构符合文档定义并通过签名校验请求确实来自 Twenty。前提条件均来自文档要求一个公开可访问publicly accessible的 URL供 Twenty 推送端点需要能接收 HTTP POST并且能对 Twenty 返回 2xx 状态码。创建 Webhook 订阅记录变更事件按下面的 UI 路径操作进入Settings → APIs Webhooks → Webhooks点击 Create webhook输入你的 Webhook URL必须是公开可访问的地址点击Save保存后 Webhook 立即生效开始推送通知没有额外的发布或激活步骤。之后如需调整同样在 Webhooks 列表中操作编辑是点击该 Webhook → 更新 URL →Save删除是点击该 Webhook →Delete→ 确认。会收到哪些事件Twenty 为以下三类事件发送 Webhook事件示例Record Createdperson.created、company.created、note.createdRecord Updatedperson.updated、company.updated、opportunity.updatedRecord Deletedperson.deleted、company.deleted所有对象类型都在覆盖范围内包括自定义对象。需要注意的是所有事件类型都会发往你的 Webhook URL文档明确说明事件过滤event filtering尚未支持可能在未来版本中加入。也就是说一个 Webhook 建好后无法在 Twenty 侧按对象或事件类型筛选区分职责要放在你自己的端点里做。验证请求载荷格式每次 Webhook 请求都是 HTTP POST携带 JSON body顶层固定为三个字段{ event: person.created, data: { id: abc12345, firstName: Alice, lastName: Doe, email: aliceexample.com, createdAt: 2025-02-10T15:30:45Z, createdBy: user_123 }, timestamp: 2025-02-10T15:30:50Z }以上是官方文档给出的示例载荷用于说明结构实际收到的字段值以真实记录为准。字段含义event发生了什么如person.createddata被创建/更新/删除的完整记录timestamp事件发生时间UTC在端点侧判断载荷是否符合预期收到的请求应是 POST 方法、JSON body 顶层包含event、data、timestamp三个字段且event是对象.事件形式的字符串如person.created。另一个必须处理的点是应答状态码端点需要返回2xx200-299来确认接收。返回非 2xx 时该次推送会被 Twenty 记为投递失败delivery failure。所以如果你在端点日志里看到 Twenty 侧有投递失败记录先检查自己的端点对该请求返回了什么状态。校验请求签名确认来源Twenty 出于安全考虑会对每个 Webhook 请求签名通过签名可以确认请求确实来自 Twenty。请求会携带两个签名相关头部头部含义X-Twenty-Webhook-SignatureHMAC SHA256 签名X-Twenty-Webhook-Timestamp请求时间戳文档给出的校验步骤从X-Twenty-Webhook-Timestamp取时间戳构造签名字符串{timestamp}:{JSON payload}用你的 webhook secret 计算 HMAC SHA256与X-Twenty-Webhook-Signature头部的值比对文档附带的 Node.js 示例节选于 Webhooks 文档。其中secret是占位值需替换为你自己的 webhook secretreq是端点 POST 处理器中的请求对象const crypto require(crypto); const timestamp req.headers[x-twenty-webhook-timestamp]; const payload JSON.stringify(req.body); const secret your-webhook-secret; const stringToSign ${timestamp}:${payload}; const expectedSignature crypto .createHmac(sha256, secret) .update(stringToSign) .digest(hex); const receivedSignature req.headers[x-twenty-webhook-signature]; const isValid crypto.timingSafeEqual( Buffer.from(expectedSignature, hex), Buffer.from(receivedSignature, hex) );isValid为 true说明该请求可以通过 Twenty 的签名校验为 false 则不应把载荷当作可信事件处理。触发一次真实推送并判断结果对 Twenty 中的记录做创建、更新或删除操作例如新建一个 person 记录对应的事件就会推送到你配置的 URL。此时在端点侧核对三件事收到了 HTTP POSTJSON body 顶层包含event、data、timestampevent与实际操作匹配例如新建 person 收到person.created签名校验通过isValid为 true端点返回了 2xxTwenty 侧不会将其记为投递失败。边界与相关路径Webhook 属于 OUT 方向把 Twenty 内部的记录变更通知推给外部系统。如果你的目标是反方向——接收外部系统发进 Twenty 的数据——那是另一个功能Workflow Webhook Trigger操作路径不同可参考 Set Up a Webhook Trigger。本文依据的文档Webhooksdevelopers/extend、Webhookscapabilities。【免费下载链接】twentyThe open alternative to Salesforce, designed for AI.项目地址: https://gitcode.com/GitHub_Trending/tw/twenty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表