ThunderPhone 2.0 正式上線。全程自助,每分鐘 2 美分起查看公告

Developer cookbook

撥打外撥電話(API)

從你自己的程式碼觸發由人工智慧驅動的外撥電話——適用於問卷調查、後續追蹤或確認流程。

對外撥號可讓你將目標號碼和智慧體設定交給 ThunderPhone,由人工智慧代表你撥打電話。常見使用情境:

  • 預約確認
  • 問卷回撥
  • 未接來電後的「第二次」追蹤
  • 調度式通知

先決條件

  1. 準備 VoIP 號碼

    對外撥號要求你透過 VoIP 連線擁有 from_number。 示範號碼僅限撥入。請參閱 自備號碼

  2. 建立智慧體

    偏向對外撥號的提示詞通常會先讓智慧體說明自己的身分與目的——「嗨,這裡是 Acme,來電是為了確認你明天下午 3 點的預約……」。將 outbound_speak_order 設為 agent_first(預設值)。

  3. 維持正餘額

    餘額 ≤ $0.00 時,對外撥號會回傳 402 Payment Required。透過 POST /v1/billing/top-up 儲值,或啟用自動儲值

使用已儲存的智慧體撥打電話

最簡單的方式——透過 ID 參照智慧體:

curl -X POST https://api.thunderphone.com/v1/call \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from_number": "+15551234567",
    "to_number":   "+14155550199",
    "agent_id":    12
  }'

回應:

{ "call_id": 987654321, "status": "initiated" }

使用內嵌設定撥打電話

如果你需要一次性提示詞,不值得將它儲存為智慧體, 請改為傳入 config。其結構與 call.incoming webhook的回應結構描述相同:

curl -X POST https://api.thunderphone.com/v1/call \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from_number": "+15551234567",
    "to_number":   "+14155550199",
    "config": {
      "prompt":  "You are confirming Jane Doe appointment for 3pm tomorrow…",
      "voice":   "john",
      "product": "spark"
    }
  }'

追蹤通話

同時訂閱 telephony.complete webhook—— 這是得知通話已結束最快的方式。如果你無法接收撥入 webhook, 請每隔幾秒輪詢 GET /v1/calls/{call_id};通話結束後,紀錄會包含 end_reasonduration_seconds 和錄音 URL。

值得處理的失敗情境

錯誤處理方式
402 Payment Required儲值餘額或啟用自動儲值
403 對外撥號遭封鎖(示範號碼)改用 VoIP 號碼
403 對外撥號遭封鎖(未驗證的 VoIP)執行 POST /v1/phone-numbers/{id}/verify-voip
404 from_number is not registered to this organization確認 from_number 與你擁有的電話號碼相符
502 Bad Gateway暫時性的 SIP/LiveKit 故障;可安全重試

控制保留時間

若因被叫方回應緩慢(IVR 樹、佇列)而導致撥出通話時間過長,可使用 max_hold_seconds 設定上限:

{
  "from_number": "+15551234567",
  "to_number":   "+14155550199",
  "agent_id":    12,
  "max_hold_seconds": 120
}

若過去 N 秒內未收到任何真人語音,智慧體會掛斷通話。預設值為 900(15 分鐘)。


後續步驟