Sign inGet Started

接收 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 将其标记为已读。对于群组消息,调用方式没有任何变化。
  • 用一个表情符号对其做出回应。回应会发送到群组,所有参与者都能看到。如果群组不再活跃,更改会被拒绝并返回 409 E15047,这是群组消息的回应独有的拒绝情况,一对一消息的回应不会遇到。

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 群组中的方式读取。

后续步骤