Sign inGet started

不支持的 WhatsApp 消息类型

WhatsApp 承载了 Bird 的 API 未建模的内容,从目录订单到关于对话的系统通知。Bird 不会丢弃这类消息或以空内容投递,而是使用一个 unsupported 分支记录它,该分支标明了 WhatsApp 内容类型。消息在 WhatsApp 日志中可见,并像其他消息一样送达你的 webhook。

不支持的消息包含什么

unsupported.type 携带 WhatsApp 自身的类型字符串来描述收到的内容,这也是消息上唯一的内容。外层信封不变:
代码示例
{
  "id": "wam_01kyh0w4ujnz2x8p1s5dci0vlg",
  "direction": "inbound",
  "from": { "phone_number": "+14155550100" },
  "to": { "phone_number": "+13124495569" },
  "status": "received",
  "unsupported": { "type": "order" },
  "created_at": "2026-08-25T09:31:20Z"
}
type联系人发送的内容
interactiveAPI 无法将其回复形式识别为点击的互动内容
buttonAPI 无法将其识别为回复的按钮点击
order从产品目录下单的购物车或订单
system关于对话的系统通知,例如联系人更换了手机号码
unsupportedWhatsApp 自身的 unsupported 类型,用于其自有客户端无法渲染的消息
unsupported 在上表中不是占位符。当 WhatsApp 的某个客户端发送了其他客户端无法显示的内容时,它会上报一个以此命名的内容类型,该值即以此形式到达。
该列表是开放的。WhatsApp 会随时间添加新的内容类型,因此遇到无法识别的 type 时,应将其视为未来的类型而非错误:记录并继续,而不是中断读取。

webhook 载荷

whatsapp.received 也会为不支持的消息触发,携带相同的分支:
代码示例
{
  "type": "whatsapp.received",
  "timestamp": "2026-08-25T09:31:20.774Z",
  "data": {
    "whatsapp_id": "wam_01kyh0w4ujnz2x8p1s5dci0vlg",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
    "direction": "inbound",
    "from": { "phone_number": "+14155550100" },
    "to": { "phone_number": "+13124495569" },
    "unsupported": { "type": "order" },
    "tags": null,
    "metadata": null
  }
}
根据找到的 content 字段进行分支的端点应有一个默认分支,该分支正是此 arm 所落入的位置。无论哪种情况都以 2xx 确认 webhook:重试不会改变任何结果,因为内容不会在两次尝试之间变为已建模。

不支持的消息仍然会做什么

在不依赖于内容的所有方面,该消息都被视为一条入站消息:
  • 它会重置客服窗口为全新的 24 小时,因此从目录下单的订单会重新打开自由回复权限。
  • 它会出现在消息列表和 WhatsApp 日志中,显示其类型而非空白行。
  • 它不会被计费。 入站消息均不收费。
你无法做的是读取其内容。订单不会携带购物车详情,系统通知也不会说明具体变更。如果需要这些细节,可以用文字询问联系人,或使用回复按钮或列表菜单,使回答以你可以处理的已建模分支到达。

注意事项

  • 不要将该分支视为错误。 消息已成功接收,只是内容未建模。对其告警意味着每当联系人下单时都会触发告警。
  • system 类型可能意味着联系人更换了号码。 Meta 将电话号码变更记录为引发系统消息的事件之一,同时会重新生成联系人的业务范围用户 ID。该分支仅标明类型,不含其他信息,因此应将其视为重新确认对方身份的提示。
  • 表情回应不是不支持的消息。 它根本不是入站消息,因此不会触达任何 webhook,也不会出现在任何消息列表中:每次变更都记录在被回应消息自身的回应日志中,详见 WhatsApp 事件
  • 原样存储类型值。 未来的类型会解析为你尚未编写代码处理的名称,保留原始值才能在你实现支持后找到这些消息。

后续步骤