Hoppa till innehållet

Guider

Egen agent

Vill du koppla en egen röstplattform - ElevenLabs Conversational AI i din egen workspace, Vapi, Retell eller till och med en egen Asterisk/FreeSWITCH-IVR - till ett volai-nummer i stället för den inbyggda agenten? Den här sidan beskriver båda riktningarna: inkommande och utgående samtal. För utgående samtal slipper du dessutom agenttillägget på 2,50 kr/min (≈ 1,14 SEK) - agenten driver (och betalar) du själv hos din plattform.

Snabböversikt

Inkommande samtal ställs in genom att numret dirigeras till plattformens SIP-adress - ingen ny mekanik. Utgående samtal går via en kortlivad relay-anslutning, eftersom plattformen inte själv kan registrera en linje permanent som SIP-klient.

Det som behövs: ett volai-nummer, en API-nyckel (vk_...) och ett konto hos plattformen (ElevenLabs, Vapi, en egen telefonväxel...).

1Egen agent eller inbyggd

Båda vägarna går på samma nummer och samma saldo - de skiljer sig bara i VEM som driver samtalslogiken och vad det kostar extra:

KriteriumInbyggd agentEgen agent
Vem styr samtaletVi - en systemPrompt, vår röst och vår ElevenLabs-workspace.Du - valfri plattform, egen prompt, egen röst, egna verktyg.
InställningEtt POST /v1/agents-anrop.Numrets SIP-uppgifter + konfigurationen av din plattform (den här sidan).
Samtalspris0,92 kr/min (≈ 0,42 SEK) utgående, 0,50 kr/min (≈ 0,23 SEK) inkommandesamma - 0,92 kr/min (≈ 0,42 SEK) utgående, 0,50 kr/min (≈ 0,23 SEK) inkommande
Agenttillägg+ 2,50 kr/min (≈ 1,14 SEK)inget - du betalar bara samtalsminuterna
Transkription, sammanfattning, igenkänning av telefonsvarareJa, automatiskt.Nej - hanteras (eller inte) av din egen plattform.

Du slipper agenttillägget, men du får heller inget extra av oss gratis - din plattform (ElevenLabs, Vapi...) betalar du direkt enligt dess egen prislista. Vi debiterar bara samtalsminuter på volai-linjen, precis som för en SIP-klient eller den inbyggda agenten. Taxorna är exklusive moms, som hela prislistan.

2Inkommande samtal till en egen agent

Ingen ny mekanik - bara den befintliga mode: "sip" -dirigeringen (samma som för en egen softphone, se SIP) med plattformens sipUri -adress. För ett ElevenLabs SIP-trunk-nummer som registrerats i DIN EGEN workspace är det en adress med samma nummer som din volai-linje:

bash
curl -X PATCH "https://volai.cz/v1/numbers/+420601234567" \
  -H "Authorization: Bearer vk_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"routing": {"mode": "sip", "sipUri": "sip:+420601234567@sip.rtc.elevenlabs.io"}}'

Och i ditt ElevenLabs-konto (Settings → Phone Numbers → Import → SIP trunk) registrerar du numret med inbound_trunk_config:

json
{
  "provider": "sip_trunk",
  "phone_number": "+420601234567",
  "label": "Min egen agent",
  "inbound_trunk_config": {
    "allowed_addresses": ["81.31.45.0/24"],
    "media_encryption": "allowed"
  }
}

allowed_addresses ovan är vårt signaleringsintervall (81.31.45.0/24) - säkrare än det universella 0.0.0.0/0, som släpper in en INVITE varifrån som helst. Båda släpper igenom samtalet, men vid import utan inloggningsuppgifter är allowlistan den ENDA kontrollen - ange därför intervallet, inte 0.0.0.0/0.

Använder du en annan plattform än ElevenLabs? Samma princip - ta reda på vilken SIP-adress den förväntar sig samtal för ditt nummer på och ange den i sipUri. För Vapi anges samma intervall i BYO-trunkens gateways.

För Vapi är dirigeringsadressen sip:<E164>@<credentialId>.sip.vapi.ai - <credentialId> hittar du på din BYO SIP-trunk i Vapi, och en organisation i EU-regionen använder domänen sip.eu.vapi.ai i stället för sip.vapi.ai. Den bara sip.vapi.ai tillhör Vapis egna nummer och fungerar inte för ett nummer från oss. Lämna användarnamn och lösenord tomma på BYO-trunken, Vapi känner igen våra samtal på IP-adressen i gateways.

Ange intervallet i gateways som IP 81.31.45.0 och nätmask (netmask) 24 separat. Med standardmasken 32 skulle Vapi släppa igenom bara en adress och avvisa våra samtal.

3Utgående samtal från en egen agent (relay)

