ThunderPhone 2.0 正式上線。自助開通,每分鐘 2¢ 起。查看公告

Developer cookbook

使用自己的號碼(VoIP、API)

透過 SIP 連接 Twilio、Telnyx、SignalWire、Vonage、Plivo 與任何其他 SIP 中繼,匯入你已擁有的電話號碼,讓 ThunderPhone 語音智慧體透過這些號碼接聽與撥打電話。

已核准的 ThunderPhone 號碼可撥打外撥電話及執行行銷活動。若你偏好透過自己的 VoIP 供應商使用自有號碼,本指南會帶你完成連線流程:測試憑證 → 建立連線 → 匯入號碼 → 驗證。

支援的供應商

供應商provider ID備註
Twiliotwilio帳戶 SID + 驗證權杖;每個 Twilio 帳戶或子帳戶各一個連線(請參閱 Twilio 子帳戶)
TelnyxtelnyxAPI 金鑰;提供引導式上線流程(setup_method: guided_telnyx)
SignalWiresignalwire無原生供應商連線;請使用 SignalWire SIP 預設集,以 manual 方式連線
Vonagevonage無原生供應商連線;請使用 Vonage SIP 預設集,以 manual 方式連線
手動 SIPmanual任何 SIP 中繼,包括 SignalWire、Vonage 和 Plivo。若你從控制台中的其中一個供應商方塊開始,連線仍為 manual,並會將選項儲存在 sip_config.preset(signalwire、vonage 或 plivo)中

1. 測試憑證

建立持久化的 VoIP 連線前,先測試供應商憑證以確認其可正常運作。此操作會傳回 verification_evidence_id,你可在建立步驟中傳入該值,避免測試憑證時重複扣費。

curl -X POST https://api.thunderphone.com/v1/voip-connections/test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "provider":    "telnyx",
    "credentials": { "apiKey": "KEY...", "connectionId": "123456" },
    "sip_config":  { "domain": "acme.sip.telnyx.com" }
  }'
Response
{
  "status": "pass",
  "verification_evidence_id": "b9a2...",
  "suggested_connection_name": "Telnyx: Acme Main (+15550001234)",
  "checks": {
    "credentials_valid": true,
    "inbound_reachable": true,
    "outbound_authorized": true
  }
}

若任何檢查失敗,回應的 status 會是 fail,而 checks 會顯示失敗的步驟。請修正供應商端設定(中繼線路指派、IP 允許清單、外撥授權)後再試一次。

2. 建立連線

傳入你剛取得的 verification_evidence_id:

curl -X POST https://api.thunderphone.com/v1/voip-connections \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name":         "Acme Telnyx Main",
    "provider":     "telnyx",
    "setup_method": "api_key",
    "credentials":  { "apiKey": "KEY...", "connectionId": "123456" },
    "sip_config":   { "domain": "acme.sip.telnyx.com" },
    "verification_evidence_id": "b9a2..."
  }'

回應會傳回處於 status="connected" 的 VoipConnection 物件。憑證及其他機密連線值會儲存在伺服器端,後續 GET 請求絕不會以純文字傳回——如要輪替,請重新執行 test,並使用新的驗證證據進行 PATCH。

Twilio 子帳戶

Twilio 連線會繫結至其持有 Account SID 和 Auth Token 的單一 Twilio 帳戶。Twilio 會將電話號碼和 SIP 中繼保留在各個子帳戶內,因此使用父帳戶建立的連線只能看見父帳戶自己的號碼,而且既有連線之後無法切換至其他子帳戶。

如要存取子帳戶所持有的號碼,請為每個子帳戶建立一條連線。控制台會為你處理此作業:當你連接擁有啟用中子帳戶的父帳戶時,設定對話方塊會列出這些子帳戶,你可勾選所需的項目,ThunderPhone 就會在每個子帳戶中建立連線(以及 SIP 中繼)。同樣的流程也可透過 API 使用:

