-
Notifications
You must be signed in to change notification settings - Fork 5
SAAS WhatsApp API webhook
张锦城 edited this page Jun 9, 2026
·
31 revisions
对提供的webhook地址,进行WhatsApp业务相关的推送信息(目前webhook支持推送状态回复、模板按钮点击回调)
- URL:
webhook_url - Method:
POST - Content-Type:
application/json
对调用WhatsApp-API发送消息的场景,提供消息的回执情况
body参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| app_id | String | 应用ID |
| business_phone | String | 商户电话 |
| channel | Integer | 通道类型,WhatsApp 固定值为 2 |
| contacts | array[contact Object] | 联系人信息。状态回调中可能返回;用户采用匿名化后,手机号相关字段可能没有值。 |
| merchant_phone | String | 商户电话 |
| messaging_product | String | 消息类型,固定值”whatsapp“ |
| metadata | Object | 商户号码元信息 |
| statuses | array[status Object] | 状态对象 |
| wabaId | String | WABA ID |
- metadata Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| display_phone_number | String | 商户展示号码 |
| phone_number_id | String | 商户号码ID |
- contact Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| profile | Object | 用户信息,该字段不一定存在 |
| wa_id | String | 用户的电话号码【用户采用匿名化后,该字段可能没有值】 |
| user_id | String | 将设置为 WhatsApp 用户的 BSUID。未返回 BSUID 时,该字段可能省略。 |
| parent_user_id | String | 如果您已启用父级 BSUID,此属性会被设为用户的父级 BSUID。否则,该属性会被完全省略。 |
- profile Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| name | String | 值将设为 WhatsApp 用户的显示名。 |
| username | String | 如果用户已启用匿名化功能,将设置为 WhatsApp 用户的匿名账户。对于 sent 状态消息 Webhook 或用户未启用匿名化功能的情况,此属性将被完全省略。 |
- status Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| biz_opaque_callback_data | String | 发送消息时携带的追踪参数,该字段不一定存在 |
| conversation | Object | 会话信息,failed 状态可能不返回 |
| errors | array[error Object] | 错误信息,仅失败场景返回 |
| id | String | 消息ID(发送消息时返回的ID) |
| meta_message_id | String | Meta 原始消息ID,该字段不一定存在;发送引用消息时可能用到该字段值,id 与 meta_message_id 并存时使用 meta_message_id 作为被引用的消息ID,否则使用 id
|
| pricing | Object | 计费模式,failed 状态可能不返回 |
| recipient_id | String | 用户的电话号码【用户采用匿名化后,该字段可能没有值】 |
| recipient_user_id | String | 如果您将消息发送给用户的 BSUID 或父级 BSUID,此属性会被设为该用户的 BSUID 或父级 BSUID。否则,这会被省略。 |
| parent_recipient_user_id | String | 如果您已启用父级 BSUID,此属性会被设为用户的父级 BSUID。否则,这会被完全省略。 |
| timestamp | String | 回调时间戳 |
| status | String | 消息的状态,sent(已发送),delivered(已送达),read(已读),failed(发送失败),deleted(已删除) |
| costs | array[cost Object] | 费用信息,通常在 sent 状态返回 |
- conversation Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| id | String | 会话ID |
| expiration_timestamp | String | 会话过期时间戳,通常在 sent 状态返回 |
| origin | Object | 会话类型信息 |
- origin Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| type | String | 会话类型,例如 utility(通知会话)、marketing(营销会话)、authentication(验证会话)、service(服务会话)、referral_conversion(免费会话)、marketing_lite(MM Lite API会话) |
- pricing Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| billable | boolean | 指示给定消息或对话是否计费 |
| category | String | 计费类别,例如 utility、marketing、authentication、service、referral_conversion、marketing_lite |
| pricing_model | String | 计费模型,例如 PMP、CBP |
| type | String | 计费类型,例如 regular、free_customer_service、free_entry_point |
- cost Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| cdr_type | Integer | cdr类型,1(消息),4(营销会话),5(通知会话),6(验证会话),7(服务会话),8(免费会话),9(国际验证),10(MM Lite Api) |
| currency | String | 币种 |
| direction | Integer | 方向,1(下行),2(上行) |
| foreign_price | number | 客户售价(客户币种费用) |
| message_id | String | WA 消息ID |
| price | number | 平台结算价格,该字段不一定存在 |
- error Object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | Integer | 错误码 |
| meta_code | Integer | Meta 错误码,该字段不一定存在 |
| title | String | 错误信息 |
当用户启用匿名化时,状态回调中的手机号字段可能不会返回:
-
recipient_id:用户的电话号码,匿名化后可能没有值。 -
contacts[].wa_id:用户的电话号码,匿名化后可能没有值。 -
recipient_user_id/contacts[].user_id:用户的 BSUID;如果发送时使用 BSUID 或父级 BSUID,回调会返回对应值。 -
parent_recipient_user_id/contacts[].parent_user_id:父级 BSUID;仅在启用父级 BSUID 时返回。 -
contacts[].profile.username:匿名账户;对于sent状态消息或用户未启用匿名化时会省略。
{
"app_id": "547",
"business_phone": "62895303xxxx",
"channel": 2,
"contacts": [
{
"user_id": "US.36196856xxxx4656",
"wa_id": "1859967xxxx"
}
],
"merchant_phone": "62895303xxxx",
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "62895303xxxx",
"phone_number_id": "1034730xxxxx9406"
},
"statuses": [
{
"biz_opaque_callback_data": "NX_AI_SOURCE",
"conversation": {
"expiration_timestamp": "1780904196",
"id": "3776abb4f63181b0ba423a556f6xxxx",
"origin": {
"type": "utility"
}
},
"costs": [
{
"cdr_type": 5,
"currency": "USD",
"direction": 1,
"foreign_price": 0.0000,
"message_id": "wamid.HBgLMTg1OTk2Nzk3OTQVAgARGBI2RDd...",
"price": 0.0000
}
],
"id": "NX_AI_SOURCE-1cfaf78ac39041d58e14d80fxxxx",
"meta_message_id": "wamid.HBgLMTg1OTk2Nzk3OTQVAgARGBI2RDd...",
"pricing": {
"billable": true,
"category": "utility",
"pricing_model": "PMP",
"type": "regular"
},
"recipient_id": "1859967xxxx",
"recipient_user_id": "US.36196856xxxx4656",
"status": "sent",
"timestamp": "1780904196"
}
],
"wabaId": "1007605xxxxx6973"
}{
"app_id": "547",
"business_phone": "62895303xxxx",
"channel": 2,
"contacts": [
{
"user_id": "DE.36196866xxxx4557",
"wa_id": "4917766xxxx"
}
],
"merchant_phone": "62895303xxxx",
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "62895303xxxx",
"phone_number_id": "1034730xxxxx9406"
},
"statuses": [
{
"biz_opaque_callback_data": "NX_AI_SOURCE",
"conversation": {
"id": "d826cad84c494a0922d709751dxxxx",
"origin": {
"type": "utility"
}
},
"id": "NX_AI_SOURCE-0b67fa1a357a4193a6ce1d25xxxx",
"meta_message_id": "wamid.HBgMNDkxNzc2Njk4NTM2FQIAERgSNkUw...",
"pricing": {
"billable": true,
"category": "utility",
"pricing_model": "PMP",
"type": "regular"
},
"recipient_id": "4917766xxxx",
"recipient_user_id": "DE.36196866xxxx4557",
"status": "delivered",
"timestamp": "1780904268"
}
],
"wabaId": "1007605xxxxx6973"
}{
"app_id": "433",
"business_phone": "9665356xxxx",
"channel": 2,
"contacts": [
{
"user_id": "SA.13082051xxxx8477",
"wa_id": "9665984xxxx"
}
],
"merchant_phone": "9665356xxxx",
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "9665356xxxx",
"phone_number_id": "2159038xxxxx0007"
},
"statuses": [
{
"biz_opaque_callback_data": "NX_AI_SOURCE",
"conversation": {
"id": "683b09b74d09aed49ad8b02ac4xxxx",
"origin": {
"type": "utility"
}
},
"id": "NX_AI_SOURCE-7af1311983974721b8854d72xxxx",
"meta_message_id": "wamid.HBgMOTY2NTk4NDk5NzUyFQIAERgSNUM0...",
"pricing": {
"billable": true,
"category": "utility",
"pricing_model": "PMP",
"type": "regular"
},
"recipient_id": "9665984xxxx",
"recipient_user_id": "SA.13082051xxxx8477",
"status": "read",
"timestamp": "1780904326"
}
],
"wabaId": "2574232xxxxx9503"
}{
"app_id": "547",
"business_phone": "62895303xxxx",
"channel": 2,
"contacts": [
{
"wa_id": "1775391xxxx"
}
],
"merchant_phone": "62895303xxxx",
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "62895303xxxx",
"phone_number_id": "1034730xxxxx9406"
},
"statuses": [
{
"biz_opaque_callback_data": "NX_AI_SOURCE",
"errors": [
{
"code": 131026,
"title": "Message undeliverable"
}
],
"id": "NX_AI_SOURCE-c0c971b05dbc448b94ccb77dxxxx",
"meta_message_id": "wamid.HBgLMTc3NTM5MTczNzgVAgARGBI0OEY...",
"recipient_id": "1775391xxxx",
"status": "failed",
"timestamp": "1780904362"
}
],
"wabaId": "1007605xxxxx6973"
}deleted 状态保留历史兼容格式,实际字段以回调返回为准。
{
"statuses": [
{
"id": "ID",
"recipient_id": "WHATSAPP_ID",
"status": "deleted",
"timestamp": "TIMESTAMP",
"type": "message",
"message": {
"recipient_id": "WHATSAPP_ID"
}
}
]
}对调用WhatsApp-API发送模板消息的场景,提供点击按钮消息的回执情况(只支持模板中快速回调按钮点击的回调)
body参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| contacts | array[contact JsonObject] | 联系人信息 |
| messages | array[message JsonObject] | 回调信息 |
| business_phone | String | 商户电话 |
| messaging_product | String | 消息类型,固定值”whatsapp“ |
- contact object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| profile | object | 联系人信息 |
| wa_id | String | wa id |
- profile object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| name | String | 姓名 |
- message object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| button | object | 按钮信息 |
| from | String | 收件人WhatsApp号码 |
| id | String | 消息id |
| timestamp | String | 回调时间戳 |
| type | String | 类型 |
| wa_ext | String | 发送模板消息时参数、模板名称、模板id等信息 |
| context | object | 仅当有人回复您的一条消息时,才会包含此对象。包含有关原始消息内容的信息,例如发送者的 ID 和消息的 ID |
| tag_name | String | 意向标签名称 |
- button object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| payload | String | 按钮id |
| text | String | 按钮名称 |
- context object参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| from | String | 收件人号码 |
| id | String | 仅当有人回复您的一条消息时包含有关原始消息的发送者的ID或者消息的ID |
{
"business_phone":"1xxxxxxxxxx",
"contacts":[
{
"profile":{
"name":"姓名"
},
"wa_id":"861xxxxxxxxxx"
}
],
"messages":[
{
"button":{
"payload":"按钮id",
"text":"模板按钮名称"
},
"context":{
"from":"185xxxxxx99",
"id":"wamid.9ce86df19d7941c3965cac2a131a0b0e"
},
"from":"861xxxxxxxx59",
"id":"wamid.HBgNODYxMzYwMzAxOTc1ORUCABIYFjNFQjA0NUJBNDczOTIzQUZBOUQ0OUEA",
"timestamp":"1692266760",
"type":"button",
"tag_name":"意向标签名称",
"wa_ext":"{\"templateId\":233,\"templateName\":\"模板名称\",\"components\":[{\"type\":\"body\",\"parameters\":[{\"type\":\"text\",\"text\":\"xxxx\"},{\"type\":\"text\",\"text\":\"xxxx\"},{\"type\":\"text\",\"text\":\"xxxxx\"}]}]}"
}
],
"messaging_product":"whatsapp"
}简介
短信
语音
- 上传语音录音文件
- 上传语音录音文件_v1
- 已上传录音文件查询
- 发送语音群呼
- 发送语音通知
- 发送语音验证码
- 语音验证码回填上报
- 语音回执回调
- 语音记录查询
- 上传语音录音文件-旧版本已废弃
- 发送语音群呼‐旧版已废弃
- 发送语音通知‐旧版已废弃
- 发送语音验证码‐旧版已废弃
- 语音回执回调‐旧版已废弃
云呼叫中心(NXLink)
- Web SDK
- Iframe集成
- 手动拨号通话记录查询
- 通过orderId查询
- 手动拨号记录回调
- 坐席信息查询
- 坐席状态查询
- 坐席状态信息查询
- 坐席组查询
- 坐席可用主叫查询
- 坐席组成员查询
- 坐席组更新成员
- 坐席效率统计
- 创建AICC外呼任务
- Webhook-手动外呼
云呼叫中心(AI自动外呼)
- Callbot API概述
- Callbot API鉴权
- Callbot 接口探活
- 创建自动拨号任务
- 批量添加拨打名单
- 创建自动拨号任务并添加拨打名单
- 任务控制(启动/暂停)
- 更新任务
- 获取通话列表
- 获取任务列表
- 获取拨打订单列表
- 停止订单拨打
- 查询订单维度拨打详情
- 通话维度回调
- 订单维度拨打回调
- 任务状态回调
- 批次-导出最新批次数据
- 批次-导入最新批次数据
Flash Call
短链
邮件验证码
DID号码
- DID号码进行短信下行V2
- DID短信结果回调(加签)
- DID短信结果回调(无加签)
- DID号码短信记录查询(新接口,未启用)
- DID号码通话记录查询
- DID呼出并转接到Amazon坐席
- DID呼出前与Connect号码绑定
通用
号码检测
- 发送消息
- 发送otp消息
- webhook
- 标记入站消息已读
- 上传媒体文件
- 获取媒体文件
- 删除媒体文件
- 查询号码信息
- 查询消息模板
- 创建消息模板
- 异步创建消息模板
- 编辑消息模板
- 删除消息模板
- 上传模板示例文件
- 嵌入式页面登录
- 创建客户应用
- 客户应用的号码列表
- 获取验证码
- 核验验证码
- flows-创建流
- flows-更新流
- flows-根据流ID查询流信息
- flows-根据whatsapp号码查询流列表
- flows-根据流ID查询流预览地址
- flows-查询流JSON
- flows-发布流
- flows-删除流草稿
- flows-废弃已发布的流
- flows-更新流JSON
- flows-上传业务公钥
- ads-根据公共主页ID查询绑定的数据集列表
- ads-根据数据集ID上报CAPI广告数据
- 封锁用户
- 业务主页
- 查询消息记录
- 查询calling配置
- 查询calling通话记录
- 禁用calling配置
- 启用calling配置
- 二维码管理
Viber
Zalo ZNS
Super Message API
隐私号(旧)
PNS
坐席(旧版)
- NXphone PC 使用说明
- NXphone Android 使用说明
- NXphone Android SDK 接入文档
- 呼叫挂断原因解释
- 话单CDR查询接口
- 话单CDR回调接口说明(V1.0)
- 坐席API调用接口说明(V1.0)
- 根据orderid查询话单CDR接口
- 坐席系统sip链接调用方式(推荐)
- 号码脱敏处理
- 修改话机密码接口
- 查询审批单
- 查询话机
- WebRTC SDK使用说明
NXLINK(HKG)
- 发送WhatsApp消息
- webhook
- 发送Viber消息
- webhook-viber
- 发送Line消息
- webhook-Line
- 批量创建客户
- 批量创建客户sea
- 查询客户字段接口
- 查询、创建模板相关接口
- 查询对话分析相关接口
- 查询通知分析相关接口
- 查询聊天记录接口
- 查询客户列表
NXLINK(IDN)
- 发送WhatsApp消息
- webhook
- 发送Viber消息
- webhook-viber
- 发送Line消息
- webhook-Line
- 批量创建客户
- 批量创建客户sea
- 查询客户字段接口
- 查询、创建模板相关接口
- 查询对话分析相关接口
- 查询通知分析相关接口
- 查询聊天记录接口
- 查询客户列表
NXLINK(CHL)
- 发送WhatsApp消息
- webhook
- 发送Viber消息
- webhook-viber
- 发送Line消息
- webhook-Line
- 批量创建客户
- 批量创建客户sea
- 查询客户字段接口
- 查询、创建模板相关接口
- 查询对话分析相关接口
- 查询通知分析相关接口
- 查询聊天记录接口
- 查询客户列表
AI Agent
RCS