Det här är motsatt riktning - din plattform ringer själv ut. De flesta röst-AI-plattformar (ElevenLabs inräknat) kan dock inte registrera en telefonlinje permanent som SIP-klient - de skickar bara ett enda autentiserat samtal med din linjes inloggningsuppgifter. Telefonnätet släpper inte igenom ett sådant samtal direkt till målnumret, och därför leder du det via en kortlivad relay-anslutning:

Varför relay och inte direkt uppringning

Direkt uppringning av målnumret via trunken fungerar inte åt något håll: till ett nummer utanför vårt nät uppstår samtalet aldrig alls (plattformen rapporterar fel, och ingen spår finns kvar någonstans), och till ett annat volai-nummer i vårt nät kopplas det bara INTERNT som ett anonymt samtal - det lämnar aldrig vårt nät, även om det ser ut som ett uppkopplat samtal. Relay är den enda vägen att verkligen få ut ett samtal.

1. Ställ in din plattform på din linje

Hämta din linjes SIP-uppgifter:

bash
curl "https://volai.cz/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"]
}

Svaret returnerar server (för en softphones REGISTER, se SIP) och outboundTrunkAddress SEPARAT - de går inte att byta ut mot varandra.

Och ange outboundTrunkAddress - INTE server - som plattformens utgående trunk. För ElevenLabs gäller det outbound_trunk_config för det aktuella telefonnumret (Settings → Phone Numbers → ditt nummer → Outbound calling), i exakt den här formen:

json
{
  "outbound_trunk_config": {
    "address": "sip.volai.cz",
    "transport": "tcp",
    "media_encryption": "allowed",
    "credentials": {
      "username": "123456",
      "password": "a1b2c3d4e5f6"
    }
  }
}

Ange exakt outboundTrunkAddress

Den utgående trunkens adress måste vara exakt värdet outboundTrunkAddress från svaret - oavsett om den är densamma som server eller inte. En annan adress innebär att samtalet inte dirigeras i nätet och plattformen rapporterar det som 1011 sip request timed out - i samtalshistoriken blir inget kvar.

2. Skapa en relay-anslutning

Strax före samtalet (anslutningen har kort livslängd, se gränserna nedan) anropar du:

bash
curl -X POST https://volai.cz/v1/relay \
  -H "Authorization: Bearer vk_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"to": "+420777123456", "from": "+420601234567"}'
json
{
  "id": "rl_4f2a91cd",
  "sipName": "volai_relay_2",
  "sipUri": "sip:volai_relay_2@sip.volai.cz",
  "expiresAt": 1756111760000,
  "callId": "c_9d4e2b7f"
}

Det uppringda numret anger du till OSS i to - plattformen ser det aldrig, utan får bara det nakna sipName från svaret.

3. Låt plattformen ringa till sipName

Det nakna namnet, inte hela SIP-URI:n

ElevenLabs to_number avvisar en hel SIP-URI med meddelandet "SipCallTo should be a phone number or SIP user, not a full SIP URI" - därför returnerar svaret ovan sipName (det nakna volai_relay_2) och sipUri (hela sip:volai_relay_2@sip.volai.cz) SEPARAT. Bara det förstnämnda hör hemma i to_number - aldrig hela URI:n.

För ElevenLabs innebär det att anropa /v1/convai/sip-trunk/outbound-call med to_number satt direkt till sipName:

json
{
  "agent_id": "agent_...",
  "agent_phone_number_id": "phnum_...",
  "to_number": "volai_relay_2"
}

agent_id hittar du på din agent i ElevenLabs, agent_phone_number_id är phone_number_id för det importerade numret - importsvaret returnerar det, annars kan du läsa av det i listan Phone numbers.

Använder du en egen SIP-klient eller telefonväxel i stället för ElevenLabs? Ring hela sipUri direkt, som ett vanligt SIP-samtal - begränsningen gäller bara plattformar som vill ha ett naket namn utan sip: -prefixet.

4. Vad som händer sedan

Telefonnätet tar emot samtalet under namnet volai_relay_2, kopplar vidare det till din to och sätter det synliga nummret för den som ringer till din from - den uppringde ser din volai-linje i displayen, inte relay-platsens interna namn (om numret har egna relay-namn - se Debitering nedan, annars ser den uppringde volais demonummer). När samtalet är slut frigörs leasen och minuterna debiteras precis som ett vanligt utgående samtal - 0,92 kr/min (≈ 0,42 SEK), inget agenttillägg.

Svaret på uppringningen kommer först efter hela ringsignalen (gärna tiotals sekunder) - det är inget fel, men en kort timeout på din sida kan se ut som ett misslyckande fastän samtalet pågår.

4Felsökning

De vanligaste meddelandena med en egen agent och vad man gör åt dem:

