概述
本指南解释了如何将 WhatsApp 呼叫与您的语音代理或第三方平台集成。内容涵盖了入站和出站呼叫流、API 身份验证、WebRTC 设置、Webhook 配置、呼叫权限以及维护稳定语音集成的最佳实践。
注意: 将 WhatsApp 呼叫与您的 CRM 或内部工具集成 功能目前处于测试阶段,需申请方可使用。如需启用,请联系您的客户成功经理 (CSM) 或 Wati 支持团队。
说明
Wati 的 WhatsApp 呼叫 API 允许企业使用 WebRTC 将 WhatsApp 呼叫与其自身的语音基础设施连接。
该集成通过连接以下内容来实现:
由 Wati API 和 Webhook 管理的 WhatsApp 信令层
由您自己的语音代理或第三方平台处理的 媒体层
本指南适用于构建自定义语音集成的开发人员。
核心架构和身份验证
该集成使用 Wati 和您的 WebRTC 基础设施之间的会话描述协议 (SDP) 交换。
API 基础 URL
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls>将 {tenant_id} 替换为您的 Wati 租户 ID。
身份验证
每个 API 请求必须在请求头中包含 Bearer 令牌。
Authorization: Bearer {YOUR_ACCESS_TOKEN}查找您的 API 凭据
登录到您的 Wati 账户。
在菜单中导航至 连接器 → API 文档。
复制您的:
API 端点
Bearer 令牌
注意: 如果您更改了 Wati 密码,您现有的 Bearer 令牌将失效。您必须使用新令牌更新您的集成。
处理入站呼叫
第 1 步:配置入站呼叫 Webhook
在 Wati 平台上,为以下内容配置您的 Webhook URL:
新入站呼叫 Webhook
此 Webhook 接收来自 WhatsApp 用户的入站呼叫请求和 SDP 提供。
第 2 步:接收入站 Webhook
当用户拨打您的 WhatsApp 号码时,Wati 会发送一个包含呼叫者 SDP 提供的 POST 请求。
示例请求负载:
{
"callId": "WHATSAPP_CALL_ID",
"sdp": "v=0... (来自 WhatsApp 的提供)",
"businessNumber": "1234567890"
}第 3 步:进行 WebRTC 协商
您的应用程序现在必须建立 WebRTC 会话。
初始化对等连接
在您的服务器、语音代理或第三方平台上创建一个 RTCPeerConnection。
设置远程描述
将从 Webhook 收到的 SDP 用作远程描述。
生成 SDP 答复
从您的对等连接生成本地 SDP 答复。
重要: 确保 SDP 指纹为大写,以确保与 WhatsApp 的兼容性。
示例:
a=fingerprint:SHA-256
第 4 步:接听电话
使用接受呼叫 API 将生成的 SDP 答复发送回 Wati。
请求详情
方法
POST
端点
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/{callId}/accept>头部
Authorization: Bearer {YOUR_ACCESS_TOKEN}请求体
{
"Sdp": "v=0... (您的回答)"
}
进行出站呼叫
WhatsApp 要求企业在发起出站呼叫之前,必须获得用户的许可。
第 1 步:管理呼叫权限
检查现有权限状态
使用以下端点检查用户是否已经授予呼叫权限。
GET .../calls/permissions/{waid}请求权限
如果尚未授予权限,请使用以下方法请求权限:
POST .../calls/call-permission-request/{waid}等待权限批准
Wati 在用户接受或拒绝请求后,会发送 呼叫权限 Webhook。
只有在获得批准后才可进行出站呼叫。
发起出站呼叫
第 2 步:创建并发送 SDP 提供
生成 SDP 提供
使用您的 WebRTC RTCPeerConnection 创建一个 SDP 提供。
调用出站呼叫 API
将 SDP 提供发送给 Wati。
方法
POST
端点
<https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/outbound-call/{waid}>头部
Authorization: Bearer {YOUR_ACCESS_TOKEN}请求体
{
"Sdp": "v=0... (您的提供)"
}接收呼叫 ID
如果请求成功,Wati 返回一个 callId。
建立音频流
第 3 步:完成 WebRTC 连接
监控呼叫状态
使用 新出站呼叫状态 Webhook 跟踪更新,例如:
呼叫中
响铃
已接听
接收用户的 SDP 答复
当用户接听呼叫时,Wati 会发送包含用户 SDP 答复的 新出站呼叫 Webhook。
完成连接
将接收到的 SDP 答复设置为您 RTCPeerConnection 中的远程描述。
这将在用户和您的语音平台之间建立音频流。
终止呼叫
当用户挂断时
Wati 会发送 终止呼叫 Webhook 以通知您的应用程序呼叫已结束。
当企业挂断时
请使用终止呼叫 API。
请求详情
端点
POST <https://live-mt-server.wati.io/{tenant_id}/api/v1/openapi/whatsapp/calls/{callId}/terminate>头部
Authorization: Bearer {YOUR_ACCESS_TOKEN}
您可以将 Webhook URL 发布在哪里?
所需的 Webhook URL
在 Wati 中配置以下 Webhook 端点。
新入站呼叫 Webhook
接收来自 WhatsApp 用户的入站 SDP 提供。
终止呼叫 Webhook
接收呼叫断开的通知。
新出站呼叫 Webhook
接收出站呼叫的 SDP 答复。
新出站呼叫状态 Webhook
接收出站呼叫状态更新,例如:
呼叫中
响铃
已接听
呼叫权限 Webhook
接收用户的权限批准或拒绝事件。
Webhook 要求
您的 Webhook 端点必须:
公开可访问
返回 HTTP
200 OK响应在 30 秒内响应
配置 Webhook API 密钥验证
您可以在 Wati 配置 UI 中配置专用 API 密钥以进行 Webhook 验证。
Wati 在每个 Webhook 请求的 Authorization 头中包含该密钥。
示例:
Authorization: Bearer {ApiKey}您可以使用此密钥来:
验证 Webhook 的真实性
验证传入请求
保护您的 Webhook 端点
技术最佳实践
使用 Opus 编解码器
WhatsApp Calling 目前仅支持音频。
您的语音平台必须使用 Opus 音频编解码器以确保兼容性。
禁用 ICE trickle
在 SDP 协商期间,请勿使用 ICE Trickle。
Wati 需要一个完整的 SDP 块,其中已包含所有 ICE 候选者。
发送完整的 SDP 负载
确保您的 SDP 包含:
ICE 候选者
指纹
媒体信息
在向 Wati API 发送请求之前。
呼叫流程概述
入站呼叫流程
出站呼叫流程
呼叫权限流程
常见问题 (FAQ)
可用性和访问
1. 此功能在所有 Wati 计划中均可用吗?
不,此功能仅在 Pro 及更高计划中可用。
2. 为什么我在我的 Wati 账户中看不到此配置?
此配置仅在请求时启用。您需要联系 Wati 支持以为您的账户启用。
呼叫和集成
3. 使用 WhatsApp Calling 在外部平台或自定义 AI 代理时,呼叫会被录制和转录吗?
不,当在外部平台或自定义 AI 代理上使用 WhatsApp Calling 时,呼叫不会被录制或转录。呼叫在您自己的服务器上进行,Wati 无法控制。
4. 我可以在 Wati 和外部集成平台上同时处理呼叫吗?
不,所有入站呼叫将被路由到您外部集成的平台,而不是 Wati。
5. 为什么通过 Wati 发起的出站呼叫无法检测呼叫是否被接受或拒绝?
通过 Wati 发起的出站呼叫无法检测呼叫是否被接受或拒绝,因为您将配置自己的 Webhook 端点以接收呼叫状态更新,例如响铃、已接听或已拒绝。
支持和实施
6. 如果我对实施不太熟悉,有谁可以帮助我设置此功能?
Wati 为企业计划客户提供实施支持,需按需提供。您可以联系您的客户成功经理 (CSM) 安排电话会议。





