ThunderPhone 2.0 באוויר.בשירות עצמי, החל מ-2¢/דקה.קראו את הודעת ההשקה

Developer cookbook

הביאו מספרים משלכם (VoIP, API)

חברו את Twilio, Telnyx, SignalWire, Vonage, Plivo וכל trunk SIP אחר דרך SIP, ייבאו את מספרי הטלפון שכבר בבעלותכם, ואפשרו לסוכני ThunderPhone לענות לשיחות ולבצע שיחות באמצעותם.

מספרי ThunderPhone מאושרים יכולים לבצע שיחות יוצאות ולהריץ קמפיינים. אם אתם מעדיפים להשתמש במספרים שבבעלותכם דרך ספק ה-VoIP שלכם, מדריך זה מלווה אתכם בתהליך החיבור: בדיקת אישורי גישה → יצירת חיבור → ייבוא מספרים → אימות.

ספקים נתמכים

ספקמזהה providerהערות
Twiliotwilioמזהה חשבון SID + אסימון אימות; חיבור אחד לכל חשבון או תת-חשבון של Twilio (ראו תת-חשבונות Twilio)
Telnyxtelnyxמפתח API; תהליך הצטרפות מודרך זמין (setup_method: guided_telnyx)
SignalWiresignalwireאין חיבור ספק מקורי; חברו אותו כ-manual באמצעות הגדרת SIP המוגדרת מראש של SignalWire
Vonagevonageאין חיבור ספק מקורי; חברו אותו כ-manual באמצעות הגדרת SIP המוגדרת מראש של Vonage
SIP ידניmanualכל trunk של 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 יציג את השלב שנכשל. תקנו את התצורה בצד הספק (הקצאת 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 בתוך כל חשבון משנה, לכן חיבור שנוצר באמצעות חשבון האב רואה רק את המספרים של חשבון האב עצמו, ולא ניתן להעביר חיבור קיים לחשבון משנה אחר בהמשך.

כדי לגשת למספרים שנמצאים בחשבונות משנה, צרו חיבור אחד לכל חשבון משנה. לוח הבקרה עושה זאת עבורכם: כאשר אתם מחברים חשבון אב שיש לו חשבונות משנה פעילים, תיבת הדו-שיח של ההגדרה מציגה אותם, אתם מסמנים את אלה הרצויים, ו-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, והתגובה מסבירה מדוע. במקרה של כישלון, התגובה מפרטת מה נכשל — עבור trunk ידני, זו תשובת ה-SIP של הספק, למשל "נדחו פרטי הכניסה של ThunderPhone ‏(SIP 401)" או "לא ניתן היה לנתב שיחה ‏(SIP 404)" — תקנו זאת (פרטי כניסה, כתובות IP מקור מורשות, שיוך trunk חסר בלוח הבקרה של הספק) והתקשרו שוב.

עבור חיבור 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"
  }'

החיבור נשאר במקומו — אין צורך לייבא מחדש מספרים.


השלבים הבאים