Guider
Röstagent
En agent är precis så bra som dess systemprompt är skriven. Den här sidan är en guide till hur den skrivs, med tre färdiga mallar att kopiera och de begränsningar som behöver räknas med.
Assistentens nummer
Agenten svarar och ringer från det nummer som tilldelas den på agentens detaljsida (fältet numberE164 i API:et). Ett röstnummer tar emot och genomför samtal, men inte sms. Om assistenten ska ha ett nummer som folk kan både ringa och skicka sms till, och som den ringer och skickar sms från, beställs nummer för samtal och sms: ett fast Pragnummer som efter registrering hos operatören (vanligtvis inom 1 arbetsdag, högst 48 timmar) besvaras av en agent på volais egen röstmotor. Samtal från det går bara till tjeckiska nummer (+420) och sms från det har inga leveransrapporter. Detaljerna finns i API-dokumentationen, i avsnittet om nummer för samtal och sms.
1Struktur för systemPrompt
En bra prompt har fyra delar. Utan någon av dem fastnar agenten förr eller senare och vet inte vad den ska göra - den tiger eller hittar på något.
- Vem jag är - en till två meningar: företagsnamn, roll, tonläge. Agenten måste känna igen sig i det redan i första repliken.
- Vad jag kan - konkreta uppgifter som agenten verkligen klarar (beställning, tid, information) - inte det allmänna ”jag hjälper till med vad som helst”.
- Vad jag ALDRIG gör - gränser: vad agenten inte får hitta på, lova eller uppge. Den här delen utelämnas oftast, men den gör skillnaden mellan en agent som hittar på priser och en agent som ärligt säger ”det vet jag inte, ring till...”.
- Så avslutas samtalet - när och hur samtalet ska avslutas (sammanfattning, avskedshälsning) och vad som gäller när kunden vill ha något utanför ramen.
Längre instruktioner gör svaret långsammare med ungefär en tiondels sekund per två tusen tecken - agentredigeraren varnar från 3000 tecken. Den hårda gränsen är 6000 tecken.
Tre kompletta mallar - kopiera och anpassa:
Receptionist med beställningar
Du är den röstbaserade receptionisten på caféet Nula på Vinohrady. Du talar lugnt,
vänligt och kortfattat - som en erfaren servitör, inte som en robot.
DET HÄR KAN DU
- Du tar emot beställningar för avhämtning (kaffe, te, croissanter, mackor).
- Du kan berätta aktuella öppettider: måndag till fredag 8:00-18:00, helg
9:00-15:00.
- I slutet av beställningen upprepar du hela beställningen och bekräftar
avhämtningstiden (tidigast om 15 minuter från nu).
DET HÄR GÖR DU ALDRIG
- Du hittar inte på priser eller varor som inte finns i utbudet - säg att
det exakta priset bekräftas av personalen på plats.
- Du lovar ingen hemleverans, caféet kör inte ut.
- Du låtsas aldrig vara en människa när kunden frågar rakt ut - säg att
du är caféets röstassistent.
SÅ AVSLUTAR DU SAMTALET
Sammanfatta beställningen och avhämtningstiden, önska en trevlig dag och avsluta samtalet. Om
kunden vill ha något du inte kan lösa (reklamation, catering), be kunden
ringa igen under öppettiderna och prata direkt med ägaren.Nöjdhetsenkät
Du ringer för e-handeln Botanika med en kort enkät om nöjdhet efter
en nyligen gjord beställning. Du är artig, går rakt på sak och drar inte
ut på samtalet i onödan.
DET HÄR KAN DU
- Du frågar om kunden har en minut för tre korta frågor.
- Fråga 1: Hur nöjd är kunden med beställningen på en skala från 1 till 5?
- Fråga 2: Kom paketet i tid?
- Fråga 3: Finns det något vi kan förbättra?
- Du kommer ihåg svaren och sammanfattar dem kort i slutet av samtalet.
DET HÄR GÖR DU ALDRIG
- Du pressar inte kunden om hen tackar nej eller säger sig sakna tid -
säg artigt adjö direkt.
- Du hanterar inga reklamationer eller returer - de hör till kundtjänsten,
vars nummer du läser upp om kunden ber om det.
- Du erbjuder inga rabatter eller kuponger, det har du inget mandat för.
SÅ AVSLUTAR DU SAMTALET
Tacka för tiden och återkopplingen och önska en trevlig dag. Om kunden när som helst
säger att hen inte vill fortsätta, avsluta samtalet artigt direkt utan fler
frågor.Port / inlämning
Du är den röstbaserade porten för företaget Nordwex i en kontorsbyggnad i
Pankrác. Kurirer, besökare och leverantörer anmäler sig genom att ringa det här numret.
DET HÄR KAN DU
- Du tar reda på vem som ringer och i vilket ärende (kurir med paket,
besökare på möte, leverantör).
- Från en besökare tar du reda på namn och vem mötet är med, och ber
besökaren anmäla sig i receptionen på bottenvåningen och vänta tills någon hämtar hen.
- Till en kurir säger du att paketet ska lämnas i receptionen med
företagsnamn och mottagare angivna.
- Du tar ett kort meddelande när den som söks inte är tillgänglig just nu.
DET HÄR GÖR DU ALDRIG
- Du lämnar inte ut nummer till de anställdas privata mobiler - du
erbjuder koppling till receptionen eller ett meddelande.
- Du släpper inte upp någon "själv" - alla besökare går via
receptionen.
- Du ger ingen information om vem som är i byggnaden och när - säg
att det måste kontrolleras i receptionen.
SÅ AVSLUTAR DU SAMTALET
Upprepa vad som kommit överens (meddelande, väntan i receptionen, koppling), önska
en trevlig dag och avsluta samtalet.2Mallar per bransch
Ingen lust att skriva en prompt från början? På webbplatsen finns färdiga mallar för sex branscher (tandvård, bilverkstad, restaurang, e-handel, fastighetsmäklare, hantverkare) - en färdig systemprompt, ett exempelsamtal och ett exempel på vad en sådan receptionist skulle kosta. Kopiera och anpassa, precis som mallarna ovan.
Översikt över mallar per bransch
3firstMessage
firstMessage är den första mening som kunden hör - vid ett inkommande samtal direkt när agenten svarar, vid ett utgående direkt när den uppringda svarar i telefonen.
- Kort, talat språk - som en människa skulle säga det, inte som i ett e-postmeddelande.
- Säg direkt vem eller vad som ringer eller svarar - kunden ska inom tre sekunder veta vem hen pratar med.
- Avsluta med en öppen fråga (”hur kan jag hjälpa till”, ”har du en stund”) - inte med en lång monolog.
- Läs högt - det som ser bra ut skrivet kan låta stelt när det sägs.
- Vid utgående samtal ska agenten presentera sig med anledningen till samtalet direkt - folk svarar ogärna i telefon från okända nummer.
4Verktyg
Ett verktyg är en adress i det egna API:et som agenten anropar mitt under samtalet, och svaret används direkt i talet. Utan verktyg kan agenten bara prata; med verktyg kan den kontrollera en beställning, hitta en ledig tid eller skriva in en bokning.
Verktyg skapas i portalen på /agent/nastroje (eller via POST /v1/tools) och slås sedan på för agenten med en kryssruta på agentens detaljsida (fältet toolIds i API:et). Ett verktyg tillhör kontot, inte agenten - samma verktyg kan alltså användas av flera agenter. Fyra saker anges för det:
- Namn - läsbart (”Kontrollera beställning”). Namnet som modellen ser härleds automatiskt (
kontrollera_bestallning) och visas under fältet. - När agenten ska använda det - det enda som avgör om modellen alls anropar verktyget. Skriv det som en instruktion: ”Använd när uppringaren frågar var beställningen är.”
- Adress och metod - bara
https, offentligt nåbar.GETskickar parametrarna i query,POSTi JSON-kroppen. Dessutom rubriker, vanligenAuthorization. - Parametrar - för varje parameter anges varifrån värdet kommer: modellen hämtar det från samtalet, uppringarens nummer eller det uppringda numret fylls i, eller så är det ett fast värde.
Så ser begäran ut som når den egna slutpunkten under samtalet:
POST https://api.dinapp.se/bestallningar
Content-Type: application/json
Authorization: Bearer din_nyckel
{
"ordernummer": "A-42",
"telefon": "+46701234567"
}Och så ser ett svar ut som agenten kan arbeta med - en kort JSON som en enda mening kan sägas utifrån:
{
"status": "skickad",
"leverans": "i morgon förmiddag"
}Testa verktyget innan det sparas
Formuläret har knappen Testa: den skickar en riktig begäran med exempelvärden till den angivna adressen och visar status, svarstid och början av svaret. Inget sparas. Det lönar sig - en slutpunkt som svarar långsamt låter för uppringaren som tystnad i samtalet.
Begränsningar: högst 10 verktyg per konto, 10 parametrar och 5 rubriker per verktyg, svarstidsgräns på 5 till 30 sekunder (standard 20) - så länge väntar agenten på svar och säger under tiden en överbryggande mening så att uppringaren inte hör tystnad. Rubrikvärden visas bara maskerade (Bear***) - hela värdet kan inte läsas ut ur kontot.
Bekräftelsespärr för ett verktyg som skickar något
För ett verktyg med bieffekt (skickar sms, skapar ett ärende) slås bekräftelsespärren på med fältet requireConfirmation: true (POST och PATCH /v1/tools, i MCP create_tool och update_tool). volais egen röstmotor utför då verktyget bara när uppringarens senaste replik tydligt säger ja. Vid ett oklart svar (”Hallå”, ”Ja?”, ”Ja, men senare”) utförs verktyget inte, agenten får instruktionen att fråga igen och avslutandet av samtalet i samma varv skjuts upp. Standard är avstängt.
Gäller bara agenter på den egna motorn på tjeckiska eller slovakiska: motorn känner till bekräftelseord bara på de två språken (för en, de och pl skulle även ett tydligt ”Yes” blockeras), så fältet ignoreras för en agent på ett annat språk och ElevenLabs använder det inte. Ett verktyg tillhör kontot och delas av flera agenter, därför avvisas inte sparandet av språkskäl. Spärren läser bara den senaste repliken och känner inte till agentens fråga: den fångar ett oklart medgivande, inte varje ”Ja” som sägs som svar på en annan fråga. En ändring av verktyget når en agent som redan körs på motorn först vid agentens nästa sparande eller publicering - redigering av verktyget skriver inte över agenterna av sig självt. För en pågående kampanj beror det på tillvägagångssättet: ompublicering av ett testat utkast utan ändringar behåller märket ”testad”, uppgiften fortsätter, men nu med en spärr som testet inte täckte; direkt sparande av agenten (PATCH /v1/agents/{id}) upphäver märket och uppgiften stoppas med koden agent_version_changed. Slå därför på spärren utanför en pågående kampanj och testa kampanjen på nytt efteråt.
I portalen slås spärren på med reglaget Kräv uppringarens tydliga medgivande i verktygsredigeraren (/agent/nastroje). Detsamma gäller som beskrivs ovan; för en agent som redan körs på motorn når ändringen fram med knappen Publicera på agentens detaljsida.
5Koppling till en människa
Agenten kan lämna över samtalet till ett eget nummer när uppringaren ber om en människa eller stöter på något som agenten inte kan lösa. Det slås på på agentens detaljsida (fältet transferTo i API:et), och villkoret skrivs som en instruktion till modellen i transferCondition. Utan villkor sätts en standardmening in.
På volais egen röstmotor
På volais egen röstmotor sker kopplingen via en brygga: agenten säger att samtalet kopplas, uppringaren hör ringsignal och personen på det egna numret ser agentens nummer. När samtalet besvaras tystnar agenten och samtalet fortsätter mellan de två parterna via volai. Om någon av er lägger på avslutas samtalet för båda. Om samtalet inte besvaras inom 25 sekunder ber agenten uppringaren om ursäkt, erbjuder ett meddelande och fortsätter.
Två saker att veta i förväg
En sammanfattning av samtalet lämnas inte till människan. Uppringaren hör att samtalet kopplas, men operatören i andra änden svarar direkt till uppringaren - någon ”warm transfer” där agenten först sammanfattar ärendet klarar vi inte via telefonnätet. Räkna med det i instruktionerna: låt agenten säga till uppringaren att ärendet behöver upprepas.
En koppling är ett vanligt utgående samtal och debiteras så: 0,92 kr/min från svar till pålagt lur, utan agenttillägg (agenten är inte längre kvar på den delen). I samtalshistoriken känns det igen på typen transfer, och i detaljerna för det ursprungliga samtalet finns kortet Koppling med en länk till den delen. Den inkommande delen fortsätter och debiteras separat.
Standardplattformen (ElevenLabs)
På standardplattformen (ElevenLabs) fungerar kopplingen inte - operatören slutför inte SIP-kopplingen. När koppling slås på försöker volai direkt efter sparandet flytta agenten till den egna röstmotorn. Försöket kan vara pausat, motorn kan vara otillgänglig eller bytet kan misslyckas; kontrollera därför med det returnerade fältet provider att agenten verkligen körs på motorn. Så länge den ligger kvar på ElevenLabs fungerar inte kopplingen. Ett lyckat byte kan ändra agentens röst, motorns standardröst är Milena.
Koppling till ett eget volai-nummer går inte - samtalet skulle ringa tillbaka till sig självt tills saldot tar slut. Premiumlinjer (90x) är förbjudna av samma skäl.
En agent som använder nummer för samtal och sms kopplar bara till tjeckiska nummer (+420): samtal från det numret går bara till tjeckiska nummer, så ett kopplingsnummer utanför +420 sparas inte för en sådan agent och API:et returnerar destination_not_allowed.
6Vad som ska antecknas från samtalet
I stället för att läsa hela utskriften går det att ange exakt vad som önskas ur samtalet - namn, antal, om ärendet är brådskande. Agenten fyller i det efter samtalet och resultatet levereras som JSON.
Varje fält har en nyckel, en typ och en beskrivning. Högst tio fält per agent:
- Nyckel (
key) - små bokstäver utan diakritiska tecken, siffror och understreck, högst 40 tecken - måste börja med en liten bokstav. Under det namnet finns värdet i resultatet. - Typ (
type) -string,numberellerboolean. - Beskrivning (
description) - exakt vad modellen ska hämta ut, 5 till 500 tecken. Skriv även vad som ska göras om det inte nämns i samtalet. - Alternativ (
enumValues) - en valfri uppräkning, bara för textfält. Modellen väljer då bara bland de angivna värdena, så resultatet kan filtreras direkt. Högst 20 alternativ, vart och ett högst 60 tecken.
curl -X PATCH https://volai.cz/v1/agents/ag_kx91fa2b \
-H "Authorization: Bearer vk_DIN_NYCKEL" \
-H "Content-Type: application/json" \
-d '{
"dataFields": [
{"key": "namn", "type": "string", "description": "Uppringarens namn, som uppringaren själv sa. Lämna tomt om det inte nämndes."},
{"key": "antal_kaffe", "type": "number", "description": "Hur många koppar kaffe uppringaren beställde."},
{"key": "bradskande", "type": "string", "description": "Hur bråttom ärendet var.", "enumValues": ["lag", "normal", "hog"]}
]
}'Resultatet visas på tre ställen: på samtalets detaljsida i portalen som kortet ”Antecknade uppgifter”, i fältet data för samtalet (GET /v1/calls och GET /v1/calls/{id}) och i kroppen på webhooken call.completed.
{
"call": {
"id": "c_8f2ac1d4",
"status": "completed",
"hasRecording": true,
"data": {
"namn": "Anna Svensson",
"antal_kaffe": 2,
"bradskande": "normal"
}
}
}Värdet null betyder ”det nämndes inte i samtalet” - detsamma gäller när modellen svarar med tom text. Om agenten inte har några fält finns nyckeln data inte alls i svaret.
7Agentens mål och utvärdering
Målet är en enda mening om vad samtalet ska uppnå - ”boka tid för visning”, ”ta reda på om kunden är intresserad av erbjudandet”. Det fylls i i portalen i fältet ”Agentens mål” (när agenten skapas och när som helst senare i redigeringen), eller via REST API och MCP med fältet goal i POST/PATCH /v1/agents och create_agent/update_agent (högst 300 tecken).
Målet följer med agenten som kriterium för utvärdering av samtalet: när samtalet är slut läser modellen utskriften och avgör om målet var uppnått, inte uppnått eller om det inte går att avgöra utifrån samtalet. Resultatet visas för samtalet i portalen - på detaljsidan och i samtalslistan - och även i e-postmeddelandet efter samtalet, bredvid sammanfattningen.
Det är modellens uppskattning, inte ett faktum
Utvärderingen läser bara samtalets utskrift, inte vad som hände sedan (om kunden verkligen kom till mötet). En ärlig reservation: agentens mål (goal) kan sättas och läsas via REST API och MCP, men RESULTATET av utvärderingen för ett enskilt samtal finns bara i portalen och i e-postmeddelandet efter samtalet - GET /v1/calls och get_call returnerar det inte. Utvärderingen körs dessutom bara för agenter på volais nya röstmotor - vilken plattform en agent körs på framgår av fältet provider (GET /v1/agents, list_agents och agentens detaljsida i portalen); bytet sköter volai. Äldre agenter som ligger kvar på den ursprungliga plattformen får utvärdering först efter flytt till den här motorn.
Vad agenten vet (underlag)
Utöver instruktionerna kan agenten få underlag - öppettider, prislista, vanliga frågor. De fylls i i portalen i fältet ”Vad agenten vet” (avsnittet Avancerat), via API i fältet knowledge i POST/PATCH /v1/agents. Texten läggs till i slutet av prompten, får plats inom 20000 tecken och PATCH med tomt värde raderar den. Till skillnad från ett verktyg ändras underlaget inte under samtalet - det som förändras (orderstatus, lediga tider) hör hemma i ett verktyg, inte här.
8E-post efter samtalet
När ett samtal med agenten är slut skickar volai ett e-postmeddelande med en sammanfattning och en länk till samtalets detaljsida i portalen - samma sammanfattning som syns i API:et i fältet summary. Det skickas för agenter som körs på volais egen röstmotor (fältet provider: "engine"); en agent på ElevenLabs (provider: "elevenlabs") får det inte ännu.
Reglaget ”E-post efter varje samtal” finns på sidan Inställningar - när det stängs av stoppas det för hela kontot på en gång. För en enskild agent stängs det av separat med kryssrutan ”Skicka e-post efter varje samtal” på agentens detaljsida (fältet notifyEmail: false i API:et). Högst ett e-postmeddelande skickas per samtal, och ett samtal som det inte finns något att rapportera från (ingen sammanfattning, inga antecknade uppgifter och ingen avslutsorsak) utlöser inget e-postmeddelande.
9Inspelningar
Agentens samtal spelas in och kan spelas upp direkt på samtalets detaljsida i portalen - med klick i utskriften hoppar uppspelningen till rätt ställe. Inspelningen kan laddas ned eller spelas upp på annat håll från GET /v1/calls/{id}/recording (samma API-nyckel) - formatet avgörs av svarets rubrik content-type: för en agent på ElevenLabs audio/mpeg (MP3), för en agent på volais motor i dag audio/ogg. Om samtalet har en inspelning framgår av fältet hasRecording.
- De sparas i 90 dagar från samtalet, därefter raderas de. Utskrift och sammanfattning behålls, de raderas inte tillsammans med inspelningen. Efter nittio dagar returnerar slutpunkten
recording_expired. - Kan stängas av för varje agent separat - med reglaget på agentens detaljsida, i API:et med fältet
recordCalls: false. Ingen inspelning skapas för samtal som startar från och med den stunden; ett samtal som redan ringer eller pågår följer inställningen från den tidpunkt då det började (utgående från tidpunkten för uppringningen) och spelas därför ändå in. - Bara samtal med den inbyggda agenten spelas in. Direkt koppling av två nummer (bridge), relay och samtal via SIP spelas inte in.
Ansvaret för att informera uppringaren ligger hos kunden
Inspelning av ett samtal är behandling av personuppgifter. Agenten berättar det inte själv för uppringaren - vid behov slås alternativet ”Berätta för uppringaren att samtalet spelas in” på för agenten (recordingNotice: true i API:et) och volai lägger till en kort mening om inspelning efter agentens första mening. Det går lika bra att skriva det direkt i den första meningen. Att informationen motsvarar lagen i den egna situationen ansvarar kunden för som personuppgiftsansvarig.
Varje API-fel innehåller cause (vem som rättar det) och action (vad som ska göras) - se Felformat i REST API-referensen.
10Begränsningar
- Ett samtal varar högst 10 minuter (600 sekunder), därefter avslutar agenten det själv.
- Om uppringaren är tyst i 20 sekunder tolkar agenten det som slutet på samtalet och lägger på.
- Agentens svarstid är ungefär 1 sekund efter att uppringaren slutat tala - i verklig drift varierar den något med belastningen.
11Språk
Agenten kan tala fem språk - tjeckiska (standard), slovakiska, engelska, tyska och polska - språket ställs in på agentens detaljsida (fältet language i POST/PATCH /v1/agents, create_agent/update_agent) - en egen röst för varje språk (Cartesia) finns bara på volais egen röstmotor (se kapitlet Röster nedan), en agent på ElevenLabs talar det valda språket med rösten Anet.
12Testsamtal
Knappen ”Ring mig som test” på agentens detaljsida i portalen startar ett riktigt samtal från agenten till det nummer som anges - ett snabbt sätt att kontrollera hur agenten låter och hur den reagerar på systemprompten, utan att ringa manuellt till dess nummer.
Det debiteras som ett vanligt utgående samtal med agent, inklusive agenttillägget (se kapitlet Priser nedan) - ingen rabatt och ingen särskild taxa.
En agent på volais egen röstmotor klarar testsamtal även utan eget telefonnummer - då används volais delade linje, så den uppringda ser volais nummer på displayen, inte agentens. En agent på ElevenLabs utan eget nummer kan inte starta ett testsamtal förrän ett nummer har tilldelats.
Högst 3 testsamtalsförsök per dag och konto, över alla agenter - varje försök som verkligen ringdes räknas, även om ingen svarade; ett försök som misslyckades redan före uppringningen (otillräckligt saldo, upptagen linje) räknas inte mot gränsen. Vanliga samtal via POST /v1/calls har inte den här strängare gränsen.
13Röster
Valet av leverantör vid skapandet har tre tillstånd: useForOutboundTasks: true i POST /v1/agents eller create_agent väljer volais egen röstmotor, false startar på standardplattformen (ElevenLabs) även om koppling samtidigt ställs in, och ett utelämnat fält använder distributionens aktuella standardinställning, som beror på om motorn är påslagen och vilka språk som är tillåtna. Enbart cs eller sk garanterar inte motorn; när standardmotorn är avstängd skapas agenten på ElevenLabs. När ett uttryckligt false åsidosätter språkets standardmotor innehåller svaret vid skapandet varningen elevenlabs_by_explicit_choice; en agent enbart för inkommande samtal skapas därför utan fältet. När transferTo slås på för en agent på ElevenLabs försöker volai flytta den till motorn efter sparandet. Försöket kan vara pausat, otillgängligt eller misslyckas, så kontrollera alltid resultatet: i REST med ett efterföljande GET /v1/agents/{id}, i MCP i den returnerade agenten. Vilken plattform agenten använder framgår av fältet provider; så länge den ligger kvar på ElevenLabs fungerar inte kopplingen. Vid lyckat byte kan rösten ändras. Samma försök utlöses av en ändring av language för en agent på ElevenLabs från ett språk där nya agenter skapas på ElevenLabs (i dag en, de, pl) till ett språk där de skapas på motorn (cs, sk); agenten får då motorns standardröst för det nya språket (Milena, Katarina). En ändring mellan cs och sk flyttar ingenting. I övrigt växlar volai (support) mellan plattformarna. En agent på ElevenLabs accepterar bara katty eller ett rått ElevenLabs voice id; övriga röster i katalogen fungerar bara på motorn.
voiceId i create_agent/update_agent (och det likadant namngivna fältet i POST/PATCH /v1/agents) väljer agentens röst. Den ofiltrerade listan GET /v1/voices (MCP list_voices utan argumentet provider) visar inte ElevenLabs-rösten katty - REST returnerar den först med ?provider=elevenlabs, MCP med argumentet provider: "elevenlabs". Cartesia-rösterna (Milena, Jan och röster på andra språk) är till för agenter på volais egen motor, Katty för agenter på ElevenLabs (vilken plattform en agent körs på behandlas i anmärkningen ovan). Den äldre rösten anet finns kvar bara för agenter som redan har den - ElevenLabs tilldelar den inte längre till nya agenter från och med 12. 9. 2026 och volai avvisar en sådan begäran med en förklaring. Vid skapande med uttryckligt useForOutboundTasks: true ersätts en känd röst som motorn inte stöder, inklusive katty, med motorns standardröst för det valda språket; om motorn väljs först av standardinställningen när fältet utelämnats avvisas samma inkompatibla röst. Ett rått ElevenLabs-id avvisas alltid av motorn. Utan voiceId får agenten sin leverantörs standardröst - för motorn Milena, för ElevenLabs mallens röst (Katty).
Katalogen erbjuder för varje språk minst en kvinnlig och en manlig röst (för tjeckiska i dag fyra): cs: Milena, Jan, Tereza, Marek; sk: Katarina, Peter; en: Skylar, Daniel; de: Alina, Lukas; pl: Ewa, Kacper; nl: Ariel, Alexander; pt: Christine, Filipe; sl: Sarah, Daniel; ro: Mikidutza, Oliver; da: Isabella, Søren; et: Alice, Chris; lv: Matilda, George; bg: Yoana, Peter K; fi: Soili, Jussi; el: Crhysa, Iordanis; fr: Natasha, Max; it: Rossana, Marco; hu: Zsófia, Gábor; lt: Sarah, Daniel; sv: Sanna, Filip; hr: Ivana, Davor. Portalen visar bara rösterna för agentens valda språk - de växlar tillsammans (se kapitlet Språk ovan).
Alla röster i tabellen tillhör volais egen röstmotor. För en agent på ElevenLabs avvisar API:et dem med felet 400 - den tar från katalogen bara katty (dold i den ofiltrerade listan) och ett rått ElevenLabs voice id.
| id | Beskrivning | Förhandslyssning |
|---|---|---|
| milena | Milena - The default volai voice - calm and natural, a good fit for most agents. | |
| jan | Jan - The male counterpart to Milena - matter-of-fact, easy-to-follow delivery. | |
| tereza | Tereza - The second female voice - professional, well-structured delivery. | |
| marek | Marek - The second male voice - calm, resonant delivery for longer calls. | |
| katarina | Katarina - Slovak female voice - calm, natural delivery. | |
| peter | Peter - Slovak male voice - matter-of-fact, easy-to-follow delivery. | |
| skylar | Skylar - English female voice - calm, friendly delivery. | |
| daniel | Daniel - English male voice - matter-of-fact, confident delivery. | |
| alina | Alina - German female voice - calm, warm delivery. | |
| lukas | Lukas - German male voice - matter-of-fact, easy-to-follow delivery. | |
| ewa | Ewa - Polish female voice - calm, natural delivery. | |
| kacper | Kacper - Polish male voice - matter-of-fact, confident delivery. | |
| ariel | Ariel - Dutch female voice - natural conversational delivery. | |
| alexander | Alexander - Dutch male voice - warm, natural delivery. | |
| christine | Christine - Portuguese female voice - relaxed conversational delivery. | |
| filipe | Filipe - Portuguese male voice - natural, expressive delivery. | |
| mikidutza | Mikidutza - Romanian female voice - clear, friendly delivery. | |
| oliver | Oliver - Romanian male voice - matter-of-fact, clear delivery. | |
| isabella | Isabella - Danish female voice - warm, calm delivery. | |
| soren | Søren - Danish male voice - clear, confident delivery. | |
| yoana | Yoana - Bulgarian female voice - fresh, engaging delivery. | |
| peterk | Peter K - Bulgarian male voice - warm, smooth delivery. | |
| soili | Soili - Finnish female voice - neutral, light delivery. | |
| jussi | Jussi - Finnish male voice - strong, lively delivery. | |
| crhysa | Crhysa - Greek female voice - professional, lively delivery. | |
| iordanis | Iordanis - Greek male voice - natural conversational delivery. | |
| natasha | Natasha - French female voice - soft, conversational delivery. | |
| max | Max - French male voice - charismatic, friendly delivery. | |
| rossana | Rossana - Italian female voice - warm conversational delivery. | |
| marco | Marco - Italian male voice - charismatic, friendly delivery. | |
| zsofia | Zsófia - Hungarian female voice - soft, inviting delivery. | |
| gabor | Gábor - Hungarian male voice - warm, natural, confident delivery. | |
| sanna | Sanna - Swedish female voice - direct, natural delivery. | |
| filip | Filip - Swedish male voice - energetic, expressive delivery. | |
| ivana-hr | Ivana - Croatian female voice - lively, friendly delivery. | |
| davor | Davor - Croatian male voice - natural conversational delivery. | |
| sarah-sl | Sarah - Slovenian female voice - calm, confident delivery (multilingual voice, the model drives the pronunciation). | |
| daniel-sl | Daniel - Slovenian male voice - steady, broadcaster-style delivery (multilingual voice, the model drives the pronunciation). | |
| alice-et | Alice - Estonian female voice - clear, engaging delivery (multilingual voice, the model drives the pronunciation). | |
| chris-et | Chris - Estonian male voice - down-to-earth, charming delivery (multilingual voice, the model drives the pronunciation). | |
| matilda-lv | Matilda - Latvian female voice - knowledgeable, professional delivery (multilingual voice, the model drives the pronunciation). | |
| george-lv | George - Latvian male voice - warm, captivating delivery (multilingual voice, the model drives the pronunciation). | |
| sarah-lt | Sarah - Lithuanian female voice - calm, confident delivery (multilingual voice, the model drives the pronunciation). | |
| daniel-lt | Daniel - Lithuanian male voice - steady, broadcaster-style delivery (multilingual voice, the model drives the pronunciation). |
voiceId accepterar även ett rått ElevenLabs-id, men bara för en agent på standardplattformen (provider: "elevenlabs"). För en agent på motorn används ett röst-id från katalogen. Ett okänt värde, eller ett som inte är kompatibelt med leverantören, ger ett fel som räknar upp de giltiga alternativen.
14Statistik
Agentens detaljsida i portalen visar antalet besvarade samtal, deras genomsnittliga och längsta längd och antalet under de senaste 30 dagarna - något eget API för detta finns inte, men siffrorna går att räkna fram själv ur utdata från GET /v1/calls.
15Priser
Röstagenten debiteras utöver samtalspriset, per sekund - ingen avrundning till hela minuter. Taxorna är exkl. moms, som hela prislistan.
| Riktning | Samtal | Agent | Totalt |
|---|---|---|---|
| Utgående | 0,92 kr/min (≈ 0,42 SEK) | 2,50 kr/min (≈ 1,14 SEK) | 3,42 kr/min (≈ 1,55 SEK) |
| Inkommande | 0,50 kr/min (≈ 0,23 SEK) | 2,50 kr/min (≈ 1,14 SEK) | 3,00 kr/min (≈ 1,36 SEK) |
En detaljerad prislista med exempel finns på sidan Priser.
Föredras ElevenLabs, Vapi eller en annan plattform? Utan agenttillägg går det via en egen agent - se Egen agent.
16Utskrifter och webhook
När samtalet är slut hämtas utskrift och sammanfattning via GET /v1/calls/{id} (fälten transcript och summary) - eller så skickar volai dem själv till den egna URL:en som en händelse av typen call.completed, så snart de är klara. Utskriftens format, verifiering av signaturen och beteendet vid fel beskrivs på sidan Webhooks.
Ingen lust att vänta på en webhook eller polla API:et? I portalen har varje agent på detaljsidan också en översikt över de senaste samtalen med utskriften att läsa direkt.
17volais röstmotor
En del agenter körs i dag på volais egen röstmotor i stället för på ElevenLabs. Bytet ändrar hur samtalet dirigeras och hela agentens konfiguration följer med - instruktioner, första mening, insamlingsfält, samtalsmål, kunskap, verktyg och koppling till en människa. Det här ändras och det här ändras inte:
- Röster en agent som hade en vald ElevenLabs-röst (Katty, eller den äldre Anet) får efter bytet motorns standardröst för sitt språk - för tjeckiska Milena. Motorn erbjuder inte ElevenLabs-rösten som sin huvudröst, ElevenLabs finns där bara kvar som reserv vid ett Cartesia-avbrott. I agentens inställningar kan sedan vilken annan röst som helst ur katalogen för agentens språk väljas, för tjeckiska till exempel Jan. En röst som agenten redan har från motorns katalog ändras inte av bytet.
- Svarstid förblir densamma som hos ElevenLabs - omkring 1 sekund efter att uppringaren slutat tala.
- Inspelningar oförändrat - de sparas fortfarande i 90 dagar och kan stängas av på samma sätt på agentens detaljsida.
- Information om inspelning oförändrat - om meningen om inspelning (`recordingNotice`) är påslagen för agenten lägger volai även här till en kort mening om att samtalet spelas in efter agentens första mening (se avsnittet Inspelningar ovan). Utan det alternativet, eller med inspelning avstängd, läggs ingen mening till alls.
- Upplysning om att en AI talar oförändrat - den första meningen skickas till leverantören precis som den skrevs. Den framtvingas inte: när en upplysning om att uppringaren talar med en digital assistent saknas görs bara en påpekning (den europeiska AI-förordningen, art. 50), sparandet stoppas inte. Ansvaret för upplysningen ligger hos kunden hos båda leverantörerna.
- Verktyg och koppling av samtal följer med agenten - ett lyckat byte skickar även dess verktyg och den inställda kopplingen till en människa till motorn, de behöver inte anges på nytt. På volais egen röstmotor fungerar kopplingen via en brygga (som kapitlet Koppling till en människa ovan beskriver) - bryggan är verifierad i löpande drift och portalen visar för en agent på motorn det fullständiga kopplingsformuläret. För en agent på standardplattformen (ElevenLabs) utlöser påslagen koppling direkt efter sparandet ett försök att flytta den till den egna motorn; kontrollera resultatet i fältet `provider`, eftersom agenten vid paus, otillgänglig motor eller fel kan ligga kvar på ElevenLabs och kopplingen där inte fungerar. Ett lyckat byte kan ändra rösten till motorns standardröst. Den samlade flytten av nummer i omgångar hoppar därför över agenter med inställd koppling.
- Röstbrevlåda vid utgående samtal kan bara kännas igen av volais egen röstmotor - inom några sekunder efter svar upptäcker den en telefonsvarare i stället för en människa och, beroende på inställningen, bara markerar den, lägger på eller väntar på signalen och läser upp ett meddelande. Det ställs in på agentens detaljsida (bara för agenter på motorn), i API och MCP med fältet `voicemail`. Samtalslistan visar för ett utgående samtal som besvarats av en brevlåda "Brevlådan svarade" i stället för det vanliga utfallet. Standardplattformen (ElevenLabs) saknar detektering.
- Påminnelse vid tystnad spelas bara upp av volais egen röstmotor - när uppringaren är tyst länge frågar agenten en gång om uppringaren fortfarande är kvar. Inställningen (på/av, antal sekunder 3 till 25) sparas hos båda leverantörerna - för en agent på standardplattformen (ElevenLabs) är fältet nedtonat på agentens detaljsida och värdet börjar gälla först efter bytet till motorn. En egen text för frågan (`silencePromptText`, högst 80 tecken, i stället för standardtexten "Är du kvar?") sparas på samma sätt.
- Skydd av första meningen kan bara volais egen röstmotor och bara vid utgående samtal: så länge den första meningen spelas (angivet antal sekunder, 0 till 20) avbryts den inte av en kort reaktion från den som svarade ("Hallå?", "Ja?"). En replik från den uppringda utan avbrytande ord (stopp, nej, moment, nog, vänta) kastas i det skyddade fönstret: den avbryter inte meningen, finns inte med i utskriften och agenten reagerar inte på den, medan meningen med ett avbrytande ord alltid avbryts. Fältet `firstMessageProtectSecs` sparas utan påtvingat standardvärde hos båda leverantörerna - för en agent på standardplattformen (ElevenLabs) är det nedtonat på agentens detaljsida och börjar gälla först efter bytet till motorn. I samtalsutskriften bär sedan agentens replik som uppringaren avbröt flaggan `interrupted`.
- Agentens skratt bara volais egen röstmotor kan reagera med skratt när uppringaren eller någon annan skrattar eller skojar i samtalet - och bara med en tjeckisk Cartesia-röst (Milena, Jan och andra ur katalogen). Standardplattformen (ElevenLabs) kan inte skratta alls, även om fältet ställs in. I agentens inställningar väljs Automatiskt (motorn stänger själv av skrattet vid känsliga ämnen, till exempel skulder, hälso- och sjukvård, myndigheter eller begravningsbyråer), På (åsidosätter den här detekteringen) eller Av. Ändringen gäller från nästa samtal.
18Kalender och tider
En agent på volais egen röstmotor kan direkt i samtalet ta reda på en ledig tid i den egna Google- eller Apple-kalendern och boka in mötet på en gång - den säger till uppringaren om tiden är ledig, erbjuder de närmaste lediga tiderna och skriver in mötet efter bekräftat namn. Det slås på i agentredigeraren på fliken Kalender: anslutningen (Data och integrationer), den aktuella kalendern och tillgänglighetsreglerna väljs.
- Tillgänglighetsregler fönster per veckodag (när agenten alls erbjuder tider), mötets längd, marginal mellan tider, minsta framförhållning före den avtalade tiden och en horisont för hur långt fram agenten söker. Standardvärden fylls i av redigeraren själv, men de kan justeras för varje agent separat.
- Inbyggda verktyg kalendern använder två inbyggda verktyg, check_availability och book_appointment - till skillnad från egna verktyg från kapitlet Verktyg ovan skapas de inte manuellt, de slås på tillsammans med kalendern och räknas inte mot gränsen för verktyg per konto.
- Bara volais egen motor fungerar uteslutande för en agent på volais egen röstmotor. När kalendern slås på för en agent på standardplattformen (ElevenLabs) sparas inställningen och agenten försöker direkt efter sparandet byta till volais motor - på samma sätt som vid koppling till en människa.
- Vad agenten säger och inte säger agenten läser aldrig upp vad som står i kalendern - bara om en viss tid är ledig. Uppringarens telefonnummer skrivs in i händelsen bara om agenten känner till det (ett dolt nummer ger en händelse utan telefonnummer).
- Även utanför samtal samma sökning efter lediga tider och bokning av möte går även utanför samtal via REST (POST /v1/integrations/{id}/availability, POST /v1/integrations/{id}/events) och MCP (find_free_slots, create_calendar_event) - detaljer finns i avsnittet Kalendrar i REST API-referensen och i MCP-referensen.
Relaterat
MCP server
Connect Claude Code, Codex CLI, Codex desktop, Cursor and other AI editors.
REST API
Complete reference for every endpoint: numbers, calls, SMS, mobile numbers for SMS, agents and their drafts, tools, recordings, webhooks, do-not-call list, relay, account, tasks, credit, documents, calendars and integrations.
Webhooks
Events, structured data in the body, signature verification, retries on failure.
Bring your own agent
Connect a third-party platform (ElevenLabs, Asterisk...) - no agent surcharge.