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。
后续步骤
- 发送或移除回应:从您的业务号码对消息进行回应
- WhatsApp webhooks:选择要订阅的其他事件