跳至主要內容

如何設定 Wati 中的 WhatsApp Calling API 和 Webhook

摘要

本指南說明如何將 WhatsApp 通話與您自己的語音代理程式或第三方平台整合。內容涵蓋進線和撥出通話流程、API 驗證、WebRTC 設定、webhook 設定、通話權限以及維護穩定語音整合的最佳實務。

說明

Wati 的 WhatsApp 通話 API 允許企業使用 WebRTC 將 WhatsApp 通話與其自身的語音基礎架構連線。

整合方式如下:

  • 由 Wati API 和 webhook 管理的WhatsApp 訊號層

  • 由您自己的語音代理程式或第三方平台處理的媒體層

本指南適用於建置自訂語音整合的開發人員。

核心架構與驗證

此整合透過 Wati 與您的 WebRTC 基礎架構之間的 Session Description Protocol (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 帳戶。

  • 在選單中導覽至ConnectorsAPI Docs

  • 複製您的:

    • API Endpoint

    • Bearer Token

注意:如果您變更 Wati 密碼,您現有的 Bearer Token 將失效。您必須使用新 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... (WhatsApp 的提案)",
"businessNumber": "1234567890"
}

步驟 3:執行 WebRTC negotiation

您的應用程式現在必須建立 WebRTC 工作階段。

初始化 peer 連線

在您的伺服器、語音代理程式或第三方平台建立 RTCPeerConnection

設定遠端描述

使用從 webhook 收到的 SDP 作為遠端描述。

產生 SDP 回應

從您的 peer 連線產生本機 SDP 回應。

重要:為確保與 WhatsApp 相容,請務必將 SDP fingerprint 設定為大寫。

範例:

a=fingerprint:SHA-256

步驟 4:接聽電話

使用 Accept Call 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... (您的回應)"
}

撥打外撥電話

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... (您的提案)"
}

接收 Call 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 通知您的應用程式通話已結束。

當企業掛斷電話時

使用 Terminate Call 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 codec

WhatsApp Calling 目前僅支援音訊。

為確保相容性,您的語音平台必須使用Opus 音訊 codec。

停用 ICE trickle

請勿在 SDP negotiation 期間使用 ICE Trickle。

Wati 需要完整的 SDP 區塊,其中已包含所有 ICE candidates。

傳送完整的 SDP payload

請確保您的 SDP 包含:

  • ICE candidates

  • Fingerprints

  • Media information

在向 Wati API 傳送請求之前。

通話流程概覽

進線通話流程

外撥電話流程

通話權限流程

常見問題 (FAQ)

可用性和存取

1. 此功能是否適用於所有 Wati 方案?

否,此功能僅適用於 Pro 方案及以上方案。

2. 為什麼我在 Wati 帳戶中看不到此設定?

此設定僅依申請啟用。您需要聯繫 Wati 客服才能為您的帳戶啟用。

通話與整合

3. 當使用外部平台或 BYOA 進行 WhatsApp 通話時,通話會被錄製和轉錄嗎?

否,當使用外部平台或自攜裝置 (BYOA) 進行 WhatsApp 通話時,通話不會被錄製或轉錄。通話透過您自己的伺服器進行,Wati 無法控制。

4. 我可以在 Wati 和外部整合平台同時處理通話嗎?

否,所有進線電話將路由至您的外部整合平台,而不是 Wati。

5. 為什麼透過 Wati 撥打的外撥電話無法偵測通話是否已被接受或拒絕?

透過 Wati 撥打的外撥電話無法偵測通話是否已被接受或拒絕,因為您將設定自己的 webhook 端點來接收通話狀態更新,例如響鈴、已接聽或已拒絕。

支援與實施

6. 如果我對實施技術不熟悉,誰可以協助我設定此功能?

Wati 可為商業方案的客戶提供必要的實施支援。您可以聯繫您的客戶成功經理 (CSM) 安排通話。

是否回答了您的問題?