ThunderPhone 2.0 เปิดให้ใช้งานแล้วเริ่มใช้งานได้ด้วยตัวเอง ราคาเริ่มต้น 2 เซนต์ต่อนาที.อ่านประกาศเปิดตัว

Developer cookbook

โทรออก (API)

เรียกใช้การโทรออกที่ขับเคลื่อนด้วย AI จากโค้ดของคุณเอง — สำหรับขั้นตอนการสำรวจ การติดตามผล หรือการยืนยัน

การโทรออกช่วยให้คุณส่งหมายเลขปลายทางและการกำหนดค่าเอเจนต์ให้ ThunderPhone เพื่อให้ AI โทรออกแทนคุณ กรณีการใช้งานทั่วไป:

  • การยืนยันนัดหมาย
  • การโทรกลับเพื่อทำแบบสำรวจ
  • การติดตามผลแบบ "ลองอีกครั้ง" หลังรับสายไม่ทัน
  • การแจ้งเตือนลักษณะงานจัดส่ง

ข้อกำหนดเบื้องต้น

  1. เลือกหมายเลขที่เปิดใช้งานการโทรออก

    ใช้หมายเลขที่คุณเป็นเจ้าของผ่าน การเชื่อมต่อ VoIP หรือขออนุญาต ใช้หมายเลข ThunderPhone ของคุณสำหรับการโทรออกจากหน้า Phone Numbers หมายเลข ThunderPhone เริ่มต้นเป็นแบบรับสายเข้าเท่านั้น ThunderPhone ตรวจสอบ คำขอแต่ละรายการด้วยตนเอง เมื่อได้รับอนุมัติแล้ว หมายเลขเหล่านั้นสามารถโทรออกได้สูงสุดตาม ขีดจำกัดรายวันที่อนุมัติ (รีเซ็ตเวลา 00:00 UTC) และเรียกใช้แคมเปญได้ รวมถึงคุณ สามารถขอเพิ่มขีดจำกัดได้ หมายเลข VoIP ของลูกค้าไม่มีขีดจำกัดรายวัน ดังนั้นจึงแนะนำ ให้ใช้สำหรับการโทรออก ดู นำหมายเลขของคุณมาใช้เอง

  2. สร้างเอเจนต์

    พรอมต์สำหรับการโทรออกมักเริ่มต้นด้วยการที่เอเจนต์ แนะนำตัวเองและวัตถุประสงค์ — "สวัสดี นี่คือ Acme โทรมาเพื่อ ยืนยันนัดหมายของคุณสำหรับวันพรุ่งนี้เวลา 15:00 น.…" ตั้งค่า outbound_speak_order เป็น agent_first (ค่าเริ่มต้น)

  3. รักษายอดคงเหลือให้เป็นบวก

    การโทรออกจะส่งคืน 402 Payment Required หากยอดคงเหลือ ≤ $0.00 เติมเงินหรือเปิดใช้การเติมเงินอัตโนมัติใน Organization → Billing Settings บนแดชบอร์ด คีย์ sk_live_ ของคุณสามารถตรวจสอบยอดคงเหลือด้วย GET /v1/billing แต่ ไม่สามารถเติมเงินหรือเปลี่ยนการเติมเงินอัตโนมัติได้

โทรออกด้วยเอเจนต์ที่บันทึกไว้

วิธีที่ง่ายที่สุด — อ้างอิงเอเจนต์ด้วย 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":   "+14155552671",
    "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":   "+14155552671",
    "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_reason, duration_seconds และ URL ของไฟล์บันทึกเสียงเมื่อการโทรสิ้นสุดลง

หากตั้งค่าเอเจนต์ให้ดึงข้อมูลที่มีโครงสร้างหลังการโทร ข้อมูลนั้นจะถูกส่งแยกต่างหากหลังจากการประมวลผลขั้นสุดท้ายเสร็จสิ้น

ส่งตัวแปรรายสายไปยังเอเจนต์ที่บันทึกไว้

เอเจนต์ที่บันทึกไว้สามารถใช้ตัวแทนค่า เช่น {{name}} หรือ {{name|there}} ใน ข้อความพรอมป์ต์ได้ เมื่อโทรออกด้วย agent_id ให้ส่ง variables พร้อมค่าของสายโทรนั้น:

{
  "from_number": "+[REDACTED_PHONE]",
  "to_number": "+[REDACTED_PHONE]",
  "agent_id": 12,
  "variables": {
    "name": "Jordan"
  }
}

ใช้ค่าสตริงที่มีชื่อตามตัวแทนค่า ตัวแปรเหล่านี้ใช้กับ เอเจนต์ที่บันทึกไว้ ตัวอย่าง config แบบอินไลน์ในคู่มือนี้ไม่ได้ใช้ตัวแปรเหล่านี้

