如何将 Sanity 连接到 Shopify Flow
每当有与您的查询条件匹配的内容被创建、更新或删除时,Sanity 都会发送一个由 GROQ 驱动的 Webhook。Workflow Webhooks 将该调用转换为 Shopify Flow 触发器,从而让您的商店能够对此做出响应:标记客户、添加订单备注、发送内部邮件、更新元字段 - - 凡是 Shopify Flow 能做到的,都能实现。
本指南详细介绍了整个流程 - - Sanity 发送请求,Workflow Webhooks 接收并验证,Shopify Flow 执行操作 - - 并且每个请求都会验证 Sanity 的 HMAC 签名,因此只有 Sanity 才能启动您的工作流程。
你可以制作什么
- 当匹配的 CMS 条目发生变化时,更新 Shopify 的元字段,以确保店面保持同步。
- 着陆页发布后,请通过电子邮件通知您的商品推广团队。
- 在内容发布后启动缓存预热工作流程。
典型的触发事件包括:文档发布、文档更新、文档删除。
开始之前
- Workflow Webhooks 已安装在您的 Shopify 商店中。
- Shopify Flow 已安装,该应用可从Shopify应用商店免费下载。
- 一个在 Sanity 上拥有创建 Webhook 权限的账户。
步骤 1 - 在 Workflow Webhooks 上创建 Webhook
- 打开 Workflow Webhooks -> Webhook -> 创建 Webhook,并为其命名一个在 Shopify Flow 中能认出的名称,例如
Sanity events。 - 在**“身份验证**”下,选择 HMAC。
- 在**“签名提供商**”下,选择**“Sanity”**。该应用会自动为您填写头部、算法、已签名负载和重放窗口 - - 无需进行其他配置。
- 暂时将“密钥”字段留空,然后点击“保存”。复制页面上显示的 Webhook URL。
有关其他身份验证模式,请参阅 身份验证;有关如何选择哪些字段将传输至 Shopify Flow,请参阅 负载映射和流变量。
步骤 2 - 在 Sanity 中添加端点
在 Sanity 中,打开 API -> Webhook,使用您复制的 URL 创建一个由 GROQ 驱动的 Webhook,并设置密钥。
如何查找您的 Sanity 签名密钥
在由 GROQ 支持的 Webhook 上设置了 The Secret。
Sanity 关于 Webhook 签名的官方文档 中,提供了您账户的具体说明文字和截图。
将该密钥粘贴到 Workflow Webhooks 中的 Webhook“Secret”字段中,然后保存。从那时起,每条 Sanity 消息在到达 Shopify Flow 之前都会经过验证。
此处检查的内容
| 什么 | 值 |
|---|---|
| 签名页眉 | sanity-webhook-signature |
| 签名的位置 | 在该标头的v1值中,该值包含以逗号分隔的key=value对 |
| 签署了什么 | {timestamp}.{body} |
| 签名 | HMAC-SHA256,base64url 编码 |
| 时间戳 | 签名头中的t值,单位为Unix毫秒 |
| 回放保护 | 无 - - 该发件人未对时间戳进行签名,因此每个有效的签名均保持有效 |
| 秘密 | 作为纯文本使用。请完全按照发件人显示的内容粘贴 |
在已签名的负载中,{body} 就是原始请求正文(按字节逐字节复制),而 {timestamp} 则是上文提到的时间戳。
如果请求不符合上述任何一项要求,将被以401状态拒绝,并记录在历史与故障排除中,且永远不会启动工作流程。
步骤 3 - 构建Shopify Flow工作流程
- 在Shopify Flow中,创建一个工作流程,并选择“Workflow Webhooks”触发器。
- 点击**“记录事件**”,然后从 Sanity 发送一个测试事件(或在 Workflow Webhooks 中使用**“发送测试”功能**),以便 Shopify Flow 识别数据的结构。
- 您拥有的每个 Webhook 都会触发同一个 Shopify Flow 触发器,因此请针对 Webhook ID 添加第一个条件,以确保该工作流程仅限于 Sanity。该 ID 显示在 Webhook 页面上。
- 添加操作 - - 标记客户、添加备注、发送内部邮件、更新元字段。



第 4 步 - - 进行端到端测试
在 Sanity 中触发一个真实事件。在 Workflow Webhooks -> 历史记录 中,您应该能看到状态为“成功”的调用记录。如果签名有误,则会显示一条失败的记录并附带原因;验证已签名的 Webhook 介绍了签名测试工具,该工具会精确显示是哪一步操作失败了。

签名不匹配▾
按以下顺序:密钥(最常见的原因 - - 多余的空格,或来自错误环境的密钥)、发送方是否使用了其他端点的密钥,以及在 Sanity 和应用程序之间是否有任何环节重写了请求体。签名覆盖的是原始字节,因此会重新格式化 JSON 的代理会破坏签名。 Webhook 页面上的签名测试工具会显示被签名的确切文本。
每次请求都会返回 401 错误▾
请确认 Webhook 的身份验证方式已设置为 HMAC,且已选择 Sanity 提供商;请确认已填写密钥;并请确认 Sanity 发送到该 URL 的请求内容与应用中显示的完全一致,包括末尾的代码。
“历史”中没有显示任何内容▾
该请求从未送达。请在 Sanity 中重新检查 URL,并查看 Sanity 自身的交付日志以确认收到的响应。如果显示 404,则表示 Webhook 错误或已被删除;如果显示 429,则表示您已超出套餐的调用限制 - - 请参阅 套餐与使用情况。
工作流程针对错误的事件运行▾
您商店中的每个 Webhook 都会触发同一个 Shopify Flow 触发器。请在工作流程的第一步中添加一个基于 Webhook ID 的条件,或者缩小从 Sanity 发送的事件范围。
相关
- 验证已签名的 Webhook - 我们核实的每家服务提供商,以及如何描述未核实的服务提供商。
- 负载映射和流变量 - 从负载中提取正确的字段并将其导入 Shopify Flow。
- 重复配送防护 - 当 Sanity 重试一次投递时会发生什么。
- 历史与故障排除 - 每个请求的日志,并支持回放。