# Discover active subaccounts visible to the parent credentials
curl -X POST https://api.thunderphone.com/v1/voip-connections/twilio/subaccounts \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"credentials": {"accountSid": "ACparent...", "authToken": "..."}}'
Response
{
  "discovery_id": "7c1e...",
  "parent": { "sid": "ACparent...", "friendly_name": "Acme" },
  "subaccounts": [
    { "sid": "ACsupport...", "friendly_name": "Acme Support", "already_connected": false, "connection_id": null },
    { "sid": "ACsales...",   "friendly_name": "Acme Sales",   "already_connected": true,  "connection_id": 5 }
  ]
}
# Create a connection for each selected subaccount
curl -X POST https://api.thunderphone.com/v1/voip-connections/twilio/subaccounts/connect \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"discovery_id": "7c1e...", "subaccount_sids": ["ACsupport..."]}'

回應會為每個子帳戶提供一列,其中 status 為 created、skipped(已連線)或 failed,並附帶你可據以處理的 error。各列彼此獨立,因此某個子帳戶失敗不會阻擋其他子帳戶;discovery_id 會在 30 分鐘內保持有效,因此只要重新嘗試失敗的列即可。系統會在探索時從 Twilio 讀取子帳戶權杖,並儲存在新的連線中;這些權杖絕不會透過 API 傳回。之後,每個新連線都會如同你手動建立的連線一樣匯入並驗證號碼。 將 "enable_transfers": true 加入設定,也可為每個新連線的 SIP 中繼啟用通話轉接;若該操作失敗,會在該連線的 test_result.transfer_enable_error 中回報,但不會使該列失敗。

3. 列出並匯入號碼

查看你的憑證可見、且尚未位於 ThunderPhone 組織中的號碼:

curl https://api.thunderphone.com/v1/voip-connections/5/available-numbers \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

接著匯入你需要的號碼:

curl -X POST https://api.thunderphone.com/v1/voip-connections/5/import-numbers \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"numbers": ["+15550001234", "+15550009999"]}'

每次匯入都會在你的組織中建立一個電話號碼資源, 其 number_type="voip" 和 status="provisioning"。

4. 驗證每個匯入的號碼

匯入會將號碼登記為可用;若要實際透過該號碼路由通話,則需要驗證。對於供應商連線(Twilio、 Telnyx),系統會重新檢查供應商憑證與 SIP 可連線性。對於 手動 SIP 連線,系統會先嘗試迴路自我通話: ThunderPhone 會從該號碼發起一通簡短的測試通話,透過你的 SIP 中繼,回撥至同一個號碼。若無法藉此驗證撥入路徑,系統會改以一通簡短的測試通話,從該號碼發起,透過你的 SIP 中繼,撥至 ThunderPhone 號碼。這些測試會檢查中繼的使用者名稱、 密碼、傳輸方式、撥出路由與撥入遞送。你的電信業者會將這些通話依一般通話方式計費。

curl -X POST https://api.thunderphone.com/v1/phone-numbers/{id}/verify-voip \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

成功時,voip_verification_status 會變更為 verified,而該號碼會進入 status="active"。你自己的 Telnyx 帳戶中的號碼,若測試通話失敗或尚未設定外撥,仍會持續接聽來電:它會成為 status="active",並將 voip_verification_status 設為 unverified,回應中會說明原因。失敗時,回應會明確指出 失敗原因——對於手動中繼,這會是電信業者的 SIP 回應,例如 「拒絕 ThunderPhone 的認證資訊(SIP 401)」 或 「無法路由通話(SIP 404)」——修正問題(認證資訊、允許的來源 IP 位址,或服務供應商控制台中遺漏的中繼指派),然後再次呼叫。

對於已加入允許清單的手動 SIP 連線,若這些允許的來源 IP 位址會阻擋實際的撥入通話,撥入通話測試也會失敗。

5. 指派智慧體並接聽通話

驗證號碼後,你可以比照 ThunderPhone 號碼的方式指派呼入/外撥智慧體。請參閱 處理呼入通話和 撥打外撥電話。

輪替憑證

當供應商金鑰輪替時,請重新執行先測試後更新的流程:

# 1. Test the new credentials
curl -X POST https://api.thunderphone.com/v1/voip-connections/test ...
 
# 2. PATCH the connection with the new evidence
curl -X PATCH https://api.thunderphone.com/v1/voip-connections/{id} \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "credentials": { "apiKey": "NEW_KEY..." },
    "verification_evidence_id": "fresh-evidence-id"
  }'

連線會維持不變——無須重新匯入號碼。


後續步驟