自帶 SIP 中繼:在您已在使用的電信業者上執行 AI 語音代理
在您已擁有的 SIP 中繼上執行 AI 語音代理。號碼和電信費率仍歸您所有,不加價。
最後更新於
發布於 。電信業者名稱是其各自所有者的商標;Wixzel Voice 透過標準 SIP 與它們整合,與任何一家均無關聯,也未獲得其背書。
電信業者指南
Twilio
Elastic SIP Trunking。將平台 IP 加入 Termination IP ACL 允許清單,並為來電設定 Origination SIP URI。
Telnyx
以 IP 驗證的 SIP Connection。將平台 IP 加入為授權位址、選擇來電區域,並讓傳輸協定一致。
Plivo
Zentrunk。一個在 IP ACL 中加入平台 IP 的外撥中繼,以及一個 Primary URI 指向平台的獨立來電中繼。
Vonage
Programmable SIP。在 SIP Dashboard 中將平台 IP 加入中繼的 ACL,並將來電送到 origination URI。
Bandwidth
不支援 SIP REGISTER,因此必須使用固定 IP。將平台 IP 加入 location,分別設定 Termination 和 Origination,或使用 network bridge 憑證。
Exotel
Virtual SIP Trunking (vSIP),適用於印度號碼,透過 TCP。將平台 IP 以 ACL 對應到中繼,並將 Destination URI 指向平台的 TCP 連接埠以接收來電。
Vobiz
以每條中繼專屬的 SIP 網域作為主機,將平台 IP 加入中繼的 IP ACL,而「origination URI」的意思與 Twilio 上相反。
Mobily
Saudi Arabia, ordered through Mobily Business sales and delivered over a private link. No one-step connect: your own SBC on the link relays calls, with G.711 A-law and a one-hour call cap.
任何 SIP 供應商
各家的做法都相同:將平台 IP 加入允許清單、將來電目的地設為 origination URI,並讓號碼格式和傳輸協定一致。
為什麼要自帶 SIP 中繼?
- 號碼仍歸您所有
- Wixzel Voice 從不販售號碼,也不提供號碼移轉。要離開,只需在電信業者那裡改一項設定。
- 費率維持不變
- 您的電信業者向您收取線路費用。Wixzel Voice 只按秒收取語音引擎的費用。
- 合規設定不必變動
- 來電顯示、KYC 和各項登記,都留在您已信任的電信業者那裡。
- 任何 SIP 供應商
- 有八家電信業者提供了指南。任何有 SIP 中繼的業者都能使用。
自帶的 SIP 中繼如何連接?
Wixzel Voice 的中繼分為兩個部分,分別位於電信業者主控台的不同地方。每個中繼都會回傳這兩個位址,因此請從 API 讀取,不要依賴頁面上的內容保持最新。
將 187.126.120.231 加入電信業者的 IP 允許清單。幾乎所有電信業者都依來源 IP 授權外撥通話,即使中繼的其他設定都正確,少了這一項仍會失敗。
將電信業者的來電目的地設為 sip:187.126.120.231:5090。漏了這一項,號碼就永遠不會響:電信業者沒有地方可以送出通話,因此任何記錄中都不會出現。
curl https://api.voice.wixzel.com/v1/sip-trunks \
-H "Authorization: Bearer $WIXZEL_API_KEY" \
| jq '.data[0] | {platform_ip, origination_uri}'哪些電信業者有設定指南?
以下每家電信業者都有自己的頁面,說明要購買什麼、要將什麼加入允許清單、來電要送往何處、適用的中繼請求,以及該業者特有的注意事項,並附上文件中完整主控台步驟的連結。每家電信業者對這兩項設定的稱呼不同,但設定本身是一樣的。
| 電信業者 | 產品 | 允許清單的名稱 | 來電目的地的名稱 | 傳輸方式 |
|---|---|---|---|---|
| Twilio | Elastic SIP Trunking | IP Access Control List | Origination SIP URI | udp |
| Telnyx | SIP Connections | authorised addresses on an IP-authenticated SIP Connection | 指南中尚未列出 | udp |
| Plivo | Zentrunk | IP Access Control List | Primary URI | udp |
| Vonage | Programmable SIP | ACL (Access Control List) | 指南中尚未列出 | udp |
| Bandwidth | - | Voice IP addresses / DNS hosts on a location | Origination | udp |
| Exotel | Virtual SIP Trunking (vSIP) | ACL mapped to the trunk | Destination URI | tcp |
| Vobiz | - | IP ACL | 指南中尚未列出 | udp |
| Mobily | SIP Trunk | trusted peers on the SBC that holds your Mobily link | SBC route for inbound Mobily calls | udp |
| 任何 SIP 供應商 | - | IP ACL、允許清單或授權位址 | Origination URI,或電信業者對它的稱呼 | udp |
電信業者如何稱呼這兩項設定?
| 作用 | 電信業者使用的名稱 |
|---|---|
| 授權來自 Wixzel Voice 的通話 | IP ACL, IP Access Control List, Access Control List, allowlist, authorised address, network bridge |
| 將通話送到 Wixzel Voice | Origination URI, Primary URI, Destination URI, termination point, destination SIP URI, host |
另外還有兩項設定,決定看似正確的中繼能否運作。 號碼格式: Twilio、Telnyx 和 Vobiz 需要開頭的 +;許多批發電信業者無法解析它,會以 408 逾時,設定 send_plus: false 即可解決。 傳輸方式: 幾乎所有地方預設都是 UDP,但 Exotel 不接受 UDP,因此 Exotel 中繼要透過 TCP 執行;如果不一致,看起來就像電信業者不理會您。
通話沒有接通時會發生什麼事?
API 已接受、但隨後被電信業者拒絕的通話,在 GET /v1/calls/{id} 上會顯示 status: "failed"(原因 17 為 busy,原因 19 為 no-answer),並附上 failure_code(電信業者回傳的 Q.850 原因碼,是可穩定用來判斷分支的值)和 failure_reason(以白話說明該怎麼處理)。它的 cost_micros 為 null:從未接通的通話不會產生費用,為它預留的點數也會釋出。
請先查看電信業者自己的通話紀錄。如果通話沒有列出,表示它從未抵達電信業者:允許清單、中繼主機或防火牆設定有誤。如果有列出,但接聽數和費用都是零,表示電信業者接受了 INVITE 之後又將它清除,這通常是電信業者的權限問題,而不是設定問題:您顯示的來電號碼必須在帳號上獲得授權,市場有要求時 KYC 和任何目的地登記都必須完成,而且目的地號段必須已啟用,而不只是有餘額。以下是 API 會說明的原因:
所有失敗代碼、拒絕原因,以及如何為中繼除錯
| failure_code | 電信業者回報 | 意思 | 處理方式 |
|---|---|---|---|
| 1 | 404 | 電信業者無法辨識此號碼。 | 檢查號碼格式。如果電信業者需要技術撥號前綴,請在中繼上設定 dial_prefix。 |
| 3 | - | 電信業者沒有通往此目的地的路由。 | 您的電信業者帳號可能未開通此目的地。請要求電信業者開通該路由。 |
| 16 | - | 正常掛斷:對方刻意結束了通話。 | 若通話從未被接聽,應解讀為上游某處選擇結束通話,而不是已完成的通話。 |
| 17 | 486 | 號碼忙線中。 | - |
| 18 | 480 | 目的地沒有回應。 | 手機可能已關機或無法接通。 |
| 19 | - | 有響鈴但無人接聽。 | 不需要修正:中繼和號碼都正常運作。 |
| 20 | - | 用戶不在服務範圍內或無法接通。 | - |
| 21 | 403 / 407 | 電信業者在嘗試撥打號碼之前就直接拒絕了通話。 | 依可能性排序:電信業者帳號已停權、已關閉或餘額不足;中繼的使用者名稱或密碼錯誤;platform_ip 未加入允許清單;或來電顯示號碼未在帳號上授權。請先檢查電信業者的 Dashboard。 |
| 22 | - | 號碼已變更,不再使用中。 | - |
| 27 | - | 目的地故障。 | - |
| 28 | 484 | 電信業者拒絕了此號碼格式。 | 如果電信業者需要技術撥號前綴,請在中繼上設定 dial_prefix。 |
| 34 | - | 電信業者沒有可用的線路(壅塞)。 | 請稍後重試。 |
| 38 | 500 / 501 / 502 | 電信業者回傳了伺服器錯誤。 | - |
| 41 | 503 | 電信業者可以連線,但拒絕通話。 | 通常是容量、餘額,或電信業者端的路由中斷。 |
| 42 | - | 電信業者的交換機壅塞。 | 請稍後重試。 |
| 58 | 488 | 編解碼器不符:電信業者拒絕了所提供的音訊編解碼器。 | 在電信業者端提供 G.711(PCMU 或 PCMA)。不支援 G.729。 |
| 88 | 493 | 電信業者以不相容為由拒絕了通話。 | - |
| 102 | 408 | 電信業者未及時回應。 | 確認中繼的 host 和 port,以及電信業者是否接受來自 platform_ip 的 SIP。如果電信業者顯示通話已收到但從未接聽,請將 send_plus 設為 false。 |
這些會在撥號前就被 POST /v1/calls 拒絕,不會產生費用:
| HTTP 狀態 | code | 意思 |
|---|---|---|
| 400 | no_outbound_number | 沒有來電顯示號碼:請傳入 from_number_id,或在代理上設定 outbound_phone_number_id。 |
| 400 | number_not_on_trunk | 撥出號碼沒有 sip_trunk_id,因此無處可送出通話。 |
| 400 | missing_idempotency_key | 原始 HTTP 請求沒有 Idempotency-Key。SDK 會自動為您傳送。 |
| 402 | insufficient_credits | 餘額不足以支付最初 15 秒的費用。請儲值後重試。 |
| 429 | rate_limit_exceeded | 此金鑰每秒超過 10 個請求。請等待 Retry-After;429 一律不收費。 |
| 503 | - | 語音引擎無法使用、帳號進行中的通話數已達同時通話上限(預設 5 通),或 API 金鑰已達支出上限。訊息會說明是哪一種。 |
GET /v1/sip-trunks/{id}/status 會顯示中繼目前是否可連線,並列出最近幾次電信業者的拒絕;POST /v1/sip-trunks/{id}/test 可隨時探測中繼,GET /v1/sip-trunks/{id}/logs 則回傳 SIP 記錄。
curl https://api.voice.wixzel.com/v1/sip-trunks/$TRUNK_ID/status \
-H "Authorization: Bearer $WIXZEL_API_KEY"來電號碼永遠不響,並不是可以查詢的失敗:如果電信業者沒有設定目的地,通話根本不會離開電信業者,因此也沒有失敗的通話可以檢查。請檢查來電目的地、號碼是否已在電信業者端附加到中繼,以及號碼是否已設定 inbound_agent_id。如果通話有接通但聽不到任何聲音,表示媒體無法通過:路徑中的防火牆必須允許 RTP 連接埠範圍,而不只是信令連接埠。
常見問題
為什麼 Wixzel Voice 需要我自己的 SIP 中繼?
哪些電信業者可以搭配 Wixzel Voice 使用?
中繼需要哪兩項設定?
platform_ip(目前為 187.126.120.231)加入允許清單,讓電信業者接受來自平台的通話。來電部分是將電信業者的來電目的地設為 origination_uri(目前為 sip:187.126.120.231:5090),讓撥到您號碼的通話能抵達平台;若電信業者只接受主機和連接埠,或不會送出 UDP,就需要不同的格式,其指南中會提供。GET /v1/sip-trunks 會在每個中繼上回傳這兩個值:請從那裡讀取,不要從頁面上複製。我可以保留現有的電話號碼嗎?
POST /v1/phone-numbers 將它註冊到該中繼,並設定 inbound_agent_id。Wixzel Voice 不提供號碼移轉,因此號碼會留在您的電信業者那裡。我的電信業者密碼如何儲存?
網頁或行動應用程式需要 SIP 中繼嗎?
POST /v1/realtime/sessions 建立即時工作階段,應用程式再透過 WebSocket 與代理對話,不需要中繼,也不需要號碼。變更中繼需要重新啟動嗎?
電話號碼要向 Wixzel Voice 購買,還是向我的電信業者購買?
POST /v1/phone-numbers/purchase 在該帳號上購買號碼。電信業者會以其價格向您收費。若使用 Exotel 和 Bandwidth,請在電信業者處購買號碼。不論使用哪家電信業者,您都可以用 POST /v1/phone-numbers 在號碼所在的中繼上登錄您已擁有的號碼。為什麼我的號碼從不轉到代理?
origination_uri(目前為 sip:187.126.120.231:5090),號碼必須在電信業者端附加到該中繼,且號碼需要在 Wixzel Voice 中設定 inbound_agent_id。少了第一項,通話根本不會離開電信業者,任何記錄中都不會出現。
