Sign inGet Started

WhatsApp 回应 Webhook

whatsapp.reacted 在联系人对您的消息做出回应、更改 emoji 或撤回回应时触发。您的商业号码发送的回应不会触发该事件。订阅 whatsapp.received 不包含回应事件,回应也不会打开客服窗口。

回应是消息上的附注,而非独立消息,因此它不属于投递时间线,也不携带每个消息事件都携带的字段。

载荷

whatsapp_id 标识的是被回应的消息,而非回应本身;emoji 是用户所做的更改。一个用户先回应、再更改 emoji、最后撤回回应,会在同一条消息上产生三个事件。WhatsApp 在前两次之间不会发送移除事件,因此更改以携带新 emoji 的单个事件到达。

代码示例
{
  "data": {
    "emoji": "👍",
    "from": { "phone_number": "+14155550100" },
    "to": { "phone_number": "+13124495569" },
    "whatsapp_id": "wam_01ky8b3xq4gd7pmzn2ka51f7te",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b"
  },
  "timestamp": "2026-07-23T14:52:11.000Z",
  "type": "whatsapp.reacted"
}

WhatsApp 以秒为精度报告回应时间,因此这三个事件中有两个可能共享同一个 timestamp。按该字段排序无法确定顺序,按投递顺序排序也不行,因为重试会使投递顺序不可靠。请将每个事件携带的回应视为它所描述的变更来处理。不要尝试从事件中重建序列,也不要将最后到达的事件视为该消息的当前回应,因为时间戳和到达顺序都不支持这样做。要获取仍然生效的回应,请回读消息:GET /v1/whatsapp/messages/{message_id} 在 reactions 中为每个发送者返回一条记录,消息的回应日志包含每次变更。

用户撤回回应时,emoji 存在且为 null,因此 null 表示的是移除操作本身,而非缺失值。emoji 完全按照 WhatsApp 发送时的原样投递,不做规范化处理,因此 ❤ 和 ❤️ 会作为不同字符串到达。

  • from 是联系人,to 是您的 WhatsApp 号码。当联系人地址没有电话号码时,请处理业务范围用户 ID。

后续步骤