接收 WhatsApp 群组消息
参与者在群组中发送的任何内容,到达方式与其他 WhatsApp 入站消息相同:同样的 whatsapp.received 事件、同样的内容分支、同样的媒体获取。群组消息有两点不同。消息同时标明了发送者和所属群组,而你的回复会发送到群组,而不是发送给该参与者个人。
接收 WhatsApp 消息涵盖了非群组特有的部分:所有内容分支、获取入站媒体以及引用回复。
群组消息携带的内容
入站群组消息读取时包含两个地址而非一个:
from是发送消息的参与者,而非群组。它包含参与者的bsuid(业务范围用户 ID)、你的业务已知时的phone_number,以及参与者发布了个人资料时的username和display_name。未与你共享电话号码的参与者仅通过bsuid来标识,这足以向其发送消息。to包含你的业务号码和群组。phone_number是接收消息的号码,group_id是消息到达的群组。
group_id 仅出现在 to 上,因此它的存在就是区分群组消息和一对一消息的标志,双向皆然。群组消息不携带计数器:recipient_count、delivered_count 和 read_count 反映的是出站扇出,入站消息没有这些字段。
要同时读取某个群组双向的消息线程,请按 group_id 过滤消息列表,具体方式参见向 WhatsApp 群组发送消息。
回复群组
参与者在群组中发言会为整个群组打开一个 24 小时的客户服务窗口,而不是每人一个。窗口开放期间,自由格式内容可以发送到群组;窗口过期后,需要使用模板。将回复发送到群组时,在 to 中填写群组 ID,且不设置 from。参见向 WhatsApp 群组发送消息。
私下联系该参与者属于独立的对话,有其自己的窗口,群组消息不会打开该窗口。向参与者的电话号码或 bsuid 发送自由格式消息时,如果对方在过去 24 小时内没有单独给你的业务发过消息,会收到 422 E15044 拒绝。模板消息则不受此限制。
确认和回应
两种确认操作都适用于群组消息,调用方式与其他入站消息相同:
- 使用消息自身的 ID 将其标记为已读。对于群组消息,调用方式没有任何变化。
- 用一个表情符号对其做出回应。回应会发送到群组,所有参与者都能看到。如果群组不再活跃,更改会被拒绝并返回
409E15047,这是群组消息的回应独有的拒绝情况,一对一消息的回应不会遇到。
Webhook
whatsapp.received 以与其他消息相同的信封承载群组消息,群组信息位于 to 上:
{
"type": "whatsapp.received",
"timestamp": "2026-09-15T14:05:41.204Z",
"data": {
"whatsapp_id": "wam_01kya1b3xdq7fe8m2v5t9rncgs",
"workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
"direction": "inbound",
"from": { "phone_number": "+15550002222", "bsuid": "US.AbC1", "display_name": "Dana Reyes" },
"to": { "phone_number": "+15550001111", "group_id": "wag_01krdgeqcxet5s7t44vh8rt9mg" },
"text": { "body": "Got it, thanks." },
"tags": null,
"metadata": null
}
}读取 data.to.group_id 将消息路由到群组线程,读取 data.from 将消息归属到参与者。如果订阅方仅按 from 组织对话,则会将群组中的每个参与者拆分到各自的线程中,从而丢失群组上下文。
群组本身没有对应的事件。成员加入或离开、名称变更或置顶消息都不会产生 webhook,因此群组成员信息需要主动读取而非推送:在 Groups 页面打开群组,或按照管理 WhatsApp 群组中的方式读取。
后续步骤
- 向 WhatsApp 群组发送消息:群组寻址、发送条件及每个参与者的回执
- 管理 WhatsApp 群组:通过 API 创建群组、邀请链接、加入请求和置顶消息
- WhatsApp 群组:群组的用途,以及 WhatsApp 的限制
- 接收 WhatsApp 消息:所有内容类型、媒体和引用回复
- 业务范围用户 ID:向没有电话号码的参与者发送消息