Hoppa till innehållet

Guider

SIP

När en röstagent eller enkel vidarekoppling inte räcker och numret ska kopplas till en egen softphone eller telefonväxel (PBX) behövs en SIP-trunkleverantör - volai är en sådan. Den här sidan är en guide steg för steg.

1Inkommande samtal till din SIP-server

Sätt numrets routing till mode: "sip" och ange din sipUri - därifrån går samtalet direkt till dig, inte till vårt agenterbjudande eller vidarekoppling:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:reception@din-server.se"}}'

Bara den inkommande minuten debiteras (0,50 kr/min (≈ 0,23 SEK)), ingen agent tillkommer - den fullständiga formen på förfrågan och övriga routinglägen finns i REST API-referensen.

Autentisering på din växel

Samtalet till din SIP-server skickar vi först som en oautentiserad INVITE till sipUri. En växel som svarar på den med en inloggningsutmaning (401/407) och utan ytterligare uppgifter avvisar samtalet får det inte i den här formen - utmaningen har ingen som kan besvara den. Fyll därför i även sipUsername och sipPassword i routingen - när båda är ifyllda loggar vårt nät in på målet (SIP digest) och slår det anropade numret. Verifierat med ett live-samtal till ett inbyggt SIP-nummer hos Vapi, som godtar inloggningsuppgifter oavsett innehåll. Om samtalet kopplas även av din växel beror på den - den måste verkligen svara på INVITE med en utmaning och godkänna det angivna namnet och lösenordet; det garanterar vi inte för varje växel (i testet lyckades det till exempel inte mot Twilios SIP-domän). Utan sipUsername och sipPassword förblir routingen i dagens oautentiserade form. Inloggningen läggs till i routingen så här:

bash
curl -X PATCH "https://volai.eu/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:reception@din-server.se", "sipUsername": "reception", "sipPassword": "hemligtlosenord123"}}'

Det anropade numret skickar vi alltid exakt i den form det har i sipUri före snabel-a - vi lägger varken till eller tar bort något riktnummer eller någon nolla, så målväxeln måste kunna hantera exakt det som skrivs där.

sipUsername och sipPassword får inte innehålla kolon, snabel-a, mellanslag, citattecken eller omvänt snedstreck och får vara högst 64 tecken vardera.

Det går inte att fylla i bara ett av fälten - API:t returnerar felet „Please fill in both username and password, or leave both empty.“.

Kolon i användardelen av sipUri (före snabel-a) och port i värden (efter kolon vid servern, t.ex. :5060) stöds ännu inte tillsammans med ifyllda sipUsername och sipPassword - båda ger samma hårda fel. Utan inloggningsuppgifter fungerar båda oförändrat.

Undantag: BYO SIP-trunk hos Vapi (adress <credentialId>.sip.vapi.ai, för en organisation i EU-regionen <credentialId>.sip.eu.vapi.ai) använder inte inloggningsuppgifter. Vapi känner igen våra samtal på IP-adressen i trunkens gateways, och med ifyllda sipUsername och sipPassword skulle samtalet inte kopplas, därför avvisar API:t sådan routing med koden validation. Det gäller inte Vapis inbyggda SIP-nummer (sip:<namn>@sip.vapi.ai).

Vem som mer ser namnet och lösenordet

Namnet och lösenordet följer med samtalet vidare in i vårt nät och finns kvar i de tekniska loggarna över dess routing - du är inte den enda som ser dem. Skapa därför ett dedikerat konto på växeln enbart för oss, inte huvudadministratörens lösenord.

Partial update: ett utelämnat fält förblir som det var

Om du i PATCH bara skickar sipUri och utelämnar sipUsername samt sipPassword , förblir båda fälten oförändrade - de behöver inte anges på nytt vid varje ändring av sipUri. Ett utelämnat fält (saknas helt i body) behåller alltid det sparade värdet; inloggningen tas bort bara med en uttrycklig tom sträng i BÅDA fälten samtidigt. Det enda undantaget är byte av server: ändras även delen efter snabel-a i sipUri måste lösenordet skickas på nytt - det sparade lösenordet skickar vi inte till en annan server än den det angavs för. Aktuellt läge kontrolleras med fältet hasSipPassword i svaret.

Kopplades inte samtalet? Släpp in oss via IP

Sipa-inloggning fungerar bara mot ett mål som utmanar INVITE och godtar uppgifterna (verifierat med Vapis inbyggda SIP-nummer) - annars kommer samtalet inte fram, oavsett om inloggningsuppgifter är ifyllda eller inte. Vår signalering kommer från intervallet 81.31.45.0/24, i praktiken oftast från 81.31.45.51 och 81.31.45.56. Tillåt hela intervallet på växeln - då känns samtalet igen på källadressen, inte på namn och lösenord, och inloggningsuppgifter behövs inte alls.

