跳到主要內容
自帶 SIP 中繼

自帶 SIP 中繼:在您已在使用的電信業者上執行 AI 語音代理

在您已擁有的 SIP 中繼上執行 AI 語音代理。號碼和電信費率仍歸您所有,不加價。

最後更新於

發布於 。電信業者名稱是其各自所有者的商標;Wixzel Voice 透過標準 SIP 與它們整合,與任何一家均無關聯,也未獲得其背書。

電信業者指南

為什麼要自帶 SIP 中繼?

號碼仍歸您所有
Wixzel Voice 從不販售號碼,也不提供號碼移轉。要離開,只需在電信業者那裡改一項設定。
費率維持不變
您的電信業者向您收取線路費用。Wixzel Voice 只按秒收取語音引擎的費用。
合規設定不必變動
來電顯示、KYC 和各項登記,都留在您已信任的電信業者那裡。
任何 SIP 供應商
有八家電信業者提供了指南。任何有 SIP 中繼的業者都能使用。

自帶的 SIP 中繼如何連接?

Wixzel Voice 的中繼分為兩個部分,分別位於電信業者主控台的不同地方。每個中繼都會回傳這兩個位址,因此請從 API 讀取,不要依賴頁面上的內容保持最新。

外撥:來自平台的通話
platform_ip

將 187.126.120.231 加入電信業者的 IP 允許清單。幾乎所有電信業者都依來源 IP 授權外撥通話,即使中繼的其他設定都正確,少了這一項仍會失敗。

來電:撥到您號碼的通話
origination_uri

將電信業者的來電目的地設為 sip:187.126.120.231:5090。漏了這一項,號碼就永遠不會響:電信業者沒有地方可以送出通話,因此任何記錄中都不會出現。

從 API 讀取這兩個值
curl https://api.voice.wixzel.com/v1/sip-trunks \
  -H "Authorization: Bearer $WIXZEL_API_KEY" \
  | jq '.data[0] | {platform_ip, origination_uri}'

哪些電信業者有設定指南?

以下每家電信業者都有自己的頁面,說明要購買什麼、要將什麼加入允許清單、來電要送往何處、適用的中繼請求,以及該業者特有的注意事項,並附上文件中完整主控台步驟的連結。每家電信業者對這兩項設定的稱呼不同,但設定本身是一樣的。

電信業者產品允許清單的名稱來電目的地的名稱傳輸方式
TwilioElastic SIP TrunkingIP Access Control ListOrigination SIP URIudp
TelnyxSIP Connectionsauthorised addresses on an IP-authenticated SIP Connection指南中尚未列出udp
PlivoZentrunkIP Access Control ListPrimary URIudp
VonageProgrammable SIPACL (Access Control List)指南中尚未列出udp
Bandwidth-Voice IP addresses / DNS hosts on a locationOriginationudp
ExotelVirtual SIP Trunking (vSIP)ACL mapped to the trunkDestination URItcp
Vobiz-IP ACL指南中尚未列出udp
MobilySIP Trunktrusted peers on the SBC that holds your Mobily linkSBC route for inbound Mobily callsudp
任何 SIP 供應商-IP ACL、允許清單或授權位址Origination URI,或電信業者對它的稱呼udp

電信業者如何稱呼這兩項設定?

作用電信業者使用的名稱
授權來自 Wixzel Voice 的通話IP ACL, IP Access Control List, Access Control List, allowlist, authorised address, network bridge
將通話送到 Wixzel VoiceOrigination 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電信業者回報意思處理方式
1404電信業者無法辨識此號碼。檢查號碼格式。如果電信業者需要技術撥號前綴,請在中繼上設定 dial_prefix。
3-電信業者沒有通往此目的地的路由。您的電信業者帳號可能未開通此目的地。請要求電信業者開通該路由。
16-正常掛斷:對方刻意結束了通話。若通話從未被接聽,應解讀為上游某處選擇結束通話,而不是已完成的通話。
17486號碼忙線中。-
18480目的地沒有回應。手機可能已關機或無法接通。
19-有響鈴但無人接聽。不需要修正:中繼和號碼都正常運作。
20-用戶不在服務範圍內或無法接通。-
21403 / 407電信業者在嘗試撥打號碼之前就直接拒絕了通話。依可能性排序:電信業者帳號已停權、已關閉或餘額不足;中繼的使用者名稱或密碼錯誤;platform_ip 未加入允許清單;或來電顯示號碼未在帳號上授權。請先檢查電信業者的 Dashboard。
22-號碼已變更,不再使用中。-
27-目的地故障。-
28484電信業者拒絕了此號碼格式。如果電信業者需要技術撥號前綴,請在中繼上設定 dial_prefix。
34-電信業者沒有可用的線路(壅塞)。請稍後重試。
38500 / 501 / 502電信業者回傳了伺服器錯誤。-
41503電信業者可以連線,但拒絕通話。通常是容量、餘額,或電信業者端的路由中斷。
42-電信業者的交換機壅塞。請稍後重試。
58488編解碼器不符:電信業者拒絕了所提供的音訊編解碼器。在電信業者端提供 G.711(PCMU 或 PCMA)。不支援 G.729。
88493電信業者以不相容為由拒絕了通話。-
102408電信業者未及時回應。確認中繼的 host 和 port,以及電信業者是否接受來自 platform_ip 的 SIP。如果電信業者顯示通話已收到但從未接聽,請將 send_plus 設為 false。