รูปแบบความล้มเหลวที่ควรจัดการ

ข้อผิดพลาดวิธีแก้ไข
402 Payment Requiredเติมยอดคงเหลือหรือเปิดใช้การเติมเงินอัตโนมัติ
400 พร้อม code: destination_not_allowedThunderPhone จะไม่โทรไปยังหมายเลขนั้น ได้แก่ หมายเลขไม่ถูกต้อง หมายเลขฉุกเฉิน หมายเลขอัตราค่าบริการพิเศษ รหัสสั้น หรือประเทศที่ถูกคว่ำบาตร จากหมายเลข ThunderPhone โทรได้เฉพาะหมายเลขทั่วไปในสหรัฐอเมริกาและแคนาดาเท่านั้น (ไม่รวมหมายเลขอัตราค่าบริการพิเศษ) reason ระบุว่าเป็นกรณีใด ดู ปลายทางที่ถูกบล็อก
409 พร้อม retryable: false สำหรับหมายเลข ThunderPhoneดำเนินการตาม code: ขอเปิดใช้การโทรออกในหน้าหมายเลขโทรศัพท์ รอผลการตรวจสอบที่รอดำเนินการ หรือใช้หมายเลขอื่นที่มีสิทธิ์
429 พร้อม code: platform_outbound_daily_limit_reachedองค์กรใช้โควต้าการโทรออกของวันนี้จากหมายเลข ThunderPhone แล้ว รอ resets_at (00:00 UTC) ขอเพิ่มขีดจำกัดในหน้าหมายเลขโทรศัพท์ หรือโทรจากหมายเลขบนการเชื่อมต่อ VoIP ของคุณเอง
429 พร้อม code: concurrent_call_limit_reachedองค์กรมีสายที่กำลังดำเนินการอยู่เท่ากับขีดจำกัดสายพร้อมกัน (ค่าเริ่มต้น 20 สาย นับรวมสายเข้า สายออก สายเว็บ และสายทดสอบ) ลองใหม่หลังจากจำนวนวินาทีที่ระบุในส่วนหัว Retry-After หรือเมื่อสายสิ้นสุดลง ส่งอีเมลไปที่ support@thunderphone.com เพื่อเพิ่มขีดจำกัด
429 พร้อม code: same_number_too_soonคุณโทรไปยัง to_number เดิมเมื่อไม่ถึง 10 วินาทีที่ผ่านมา ลองใหม่หลังจากจำนวนวินาทีที่ระบุในส่วนหัว Retry-After
409 พร้อม retryable: false สำหรับหมายเลข VoIP ของลูกค้าแก้ไขสถานะที่ระบุโดย code สำหรับการยืนยันที่ล้มเหลว ให้เรียกใช้ POST /v1/phone-numbers/{id}/verify-voip
ความขัดแย้งของคีย์ idempotency 409ใช้คีย์เดิมซ้ำเฉพาะกับคำขอที่ปรับรูปแบบมาตรฐานเดิม หรือส่งคีย์ใหม่
404 from_number is not registered to this organizationยืนยันว่า from_number ตรงกับหมายเลขโทรศัพท์ที่ใช้งานอยู่ในองค์กรของคุณ หมายเลขที่กำลังจัดเตรียม ล้มเหลว กำลังยกเลิก หรือถูกยกเลิกแล้ว ก็จะส่งการตอบกลับนี้เช่นกัน
500 ที่มีเฉพาะฟิลด์ detailไม่มีการกำหนดค่าทรังก์ขาออก ติดต่อฝ่ายสนับสนุน นี่ไม่ใช่ปัญหาสถานะหมายเลขที่คุณแก้ไขได้
502 Bad Gatewayความล้มเหลวชั่วคราวของ SIP / LiveKit สามารถลองใหม่ได้อย่างปลอดภัย

ดูข้อมูลอ้างอิงการโทรออก สำหรับรายการรหัสคุณสมบัติที่เสถียรฉบับสมบูรณ์และรูปแบบการตอบกลับ 409 ทั้งสองแบบ หากหมายเลขที่ใช้งานอยู่ไม่มีสิทธิ์หลังจากรับคำขอแล้วแต่ก่อน เริ่มโทร การตรวจสอบขั้นสุดท้ายจะส่งเพย์โหลด 409 ที่ลองใหม่ไม่ได้

ควบคุมเวลารอสาย

การโทรออกที่ใช้เวลานานเนื่องจากผู้รับสายตอบสนองช้า เช่น ผัง IVR หรือคิว สามารถจำกัดได้ด้วย max_hold_seconds:

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

เอเจนต์จะวางสายหากไม่ได้รับเสียงมนุษย์ภายใน N วินาทีที่ผ่านมา ค่าเริ่มต้นคือ 900 วินาที (15 นาที)


ขั้นตอนถัดไป