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

Developer cookbook

นำหมายเลขของคุณมาใช้เอง (VoIP, API)

เชื่อมต่อ Twilio, Telnyx, SignalWire, Vonage, Plivo และ SIP trunk อื่นๆ ผ่าน SIP นำเข้าหมายเลขโทรศัพท์ที่คุณมีอยู่แล้ว แล้วให้เอเจนต์ ThunderPhone รับสายและโทรออกด้วยหมายเลขเหล่านั้น

หมายเลข ThunderPhone ที่ได้รับอนุมัติสามารถโทรออกและใช้กับแคมเปญได้ หากต้องการใช้หมายเลขที่คุณเป็นเจ้าของผ่านผู้ให้บริการ VoIP ของคุณเอง คู่มือนี้จะแนะนำขั้นตอนการเชื่อมต่อ: ทดสอบข้อมูลรับรอง → สร้างการเชื่อมต่อ → นำเข้าหมายเลข → ยืนยัน

ผู้ให้บริการที่รองรับ

ผู้ให้บริการรหัส providerหมายเหตุ
TwiliotwilioAccount SID + Auth Token; หนึ่งการเชื่อมต่อต่อบัญชีหรือบัญชีย่อย Twilio (ดู บัญชีย่อย Twilio)
Telnyxtelnyxคีย์ API; มีการเริ่มต้นใช้งานแบบมีคำแนะนำ (setup_method: guided_telnyx)
SignalWiresignalwireไม่มีการเชื่อมต่อผู้ให้บริการแบบเนทีฟ; เชื่อมต่อเป็น manual ด้วยค่าที่ตั้งไว้ล่วงหน้า SignalWire SIP
Vonagevonageไม่มีการเชื่อมต่อผู้ให้บริการแบบเนทีฟ; เชื่อมต่อเป็น manual ด้วยค่าที่ตั้งไว้ล่วงหน้า Vonage SIP
SIP ด้วยตนเองmanualSIP trunk ใดก็ได้ รวมถึง 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 จะแสดงขั้นตอนที่ล้มเหลว แก้ไขการกำหนดค่าฝั่งผู้ให้บริการ (การกำหนด trunk รายการอนุญาต 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..."
  }'

การตอบกลับคืออ็อบเจ็กต์ VoipConnection ที่มี status="connected" ข้อมูลรับรองจะจัดเก็บฝั่งเซิร์ฟเวอร์และจะไม่ ส่งกลับเป็นข้อความธรรมดาในการเรียก GET ครั้งถัดไป — หากต้องการหมุนเวียนข้อมูลรับรอง ให้เรียก test ใหม่และทำ PATCH พร้อมหลักฐานใหม่

บัญชีย่อย Twilio

การเชื่อมต่อ Twilio จะผูกกับบัญชี Twilio เพียงบัญชีเดียวที่มี Account SID และ Auth Token นั้นอยู่ Twilio จะเก็บหมายเลขโทรศัพท์และ SIP trunk ไว้ภายในแต่ละบัญชีย่อย ดังนั้นการเชื่อมต่อที่สร้างด้วยบัญชีหลัก จะเห็นได้เฉพาะหมายเลขของบัญชีหลักเท่านั้น และไม่สามารถเปลี่ยนการเชื่อมต่อที่มีอยู่ไปยังบัญชีย่อยอื่นในภายหลังได้

หากต้องการเข้าถึงหมายเลขที่อยู่ในบัญชีย่อย ให้สร้างการเชื่อมต่อหนึ่งรายการต่อ บัญชีย่อย แดชบอร์ดจะดำเนินการให้คุณ: เมื่อเชื่อมต่อบัญชีหลักที่มี บัญชีย่อยที่ใช้งานอยู่ กล่องโต้ตอบการตั้งค่าจะแสดงรายการบัญชีย่อย คุณเลือก รายการที่ต้องการ แล้ว 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 trunk ของการเชื่อมต่อใหม่แต่ละรายการด้วย หากเกิดความล้มเหลวในส่วนนั้น ระบบจะรายงานใน 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 trunk ของคุณ กลับมายังหมายเลขเดิม หากยังยืนยันเส้นทางขาเข้าไม่ได้ ระบบจะเปลี่ยนไปใช้การโทรทดสอบสั้น ๆ จาก หมายเลขนั้น ผ่าน SIP trunk ของคุณ ไปยัง หมายเลขของ ThunderPhone การทดสอบเหล่านี้ตรวจสอบชื่อผู้ใช้ รหัสผ่าน การขนส่ง การกำหนดเส้นทางขาออก และการส่งต่อขาเข้าของ trunk ผู้ให้บริการเครือข่ายจะคิดค่าบริการสำหรับการโทรเหล่านี้เช่นเดียวกับการโทรอื่น ๆ

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 แบบกำหนดเองที่อยู่ในรายการอนุญาต การทดสอบสายขาเข้าจะล้มเหลวเช่นกัน หาก Allowed Source IPs เหล่านั้นจะบล็อกสายขาเข้าจริง

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"
  }'

การเชื่อมต่อจะยังคงอยู่ ไม่จำเป็นต้องนำเข้าหมายเลขอีกครั้ง


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