2Numrets SIP-uppgifter

Linjens inloggningsuppgifter hämtas med ett enda anrop:

bash
curl "https://volai.eu/v1/numbers/+420601234567/sip" \
  -H "Authorization: Bearer vk_DIN_NYCKEL"
json
{
  "server": "sip.volai.cz",
  "username": "123456",
  "password": "a1b2c3d4e5f6",
  "outboundTrunkAddress": "sip.volai.cz",
  "port": 5060,
  "transport": "tcp",
  "inboundSignallingCidrs": ["81.31.45.0/24"]
}

Inställning i softphone (Zoiper, Linphone)

I båda apparna anges i princip samma sak, bara med olika namn - leta efter „Lägg till konto“ / „SIP-konto“:

FältVärde
Server / Domänsip.volai.cz
Användarnamnfrån svaret ovan (username)
Lösenordfrån svaret ovan (password)
TransportTCP
Port5060 (standard-SIP - erbjuder fältet ett tomt alternativ, lämna det tomt)

Vill klienten att realm fylls i?

Lämna fältet tomt - de flesta klienter hämtar realm från serverns utmaning. I klientens logg kan en teknisk domän för vårt nät dyka upp, det är helt i sin ordning. Kräver klienten realm som obligatoriskt, skriv till supporten.

Efter att inställningarna sparats bör softphonen registrera sig (statusikon „online“/„registrerad“) och samtal till numret börjar ringa direkt i den.

3Utgående samtal via SIP-klient

När softphonen är registrerad kan den själv ringa ut via den här linjen - inget av våra API behöver anropas, samtalen ringas direkt från klienten som från en vanlig telefonlinje.

Minuterna dras från volai-saldot

Utgående samtal via en SIP-klient debiteras med samma pris som ett utgående samtal via API (0,92 kr/min (≈ 0,42 SEK)) och dras från saldot - inte från något separat SIP-konto. Priserna är exkl. moms, liksom hela prislistan.

Förbindelsen går direkt mellan klienten och servern sip.volai.cz, inte via vårt API, så minuterna kan inte blockeras exakt vid uppringningen. Ett samtal som ringts direkt från en SIP-klient debiteras i efterhand utifrån nätets poster - tidigast 10 minuter efter att det avslutats, vanligen inom en halvtimme - och syns inte på saldot vid uppringningen. Den dagliga samtalsgränsen och saldokontrollen vid uppringning gäller inte de här samtalen, eftersom de bara bevakar samtal via API - saldot kan alltså sjunka under noll. När saldot sjunker till noll börjar nya betalda åtgärder via API/MCP avvisas (ett samtal kräver ett saldo på minst det lägsta samtalsbeloppet). När saldot sjunker under noll stängs linjens SIP-åtkomst av inom några minuter, vidarekopplingen kopplas bort och ett e-postmeddelande skickas; efter påfyllning till minst det lägsta samtalsbeloppet återupptas allt av sig självt och lösenordet ändras inte. Regleras skulden inte inom en vecka släpps numret tillbaka till lagret (SIP-åtkomsten upphör då definitivt). Bevaka därför saldot i god tid, inte först vid noll.

Har du en AI-röstagent, inte en softphone?

Det här steget räknar med en klient som kan registrera sig mot linjen (SIP REGISTER) - softphone, PBX. En plattform som bara skickar samtalet autentiserat vid ett tillfälle utan permanent registrering (typiskt AI-röstagenter som ElevenLabs) behöver ett annat tillvägagångssätt - se Egen agent.

Plattformens utgående trunkadress hämtas från fältet outboundTrunkAddress, inte från server ovan - mer om det på den sidan.

4Begränsningar

  • En registrering per linje - en uppsättning inloggningsuppgifter klarar en registrerad enhet åt gången. Loggar en andra klient in tappar den första sannolikt sin registrering - lita inte på flera enheter samtidigt på en linje.
  • Utgående från en egen agent ja, full trunk-peering nej - linjens inloggningsuppgifter finns för att DIN klient ska registrera sig hos OSS som en telefon. Utgående samtal från en egen röstagent (ElevenLabs eller annan plattform) FUNGERAR däremot idag - via relay, se Egen agent. Fortfarande går det dock inte att ansluta din växel som en jämbördig operatör med egen routing av INKOMMANDE samtal utifrån - använd i så fall routingen forward till numret på din växel.
  • Bara röst - ingen video och inga andra SIP-tillägg.