ThunderPhone 2.0 је стигао.Почните самостално, већ од 2 ¢/мин.Прочитајте објаву

Developer cookbook

Користите сопствене бројеве (VoIP, API)

Повежите Twilio или Telnyx — или било који SIP транк — увезите бројеве телефона које већ поседујете и омогућите ThunderPhone агентима да одговарају на позиве и упућују их преко њих.

ThunderPhone бројеви покривају долазне позиве, али за одлазне позиве и кампање потребни су Вам бројеви које поседујете преко сопственог VoIP провајдера. Овај водич Вас води кроз ток у четири корака: тестирајте акредитиве → креирајте везу → увезите бројеве → потврдите.

Подржани провајдери

Провајдерprovider идентификаторНапомене
TwiliotwilioSID налога + токен за аутентификацију; једна веза по Twilio налогу или подналогу (погледајте Twilio подналоге)
TelnyxtelnyxAPI кључ; доступно је вођено увођење (setup_method: guided_telnyx)
SignalWiresignalwireУскоро — повежите се данас преко ручног SIP-а
VonagevonageУскоро — повежите се данас преко ручног SIP-а
Ручни SIPmanualБило који SIP транк — користите сопствену конфигурацију

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 ће приказати на ком је кораку дошло до грешке. Исправите конфигурацију на страни провајдера (доделу транка, 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 транкове унутар сваког подналога, тако да веза направљена помоћу матичног налога види само бројеве самог матичног налога, а постојећа веза се касније не може пребацити на други подналог (ажурирање се одбија јер 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 их никада не враћа. Свака нова веза затим увози и верификује бројеве потпуно исто као веза коју сте ручно креирали.

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

Сваки увоз постаје ресурс телефонског броја у Вашој организацији са source="voip" и status="provisioning".

4. Верификујте сваки увезени број

Увоз региструје број као доступан; за стварно усмеравање позива преко њега потребна је верификација. За везе са провајдерима (Twilio, Telnyx), тиме се поново проверавају акредитиви провајдера и SIP доступност. За ручну 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". У случају неуспеха, одговор наводи шта није успело — за ручни трунак то је SIP одговор оператера, на пример "одбијени су акредитиви за ThunderPhone (SIP 401)" или "није могуће усмерити позив (SIP 404)" — исправите проблем (акредитиве, дозвољене изворне 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"
  }'

Веза остаје на месту — нема потребе за поновним увозом бројева.


Следећи кораци