跳转到主要内容

概述

Webhook 是在消息送达、收件、联系人、模板、通话以及其他资源发生变化时,YCloud 向您的应用程序发送的 HTTPS 请求。

准备工作

  • 将您的 YCloud API 密钥存储在 YCLOUD_API_KEY 中。
  • 部署一个可公网访问的 HTTPS 端点。
  • 保留原始请求体以进行签名验证。
  • 确定您的应用程序所需的事件类型。

工作原理

  1. 创建 Webhook 端点并为其订阅事件类型。
  2. 保存返回的端点 secret。
  3. YCloud 向您的端点发送事件请求。
  4. 在信任请求之前验证 YCloud-Signature。
  5. 及时返回 2xx 响应。
  6. 以幂等方式处理事件,因为推送可能会重复。

请求

使用 POST /webhookEndpoints 创建端点。

请求字段

请求示例

订阅回显与交接事件

对于通过公开 REST API 入驻的 Agent,请创建包含以下订阅的端点。在控制台中创建的 Agent 不会发出这三个事件。若要修改现有端点,请保留您仍需要的任何事件订阅。
这两种回显事件类型携带标准消息格式的 whatsappMessage 负载。交接事件携带 whatsappMetaBusinessAgent 并保留其 Agent/控制信息。它们不使用 WhatsApp Business App 的 whatsapp.smb.message.echoes 协议。有关字段定义、示例、顺序以及交接关联限制,请参见 回显与交接事件详情。

订阅 Messenger 消息事件

创建或更新端点时,请在 enabledEvents 中包含您所需的事件名称。例如,要同时订阅所有四种事件,请使用:
在控制面板中,新端点默认未选择任何事件。选择 Messenger 类别将选中其可用事件,包括编辑和回应。随后您可以取消勾选单个事件。现有订阅不会自动包含新增的编辑或回应事件。更新端点时,请保留您仍需要的任何订阅。 编辑操作会保留相同的 messengerInboundMessage.id 和 metaMessageId,替换 text.body,并添加 editCount 和 editTime。消息的 sendTime 和 createTime 保持不变;事件外层的 createTime 为编辑时间。未编辑的消息会省略编辑字段。仅更新现有的入站消息。较旧的编辑会被忽略;不会重建缺失的消息和历史编辑记录。请通过消息 ID 关联更新,并使用累计计数以避免将旧文本覆盖到新版本上。源重试可能会为同一次保存的编辑生成另一个事件 ID。请参见入站编辑示例。 回应事件包含 pageId、作出回应的客户的 psid、目标 metaMessageId 以及 action(react 或 unreact)。可选的 reaction 和 emoji 可能会缺失,对于 unreact 尤为如此。回应不会改变消息的送达状态。目标消息可能源自 YCloud API 之外,因此该事件不需要本地消息记录,也不包含本地消息 ID。 事件的 createTime 保留了源交互时间。对客户投递的重试会保留其事件 id 和负载。源回调处理可能会为重复交互生成另一个事件 ID;请勿将事件 ID 视为回应或消息的唯一标识。有关这两种操作,请参见回应负载示例。

响应

响应将返回创建的端点及其签名 secret。请妥善保存该密钥。YCloud 会使用它来生成 Webhook 签名。

响应示例

响应字段

接收事件

事件请求

YCloud 会向配置的 url 发送一个 JSON 事件对象。该事件包含常用字段(如 id、type、apiVersion 和 createTime)以及对应类型的有效负载(payload)。 您的处理程序应当:
  1. 读取原始请求体。
  2. 在信任有效负载前,使用端点密钥验证 YCloud-Signature 请求头。
  3. 及时返回成功的 2xx 响应。
  4. 将耗时的处理操作放入队列中执行。
  5. 确保事件处理具备幂等性,避免重复推送触发重复的业务操作。
在签名验证前,切勿解析或修改请求体。请使用服务器接收到的完整原始字节。

接收方响应

一旦签名和请求被接受,请立即返回成功的 2xx HTTP 响应。响应体可以为空。
将耗时的业务逻辑放入队列处理。超时或非 2xx 响应可能会导致 YCloud 重试推送该事件,因此请根据事件 id 进行去重。

常见有效负载示例

展开事件即可查看其完整的示例有效负载。这些示例均来自 OpenAPI Webhook 规范。如需查看所有支持的事件类型,请参阅所有 Webhook 有效负载示例。
联系人属性变更时的示例有效负载
创建新联系人时的示例有效负载
删除联系人时的示例有效负载
客户取消订阅时的示例有效负载
客户恢复订阅时的示例有效负载
WhatsApp 模板归档时的示例有效负载
WhatsApp 模板取消归档时的示例有效负载。该模板状态为 Meta 返回的当前状态,并不代表已进行重新审批审核。
WhatsApp 通话建立时的示例有效负载
WhatsApp 通话结束时的示例有效负载
WhatsApp 通话状态更新时的示例有效负载
有关完整的 Event 架构和交互式有效负载参考,请参阅 Webhook 事件有效负载。

轮换端点密钥

如果密钥泄露或根据安全策略规定,请轮换密钥:
轮换后立即将新密钥部署到您的接收服务中。
反复无法接收通知的端点可能会变为 pending 状态并停止接收事件。请监控 Webhook 失败情况及端点状态。
有关签名验证代码、重试间隔和接收方实现的详细信息,请参阅实现 Webhook 接收方。