Sign inGet started

接收 WhatsApp 文本消息

联系人在聊天中输入内容后会产生一条携带 text 的入站消息。这是最常见的入站分支,也是打开或重置客户服务窗口的分支。

入站文本携带的内容

text.body 保存联系人输入的内容,该分支上不携带其他任何字段:
代码示例
{
  "id": "wam_01kya19eknftrs2s6p82asmvnh",
  "direction": "inbound",
  "from": { "phone_number": "+14155550100", "display_name": "Alex Rivera" },
  "to": { "phone_number": "+13124495569" },
  "status": "received",
  "text": { "body": "Is my order out for delivery yet?" },
  "created_at": "2026-08-25T09:04:11Z"
}
preview_url 是一个发送端字段。入站文本不携带链接预览标志,无论联系人自己的客户端渲染了什么,因此 body 中的 URL 会作为文本的一部分被读取。
读取 schema 未对入站 body 声明最大长度。4096 字符的上限属于发送端,因此请将存储设计为无限制文本,而不是依赖入站分支未承诺的限制。

以引用回复方式发送的文本

当联系人通过引用你的某条消息来回复时,分支不变,in_reply_to_message_id 标识他们回复的那条消息:
代码示例
{
  "id": "wam_01kyb2m4xq7whs0d8n3prv6tez",
  "direction": "inbound",
  "from": { "phone_number": "+14155550100" },
  "to": { "phone_number": "+13124495569" },
  "status": "received",
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "text": { "body": "Yes, that one" },
  "created_at": "2026-08-25T09:06:02Z"
}
WhatsApp 并非标记每一条回复,未标记的回复不携带任何 ID。请参阅中心页面的引用回复,了解解析可能遗漏的情况以及如何在没有 ID 时进行关联。

Webhook 载荷

whatsapp.received 在事件信封上携带相同的分支,因此端点可以直接处理文本,无需再读取消息:
代码示例
{
  "type": "whatsapp.received",
  "timestamp": "2026-08-25T09:04:11.118Z",
  "data": {
    "whatsapp_id": "wam_01kya19eknftrs2s6p82asmvnh",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
    "direction": "inbound",
    "from": { "phone_number": "+14155550100", "display_name": "Alex Rivera" },
    "to": { "phone_number": "+13124495569" },
    "text": { "body": "Is my order out for delivery yet?" },
    "tags": null,
    "metadata": null
  }
}

注意事项

  • 文本是联系人重新打开窗口的最低成本方式。 任何入站消息都会将服务窗口重置为 24 小时,而文本是大多数联系人发送的内容;从那一刻起,你可以发送自由格式的回复。
  • from 可能不携带电话号码。 已启用 WhatsApp 用户名的联系人通过业务范围用户 ID联系你,因此请从 from 读取身份信息,而不要假定 from.phone_number 已设置。
  • 正文是联系人自己输入的内容。 点击你发送的某个元素会以互动回复的形式到达其独立的分支。

后续步骤