ThunderPhone 2.0 är här.Kom igång på egen hand, från 2 ¢/min.Läs lanseringsnyheten

Developer cookbook

Använd dina egna nummer (VoIP, API)

Anslut Twilio, Telnyx, SignalWire, Vonage, Plivo eller någon annan SIP-trunk via SIP, importera telefonnumren du redan äger och låt ThunderPhone-röstagenter besvara och ringa samtal med dem.

Godkända ThunderPhone-nummer kan ringa utgående samtal och köra kampanjer. Om du föredrar att använda nummer du äger via din egen VoIP-leverantör går den här guiden igenom anslutningsflödet: testa autentiseringsuppgifter → skapa anslutning → importera nummer → verifiera.

Leverantörer som stöds

Leverantörprovider-idAnteckningar
TwiliotwilioAccount SID + Auth Token; en anslutning per Twilio-konto eller underkonto (se Twilio-underkonton)
TelnyxtelnyxAPI-nyckel; guidad onboarding tillgänglig (setup_method: guided_telnyx)
SignalWiresignalwireIngen inbyggd leverantörsanslutning; anslut den som manual med SignalWire SIP-förinställningen
VonagevonageIngen inbyggd leverantörsanslutning; anslut den som manual med Vonage SIP-förinställningen
Manuell SIPmanualValfri SIP-trunk, inklusive SignalWire, Vonage och Plivo. Om du börjar från en av dessa leverantörsrutor i instrumentpanelen är anslutningen fortfarande manual och lagrar valet i sip_config.preset (signalwire, vonage eller plivo)

1. Testa autentiseringsuppgifter

Innan du skapar en sparad VoIP-anslutning kontrollerar du leverantörens autentiseringsuppgifter för att bekräfta att de fungerar. Detta returnerar ett verification_evidence_id som du skickar till steget för att skapa anslutningen, så att autentiseringsuppgifterna inte debiteras två gånger för testning.

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

Om någon kontroll misslyckas blir svarets status fail och checks visar vilket steg som misslyckades. Åtgärda konfigurationen hos leverantören (trunktilldelning, IP-tillåtelselista, auktorisering för utgående samtal) och försök igen.

2. Skapa anslutningen

Skicka verification_evidence_id som du nyss fick:

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

Svaret är ett VoipConnection-objekt med status="connected". Autentiseringsuppgifter och andra hemliga anslutningsvärden lagras på serversidan och returneras aldrig i klartext vid efterföljande GET-anrop — för att rotera dem kör du ett nytt test och PATCH med det nya underlaget.

Twilio-underkonton

En Twilio-anslutning är knuten till det enda Twilio-konto vars Account SID och Auth Token den innehåller. Twilio lagrar telefonnummer och SIP- trunkar i varje underkonto, så en anslutning som skapats med huvudkontot endast kan se huvudkontots egna nummer, och en befintlig anslutning kan inte senare växlas till ett annat underkonto.

För att nå nummer i underkonton skapar du en anslutning per underkonto. Instrumentpanelen gör detta åt dig: när du ansluter ett huvudkonto med aktiva underkonton listar installationsdialogrutan dem, du markerar dem du vill använda, och ThunderPhone skapar en anslutning (och en SIP-trunk) i var och en. Samma flöde är tillgängligt via API:t:

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

Svaret innehåller en rad per underkonto med status som created, skipped (redan anslutet) eller failed, samt ett error som du kan agera på. Raderna är oberoende, så ett fel i ett underkonto blockerar aldrig de andra, och ett discovery_id är giltigt i 30 minuter så att en misslyckad rad enkelt kan försöka igen. Underkontots token hämtas från Twilio vid identifiering och lagras i den nya anslutningen; de returneras aldrig av API:et. Varje ny anslutning importerar och verifierar sedan nummer på exakt samma sätt som en anslutning du skapade manuellt. Lägg till "enable_transfers": true för att även aktivera samtalsöverföringar för varje ny anslutnings SIP-trunk. Ett fel där rapporteras i anslutningens test_result.transfer_enable_error och gör inte att raden misslyckas.

3. Lista och importera nummer

Granska numren som är synliga för dina autentiseringsuppgifter och som inte redan finns i en ThunderPhone-organisation:

curl https://api.thunderphone.com/v1/voip-connections/5/available-numbers \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Importera sedan de du vill ha:

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

Varje import blir en telefonnummerresurs i din organisation med number_type="voip" och status="provisioning".

4. Verifiera varje importerat nummer

Importen registrerar numret som tillgängligt; att faktiskt dirigera samtal via det kräver verifiering. För leverantörsanslutningar (Twilio, Telnyx) kontrolleras leverantörens inloggningsuppgifter och SIP-nåbarhet på nytt. För en manuell SIP-anslutning försöker ThunderPhone först med ett loopback-självsamtal: ThunderPhone genomför ett kort testsamtal från numret, via din SIP- trunk, tillbaka till samma nummer. Om det inte verifierar den inkommande vägen faller det tillbaka på ett kort testsamtal från numret, via din SIP-trunk, till ett ThunderPhone-nummer. Dessa tester kontrollerar trunkens användarnamn, lösenord, transport, utgående dirigering och inkommande leverans. Din operatör debiterar dessa samtal som alla andra.

curl -X POST https://api.thunderphone.com/v1/phone-numbers/{id}/verify-voip \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Vid lyckat resultat ändras voip_verification_status till verified och numret får status="active". Ett nummer i ditt eget Telnyx-konto fortsätter att ta emot inkommande samtal om testsamtalet misslyckas eller om utgående samtal ännu inte har konfigurerats: det får status="active" med voip_verification_status inställt på unverified, och svaret förklarar varför. Vid fel anger svaret vad som misslyckades — för en manuell trunk är det operatörens SIP-svar, till exempel "avvisade ThunderPhones autentiseringsuppgifter (SIP 401)" eller "kunde inte dirigera ett samtal (SIP 404)" — åtgärda det (autentiseringsuppgifter, tillåtna käll-IP-adresser, en saknad trunk-tilldelning i leverantörens instrumentpanel) och ring igen.

För en tillåtslistad manuell SIP-anslutning misslyckas testet av inkommande samtal också om dessa tillåtna käll-IP-adresser skulle blockera ett verkligt inkommande samtal.

5. Tilldela agenter och ta emot ett samtal

När numret har verifierats tilldelar du röstagent för inkommande / utgående samtal på samma sätt som för ett ThunderPhone-nummer. Se Hantera inkommande samtal och Ring utgående samtal.

Roterande autentiseringsuppgifter

När en leverantörsnyckel roteras kör du test-och-uppdatera-flödet igen:

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

Anslutningen ligger kvar — du behöver inte importera numren på nytt.


Nästa steg