---
title: "接收 WhatsApp 群组消息"
description: "群组消息的读取方式、哪个参与者发送了消息、如何回复群组，以及 whatsapp.received webhook 为群组消息携带的内容。"
canonical: "https://bird.com/zh-sg/wendang/guides/whatsapp/groups/receiving"
---

# 接收 WhatsApp 群组消息

参与者在群组中发送的任何内容，到达方式与其他 WhatsApp 入站消息相同：同样的 `whatsapp.received` 事件、同样的内容分支、同样的媒体获取。群组消息有两点不同。消息同时标明了发送者和所属群组，而你的回复会发送到群组，而不是发送给该参与者个人。

[接收 WhatsApp 消息](/docs/guides/whatsapp/receiving-whatsapp)涵盖了非群组特有的部分：所有内容分支、[获取入站媒体](/docs/guides/whatsapp/receiving-whatsapp#fetching-inbound-media)以及引用回复。

## 群组消息携带的内容

入站群组消息读取时包含两个地址而非一个：

- **`from` 是发送消息的参与者**，而非群组。它包含参与者的 `bsuid`（[业务范围用户 ID](/docs/guides/whatsapp/business-scoped-user-ids)）、你的业务已知时的 `phone_number`，以及参与者发布了个人资料时的 `username` 和 `display_name`。未与你共享电话号码的参与者仅通过 `bsuid` 来标识，这足以向其发送消息。
- **`to` 包含你的业务号码和群组。** `phone_number` 是接收消息的号码，`group_id` 是消息到达的群组。

`group_id` 仅出现在 `to` 上，因此它的存在就是区分群组消息和一对一消息的标志，双向皆然。群组消息不携带计数器：`recipient_count`、`delivered_count` 和 `read_count` 反映的是出站扇出，入站消息没有这些字段。

要同时读取某个群组双向的消息线程，请按 `group_id` 过滤消息列表，具体方式参见[向 WhatsApp 群组发送消息](/docs/guides/whatsapp/groups/sending#4-read-one-groups-conversation)。

## 回复群组

参与者在群组中发言会为整个群组打开一个 24 小时的[客户服务窗口](/docs/knowledge-base/whatsapp/customer-service-window)，而不是每人一个。窗口开放期间，自由格式内容可以发送到群组；窗口过期后，需要使用模板。将回复发送到群组时，在 `to` 中填写群组 ID，且不设置 `from`。参见[向 WhatsApp 群组发送消息](/docs/guides/whatsapp/groups/sending)。

私下联系该参与者属于独立的对话，有其自己的窗口，群组消息不会打开该窗口。向参与者的电话号码或 `bsuid` 发送自由格式消息时，如果对方在过去 24 小时内没有单独给你的业务发过消息，会收到 `422` [`E15044`](/docs/api/errors/E15044) 拒绝。模板消息则不受此限制。

## 确认和回应

两种确认操作都适用于群组消息，调用方式与其他入站消息相同：

- 使用消息自身的 ID [将其标记为已读](/docs/guides/whatsapp/mark-message-as-read)。对于群组消息，调用方式没有任何变化。
- 用一个表情符号[对其做出回应](/docs/guides/whatsapp/reactions)。回应会发送到群组，所有参与者都能看到。如果群组不再活跃，更改会被拒绝并返回 `409` [`E15047`](/docs/api/errors/E15047)，这是群组消息的回应独有的拒绝情况，一对一消息的回应不会遇到。

## Webhook

`whatsapp.received` 以与其他消息相同的信封承载群组消息，群组信息位于 `to` 上：

```json
{
  "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**](https://bird.com/dashboard/w/whatsapp/groups) 页面打开群组，或按照[管理 WhatsApp 群组](/docs/guides/whatsapp/groups/management#2-wait-for-whatsapp-to-confirm-it)中的方式读取。

## 后续步骤

- [向 WhatsApp 群组发送消息](/docs/guides/whatsapp/groups/sending)：群组寻址、发送条件及每个参与者的回执
- [管理 WhatsApp 群组](/docs/guides/whatsapp/groups/management)：通过 API 创建群组、邀请链接、加入请求和置顶消息
- [WhatsApp 群组](/docs/guides/whatsapp/groups)：群组的用途，以及 WhatsApp 的限制
- [接收 WhatsApp 消息](/docs/guides/whatsapp/receiving-whatsapp)：所有内容类型、媒体和引用回复
- [业务范围用户 ID](/docs/guides/whatsapp/business-scoped-user-ids)：向没有电话号码的参与者发送消息

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
