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