MeddelandeOrsakÅtgärd
1011 sip request timed outAdressen till den utgående trunken är inte outboundTrunkAddress.Ange outbound_trunk_config.address i ElevenLabs som outboundTrunkAddress från svaret med SIP-uppgifter, inte som server.
SipCallTo should be a phone number or SIP user, not a full SIP URIto_number innehåller hela sipUri i stället för det nakna namnet.I to_number hör bara sipName från svaret på POST /v1/relay hemma.
Samtalet avslutas direkt på plattformen (failed hos ElevenLabs), hos oss syns ingentingTelefonnumret ringdes upp direkt, inte via relay.Skapa en relay-anslutning (POST /v1/relay) och ring det returnerade sipName.
max auth retry attempts reached for SIP invitePlattformen klarade inte inloggningen: antingen stämmer inte den utgående trunkens användarnamn eller lösenord, eller så kom samtalet som ett telefonnummer i stället för sipName - nätet begär då ytterligare en inloggning som plattformen inte klarar.Kopiera användarnamn och lösenord exakt från numrets SIP-uppgifter (username, password). Ange bara sipName från POST /v1/relay i to_number och starta samtalet via API:t (POST /v1/convai/sip-trunk/outbound-call) eller ElevenLabs MCP-verktyg make_outbound_call, inte via ett formulär som bara tar emot telefonnummer. Leasen väntar på samtalet bara ttlSecs (standard 120 s).
404 from_number_not_ownedfrom i POST /v1/relay är inte ett volai-nummer som tillhör dig.Ange i from exakt det volai-nummer som du ringer från.
400 relay_lease_limitPå det här numret (1) eller kontot (2) pågår redan en aktiv lease.Vänta tills leasen frigörs eller avbryt en oanvänd (DELETE /v1/relay/{id}).
503 capacity_busyDen delade poolen av relay-platser är tillfälligt full.Inget debiteras - försök igen om en stund.
Inkommande samtal ringer inteNumret är inte importerat i ElevenLabs, allowed_addresses släpper inte in vårt intervall eller så är dirigeringen inte sparad i volai.Kontrollera alla tre stegen ovan; om växeln svarar med 401, fyll i användarnamn och lösenord på dirigeringen.
Den uppringde ser volai-numret i stället för dittNumret har ännu inga egna relay-namn. De skapas direkt efter köpet, men den här gången lyckades det inte.Nästa samtal försöker skapa dem igen av sig självt. Om den uppringde ser volai-numret även efter en timme, kontakta supporten.
Ett upprepat samtal avvisas direkt (SIP 603)Plattformen ringde samma sipName igen, vanligtvis efter ett obesvarat samtal. En lease kopplar bara ett samtal.Skapa en ny lease (POST /v1/relay) före varje försök, även vid upprepning efter ett obesvarat samtal, och stäng av automatisk återuppringning i plattformen.

5Debitering

Ett utgående samtal via relay debiteras med samma taxa som ett vanligt utgående samtal - 0,92 kr/min (≈ 0,42 SEK) - utan något som helst agenttillägg. Taxorna är exklusive moms, som hela prislistan.

Antalet samtidiga samtal är begränsat (se gränserna nedan): högst 1 aktivt samtal per ett av dina nummer och högst 2 per konto samtidigt.

Den uppringde ser din volai-linje bara om numret har egna relay-namn (relayNames) - numret får dem direkt efter köpet. Så länge det inte har dem faller leasen tillbaka på den delade poolen och den uppringde ser volais demonummer. Om det varar längre än en timme, kontakta supporten.

6Gränser, kvoter och säkerhet

Taket är 1 aktiv lease per nummer och högst 2 per konto - ett medvetet skydd mot att en enda kund upptar hela den delade poolen av relay-platser:

VadVärde
Leasen väntar på det första samtalet (pending)120 s som standard, ttlSecs 15 till 300 s
Samtalet pågår (active)15 minuter
Aktiv lease per ett av dina nummerhögst 1
Aktiva leaser per kontohögst 2
Användning av leaseengångs - ett andra samtal på samma lease avvisas, och även ett nytt försök efter ett obesvarat samtal kräver en ny lease
  • from måste vara ditt eget volai-nummer - annars from_number_not_owned. Utan den här kontrollen skulle man kunna utge sig för en annans linje (förfalskat nummervisning).
  • Samma spärrar som för ett vanligt samtal - lista över nummer som inte får ringas (gäller bara samtal, inte sms), automatisk 30 dagars spärr efter 3 misslyckade försök till samma nummer inom 24 timmar, premiumnummer, skydd mot slingor mellan volai-nummer, spärren av det uppringda numret och den allmänna gränsen för antal samtal. Inget av detta går att kringgå via relay.
  • Full pool -> 503 capacity_busy - relay-platserna är ett delat tak för samtidighet för HELA plattformen, inte bara ditt konto. Vid capacity_busy debiteras inget, försök igen om en stund.
  • Den fullständiga REST-referensen (felkoder, GET/DELETE för leaser) finns i REST API.

Varje API-fel innehåller cause (vem som åtgärdar det) och action (vad som ska göras) - se Felformat i REST API-referensen.