Open in
นำหมายเลขของคุณมาใช้เอง (VoIP, API)
เชื่อมต่อ Twilio, Telnyx, SignalWire, Vonage, Plivo และ SIP trunk อื่นๆ ผ่าน SIP นำเข้าหมายเลขโทรศัพท์ที่คุณมีอยู่แล้ว แล้วให้เอเจนต์ ThunderPhone รับสายและโทรออกด้วยหมายเลขเหล่านั้น
หมายเลข ThunderPhone ที่ได้รับอนุมัติสามารถโทรออกและใช้กับแคมเปญได้ หากต้องการใช้หมายเลขที่คุณเป็นเจ้าของผ่านผู้ให้บริการ VoIP ของคุณเอง คู่มือนี้จะแนะนำขั้นตอนการเชื่อมต่อ: ทดสอบข้อมูลรับรอง → สร้างการเชื่อมต่อ → นำเข้าหมายเลข → ยืนยัน
ผู้ให้บริการที่รองรับ
| ผู้ให้บริการ | รหัส provider | หมายเหตุ |
|---|---|---|
| Twilio | twilio | Account SID + Auth Token; หนึ่งการเชื่อมต่อต่อบัญชีหรือบัญชีย่อย Twilio (ดู บัญชีย่อย Twilio) |
| Telnyx | telnyx | คีย์ API; มีการเริ่มต้นใช้งานแบบมีคำแนะนำ (setup_method: guided_telnyx) |
| SignalWire | signalwire | ไม่มีการเชื่อมต่อผู้ให้บริการแบบเนทีฟ; เชื่อมต่อเป็น manual ด้วยค่าที่ตั้งไว้ล่วงหน้า SignalWire SIP |
| Vonage | vonage | ไม่มีการเชื่อมต่อผู้ให้บริการแบบเนทีฟ; เชื่อมต่อเป็น manual ด้วยค่าที่ตั้งไว้ล่วงหน้า Vonage SIP |
| SIP ด้วยตนเอง | manual | SIP 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" }
}'{
"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": "..."}}'{
"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"
}'การเชื่อมต่อจะยังคงอยู่ ไม่จำเป็นต้องนำเข้าหมายเลขอีกครั้ง