這些會在撥號前就被 POST /v1/calls 拒絕,不會產生費用:

HTTP 狀態code意思
400no_outbound_number沒有來電顯示號碼:請傳入 from_number_id,或在代理上設定 outbound_phone_number_id。
400number_not_on_trunk撥出號碼沒有 sip_trunk_id,因此無處可送出通話。
400missing_idempotency_key原始 HTTP 請求沒有 Idempotency-Key。SDK 會自動為您傳送。
402insufficient_credits餘額不足以支付最初 15 秒的費用。請儲值後重試。
429rate_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
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 從不販售電話號碼、不提供號碼移轉,也從不轉售電信服務。電話通話透過您選擇的電信業者所提供的中繼進行,因此號碼仍歸您所有,電信業者直接以您的費率向您計費、不加價,而 Wixzel Voice 也沒有理由在意您選擇哪家電信業者。代價是在第一通電話之前多一個設定步驟。如果您需要號碼,可以從主控台連接 Twilio、Telnyx、Plivo、Vobiz 或 Vonage 帳號,不必離開 Wixzel Voice 就能在該帳號上購買。電信業者會以其價格計費。

哪些電信業者可以搭配 Wixzel Voice 使用?

任何提供 SIP 中繼、支援 IP 允許清單(或使用者名稱和密碼驗證),並可設定來電目的地的電信業者。Twilio, Telnyx, Plivo, Vonage, Bandwidth, Exotel, Vobiz, Mobily 都有設定指南,另外也有一份適用於其他任何 SIP 供應商的通用指南。

中繼需要哪兩項設定?

外撥部分是在電信業者那裡將 platform_ip(目前為 187.126.120.231)加入允許清單,讓電信業者接受來自平台的通話。來電部分是將電信業者的來電目的地設為 origination_uri(目前為 sip:187.126.120.231:5090),讓撥到您號碼的通話能抵達平台;若電信業者只接受主機和連接埠,或不會送出 UDP,就需要不同的格式,其指南中會提供。GET /v1/sip-trunks 會在每個中繼上回傳這兩個值:請從那裡讀取,不要從頁面上複製。

我可以保留現有的電話號碼嗎?

可以,只要它位於您可以路由的 SIP 中繼上。用 POST /v1/phone-numbers 將它註冊到該中繼,並設定 inbound_agent_id。Wixzel Voice 不提供號碼移轉,因此號碼會留在您的電信業者那裡。

我的電信業者密碼如何儲存?

新的或更新後的密碼會以 AES-256-GCM 加密儲存,金鑰只由部署環境持有;以舊方式儲存的密碼,會在下次儲存時改用這種方式重新加密。API 之後不會再回傳密碼,即使是對您也一樣。請將它存放在您保管其他電信業者憑證的地方。

網頁或行動應用程式需要 SIP 中繼嗎?

不需要。中繼只用於電話通話。若要將代理放進網頁或應用程式,您的伺服器以 POST /v1/realtime/sessions 建立即時工作階段,應用程式再透過 WebSocket 與代理對話,不需要中繼,也不需要號碼。

變更中繼需要重新啟動嗎?

不需要。建立、更新或刪除中繼時,會重寫電話通訊設定並重新載入,因此變更會立即生效。

電話號碼要向 Wixzel Voice 購買,還是向我的電信業者購買?

向您的電信業者購買。Wixzel Voice 從不販售或攜碼電話號碼,也從不加價電信業者的通話分鐘數。如果您從主控台連接 Twilio、Telnyx、Plivo、Vobiz 或 Vonage 帳號,就能在主控台的「電話號碼」頁面或用 POST /v1/phone-numbers/purchase 在該帳號上購買號碼。電信業者會以其價格向您收費。若使用 Exotel 和 Bandwidth,請在電信業者處購買號碼。不論使用哪家電信業者,您都可以用 POST /v1/phone-numbers 在號碼所在的中繼上登錄您已擁有的號碼。

為什麼我的號碼從不轉到代理?

來電和外撥是分開設定的。您的電信業者必須將通話送到中繼回傳的 origination_uri(目前為 sip:187.126.120.231:5090),號碼必須在電信業者端附加到該中繼,且號碼需要在 Wixzel Voice 中設定 inbound_agent_id。少了第一項,通話根本不會離開電信業者,任何記錄中都不會出現。

透過我自己的 SIP 中繼撥打 AI 通話要多少錢?

兩份帳單。您的電信業者會以其自己的每分鐘費率直接向您收取線路費用。Wixzel Voice 依實際用量按秒收取語音引擎費用:每接通分鐘從 gemini-live 的 $0.0491 到 deepgram-agent 的 $0.1851,預付制,最低儲值 $5,沒有訂閱,也沒有免費方案。未接通的通話在 Wixzel Voice 這端不收任何費用。

建立您的第一個語音代理