Vejledninger
Stemmeagent
En agent er kun så god som sin systemprompt. Her vises det, hvordan en prompt skrives, med tre færdige eksempler til at kopiere og en oversigt over de begrænsninger, der skal planlægges efter.
Assistentens nummer
En agent tager imod og foretager opkald fra det nummer, der tildeles den på agentens detaljeside (i API'et feltet numberE164). Et stemmenummer modtager og foretager opkald, men ikke SMS. Hvis assistenten skal have et nummer, som man både kan ringe til og skrive til, og som den selv ringer og sender SMS fra, bestilles nummer til opkald og sms: et prag-fastnetnummer, som efter registrering hos operatøren (normalt inden for 1 hverdag, senest efter 48 timer) besvares af en agent på volais egen stemmemotor. Opkald fra nummeret går kun til tjekkiske numre (+420), og dets SMS har ingen leveringskvitteringer. Detaljerne findes i API-referencen under Nummer til opkald og sms.
1Opbygning af systemPrompt
En god prompt har fire dele. Mangler en af dem, kører agenten før eller siden fast og ved ikke, hvad den skal gøre - den bliver enten tavs eller finder på noget.
- Hvem jeg er - en eller to sætninger: firmanavn, rolle, tone. Agenten skal slå denne identitet fast allerede i sin allerførste replik.
- Hvad jeg kan - de konkrete opgaver, agenten faktisk løser (bestillinger, aftaler, oplysninger) - ikke et uklart »jeg kan hjælpe med alt«.
- Hvad jeg ALDRIG gør - grænserne: hvad agenten aldrig må finde på, love eller afsløre. Denne del springes oftest over, og netop den adskiller en agent, der opfinder priser, fra en, der ærligt siger »det ved jeg ikke, ring til ...«.
- Sådan afsluttes samtalen - hvornår og hvordan samtalen afsluttes (opsummering, farvel), og hvad der skal ske, når den, der ringer, vil have noget uden for agentens område.
Længere instruktioner gør svaret langsommere med cirka en tiendedel sekund for hver to tusind tegn - agenteditoren advarer fra 3000 tegn. Den faste grænse er 6000 tegn.
Tre komplette eksempler - kopiér dem og tilpas dem til det aktuelle behov:
Receptionist i en café
Du er den talende receptionist i caféen Nula Cafe på Vinohrady. Du taler
roligt, venligt og kort - som en erfaren medarbejder ville gøre, ikke som en robot.
DET KAN DU
- Tage imod bestillinger til afhentning (kaffe, te, croissanter, sandwiches).
- Oplyse de aktuelle åbningstider: mandag til fredag kl. 8-18,
i weekenden kl. 9-15.
- Når bestillingen er færdig, gentage den i sin helhed og bekræfte
afhentningstidspunktet (tidligst om 15 minutter).
DET GØR DU ALDRIG
- Finde på priser eller varer, som ikke står på menuen - sig, at
personalet bekræfter den præcise pris på stedet.
- Love levering, caféen leverer ikke ud.
- Foregive at være et menneske, hvis den, der ringer, spørger direkte - sig,
at du er caféens stemmeassistent.
SÅDAN AFSLUTTER DU SAMTALEN
Opsummér bestillingen og afhentningstidspunktet, ønsk en god dag, og afslut
opkaldet. Hvis den, der ringer, vil have noget, du ikke kan klare (klager,
catering), så bed vedkommende ringe igen i åbningstiden og tale direkte med
ejeren.Tilfredshedsundersøgelse
Du ringer på vegne af webshoppen Botanika for at stille et kort
tilfredshedsspørgsmål efter en nylig bestilling. Du er høflig, kommer
direkte til sagen og trækker ikke samtalen i langdrag.
DET KAN DU
- Spørge, om kunden har et øjeblik til tre hurtige spørgsmål.
- Spørgsmål 1: hvor tilfreds er kunden med bestillingen på en skala
fra 1 til 5.
- Spørgsmål 2: kom pakken til tiden?
- Spørgsmål 3: er der noget, vi kunne gøre bedre?
- Huske svarene og opsummere dem kort til sidst i samtalen.
DET GØR DU ALDRIG
- Presse en kunde, der afviser eller siger, at vedkommende ikke har tid -
afslut samtalen høfligt med det samme.
- Behandle klager eller returneringer - det hører hjemme på kundeservicelinjen,
som du gerne må læse op, hvis kunden beder om det.
- Tilbyde rabatter eller kuponer, det har du ikke beføjelse til.
SÅDAN AFSLUTTER DU SAMTALEN
Tak for tiden og tilbagemeldingen, og ønsk en god dag. Hvis kunden på noget
tidspunkt siger, at vedkommende ikke vil fortsætte, så afslut samtalen
høfligt med det samme uden flere spørgsmål.Reception / portvagt
Du er den talende portvagt i Nordwex, en kontorbygning på
Pankrác. Bude, besøgende og leverandører ringer til dette nummer.
DET KAN DU
- Finde ud af, hvem der ringer, og hvorfor (et bud med en pakke, en gæst
til et møde, en leverandør).
- Tage navn og kontaktperson fra en gæst og bede vedkommende melde sig
i receptionen i stueetagen og vente, til nogen henter vedkommende.
- Bede et bud efterlade pakken i receptionen og skrive firmanavn og
modtager på den.
- Tage en kort besked, når den person, der ringes til, ikke kan træffes lige nu.
DET GØR DU ALDRIG
- Give medarbejdernes private mobilnumre ud - tilbyd i stedet at
stille om til receptionen eller tage en besked.
- Lade nogen gå »op alene« - alle gæster går gennem receptionen.
- Oplyse, hvem der er i bygningen lige nu, eller hvornår - sig, at
man må spørge receptionen.
SÅDAN AFSLUTTER DU SAMTALEN
Gentag, hvad der er aftalt (besked, ventetid i receptionen, viderestilling),
ønsk en god dag, og afslut opkaldet.2Skabeloner til brancher
Ingen lyst til at skrive en prompt fra bunden? På hjemmesiden findes færdige skabeloner til seks brancher (tandlægeklinik, autoværksted, restaurant, webshop, ejendomsmægler, håndværkere) - en komplet systemprompt, en eksempeldialog og et eksempel på, hvad en sådan receptionist ville koste. Kopiér og tilpas, ligesom eksemplerne ovenfor.
3firstMessage
firstMessage er den første sætning, kunden hører - lige efter at vedkommende har taget telefonen ved et indgående opkald, eller lige efter at den, der ringes op, har svaret ved et udgående.
- Kort, talt dansk - sådan som et menneske ville sige det, ikke sådan som man ville skrive en e-mail.
- Sig med det samme, hvem eller hvad der ringer eller svarer - kunden skal vide, hvem vedkommende taler med, inden for tre sekunder.
- Afslut med et åbent spørgsmål (»hvad kan jeg hjælpe med«, »har du et øjeblik«) - ikke en lang monolog.
- Læs den højt - tekst, der ser fin ud på skrift, kan lyde kluntet, når den siges.
- Ved udgående opkald præsenteres afsenderen og grunden til opkaldet lige fra starten - folk er forsigtige med at tage telefonen fra ukendte numre.
4Værktøjer
Et værktøj er adressen på et API, som agenten kalder midt i en samtale, og hvis svar bruges med det samme i talen. Uden værktøj kan agenten kun tale; med et kan den kontrollere en ordre, finde en ledig tid eller registrere en reservation.
Værktøjer oprettes i portalen på /agent/nastroje (eller via POST /v1/tools) og slås derefter til for en agent med et afkrydsningsfelt på dens detaljeside (i API'et feltet toolIds). Et værktøj tilhører kontoen, ikke agenten - samme værktøj kan derfor bruges af flere agenter. Der angives fire ting for det:
- Navn - et læsbart navn ("Kontrollér ordre"). Det navn, modellen ser, udledes automatisk heraf (
overit_objednavku) og vises under feltet. - Hvornår agenten skal bruge det - det eneste, modellen overhovedet bygger sin beslutning om at kalde værktøjet på. Skriv det som en instruktion: "Brug det, når den, der ringer, spørger, hvor ordren er."
- Adresse og metode - kun
https, offentligt tilgængelig.GETsender parametre i forespørgselsstrengen,POSTi JSON-brødteksten. Dertil headere, typiskAuthorization. - Parametre - for hver enkelt angives, hvor værdien kommer fra: modellen henter den fra samtalen, nummeret på den, der ringer, eller det opringede nummer udfyldes automatisk, eller det er en fast værdi.
Sådan ser den forespørgsel ud, der under samtalen ankommer til endpointet:
POST https://api.yourapp.com/orders
Content-Type: application/json
Authorization: Bearer your_key
{
"order_number": "A-42",
"phone": "+420777123456"
}Og her er det svar, agenten kan arbejde med - en kort JSON-nyttelast, som den kan omsætte til én enkelt sætning:
{
"status": "shipped",
"delivery": "tomorrow morning"
}Prøv værktøjet, før det gemmes
Formularen har en knap Prøv det: den sender en rigtig forespørgsel til den angivne adresse med eksempelværdier og viser status, svartid og begyndelsen af svaret. Intet gemmes undervejs. Det er umagen værd - et endpoint, der svarer langsomt, høres af den, der ringer, som stilhed under samtalen.
Begrænsninger: højst 10 værktøjer pr. konto, 10 parametre og 5 headere pr. værktøj, timeout for svar på 5 til 30 sekunder (standard 20) - så længe venter agenten, og imens siger den en overbrygningssætning, så den, der ringer, ikke hører stilhed. Headerværdier vises kun maskeret (Bear***) - den fulde værdi kan ikke læses tilbage fra kontoen.
Bekræftelsesport for et værktøj, der sender noget
For et værktøj med en bivirkning (det sender en SMS, opretter en henvendelse) slås bekræftelsesporten til med feltet requireConfirmation: true (POST og PATCH /v1/tools, i MCP create_tool og update_tool). Volais stemmemotor kører så kun værktøjet, når den sidste replik fra den, der ringer, klart er et ja. Ved en uklar replik ('Hallo?', 'Ja?', 'Ja, men senere') kører værktøjet ikke, agenten får besked på at spørge igen, og et forsøg på at afslutte samtalen i samme runde holdes tilbage. Funktionen er slået fra som standard.
Den gælder kun for en agent på volais egen motor på tjekkisk eller slovakisk: motoren kender kun samtykkeord på de to sprog (for en, de og pl ville den blokere selv et tydeligt 'Ja'), så feltet ignoreres for en agent på et andet sprog, og ElevenLabs bruger det ikke. Et værktøj tilhører kontoen og deles af flere agenter, så det afvises aldrig ved gemning på grund af sprog. Porten læser kun den sidste replik fra den, der ringer, og kender ikke agentens spørgsmål: den fanger uklart samtykke, ikke ethvert 'Ja', der siges som svar på et andet spørgsmål. En ændring af et værktøj når en agent, der allerede kører på motoren, først når agenten næste gang gemmes eller udgives - redigering af et værktøj omskriver aldrig agenter af sig selv. For en igangværende kampagne har vejen betydning: genudgives den testede kladde uændret, bevares testmærket, så opgaven fortsætter, nu med en port, som testen ikke dækkede; en direkte gemning af agenten (PATCH /v1/agents/{id}) fjerner testmærket og stopper opgaven med agent_version_changed. Planlæg at slå porten til uden for en igangværende kampagne, og test derefter kampagnen igen.
I portalen slås porten til med Kræv den opringendes klare samtykke i værktøjseditoren (/agent/nastroje). Det samme gælder som beskrevet ovenfor; for en agent, der allerede kører på motoren, når ændringen frem via knappen Udgiv på agentens detaljeside.
5Viderestilling til et menneske
Agenten kan stille opkaldet videre til et nummer, når den, der ringer, beder om et menneske eller støder på noget, agenten ikke kan løse. Funktionen slås til på agentens detaljeside (feltet transferTo i API'et); betingelsen skrives som en instruktion til modellen i transferCondition. Uden en betingelse bruges en standardsætning.
På volais egen stemmemotor
På volais egen stemmemotor sker viderestillingen som en bro: agenten siger, at den stiller om, den, der ringer, hører en ringetone, og mennesket på det angivne nummer ser agentens nummer. Når opkaldet tages, bliver agenten tavs, og samtalen fortsætter mellem de to parter via volai. Lægger en af dem på, afsluttes opkaldet for begge. Hvis opkaldet ikke besvares inden for 25 sekunder, beklager agenten over for den, der ringer, tilbyder at tage en besked og fortsætter.
To ting, der er værd at vide på forhånd
Der sendes intet resumé af opkaldet videre til mennesket. Den, der ringer, hører, at vedkommende stilles videre, men personen i den anden ende overtager den, der ringer, direkte - der findes ingen "varm viderestilling", hvor agenten først orienterer mennesket; telefonnettet understøtter det ikke. Det skal der tages højde for i instruktionerne: lad agenten sige til den, der ringer, at vedkommende muligvis må gentage sig selv.
En viderestilling er et almindeligt udgående opkald og afregnes som et: 0.92 CZK/min fra besvarelse til opkaldet lægges på, uden agenttillæg (agenten er ikke længere med på dette led). Det kan ses i opkaldshistorikken på typen transfer, og det oprindelige opkalds detaljeside har et kort Viderestilling med link til dette led. Det indgående led kører videre og afregnes særskilt.
Standardplatformen (ElevenLabs)
På standardplatformen (ElevenLabs) virker viderestilling ikke - SIP-operatøren gennemfører den aldrig. Efter at viderestilling er slået til, forsøger volai at flytte agenten til sin egen stemmemotor lige efter gemning. Forsøget kan være sat på pause, motoren kan være utilgængelig, eller skiftet kan mislykkes; kontrollér det returnerede felt provider for at se, om agenten faktisk kører på motoren. Viderestilling virker ikke, så længe agenten bliver på ElevenLabs. Et vellykket skift kan ændre agentens stemme; motorens standardstemme er Milena.
Der kan ikke stilles videre til et eget volai-nummer - opkaldet ville løbe i ring, til kreditten var brugt op. Betalingsnumre (90x) er forbudt af samme grund.
En agent, der bruger nummer til opkald og sms, stiller kun videre til tjekkiske numre (+420): opkald fra dette nummer går kun til tjekkiske numre, så et viderestillingsnummer uden for +420 gemmes ikke for en sådan agent, og API'et returnerer destination_not_allowed.
6Data indsamlet fra opkald
I stedet for at læse hele udskriften kan det angives præcist, hvad der ønskes ud af et opkald - et navn, et antal varer, om det haster. Agenten udfylder det efter opkaldet, og resultatet returneres som JSON.
Hvert felt har en nøgle, en type og en beskrivelse. Op til ti felter pr. agent:
- Nøgle (
key) - små bogstaver, cifre og understregninger, højst 40 tegn - skal begynde med et lille bogstav. Værdien findes under dette navn i resultatet. - Type (
type) -string,numberellerboolean. - Beskrivelse (
description) - præcis hvad modellen skal udtrække, 5 til 500 tegn. Angiv også, hvad den skal gøre, når opkaldet ikke nævner det. - Valgmuligheder (
enumValues) - en valgfri liste, kun for tekstfelter. Modellen vælger så kun blandt de tilbudte værdier, så resultatet kan filtreres direkte. Højst 20 valgmuligheder på hver højst 60 tegn.
curl -X PATCH https://volai.eu/v1/agents/ag_kx91fa2b \
-H "Authorization: Bearer vk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"dataFields": [
{"key": "name", "type": "string", "description": "Opkalderens navn, som vedkommende selv oplyste det. Lad feltet være tomt, hvis det ikke blev nævnt."},
{"key": "coffee_count", "type": "number", "description": "Hvor mange kaffer opkalderen bestilte."},
{"key": "urgency", "type": "string", "description": "Hvor hastende henvendelsen var.", "enumValues": ["low", "normal", "high"]}
]
}'Resultatet vises tre steder: på opkaldets detaljeside i portalen som kortet "Indsamlede data", i feltet data på opkaldet (både GET /v1/calls og GET /v1/calls/{id}) og i brødteksten af webhooken call.completed.
{
"call": {
"id": "c_8f2ac1d4",
"status": "completed",
"hasRecording": true,
"data": {
"name": "Anders Jensen",
"coffee_count": 2,
"urgency": "normal"
}
}
}En værdi null betyder »ikke nævnt i opkaldet« - det samme gælder, hvis modellen returnerer en tom streng. Hvis en agent ingen felter har konfigureret, er nøglen data slet ikke med i svaret.
7Agentens mål og vurdering
Et mål er én sætning, der beskriver, hvad opkaldet skal opnå - »book en fremvisning«, »find ud af, om kunden er interesseret i tilbuddet«. Det udfyldes i feltet »Agentens mål« i portalen (når agenten oprettes, eller når som helst senere ved redigering) eller via REST API og MCP med feltet goal på POST/PATCH /v1/agents og create_agent/update_agent (op til 300 tegn).
Målet gives til agenten som kriterium for vurdering af opkaldet: når opkaldet er slut, læser en model udskriften op imod det og afgør, om målet blev nået, ikke nået eller ikke kan afgøres ud fra opkaldet. Resultatet ses på opkaldet i portalen - på opkaldets detaljeside og i opkaldslisten - og også i e-mailen efter opkaldet ved siden af resuméet.
Det er en models skøn, ikke et faktum
Vurderingen læser kun opkaldets udskrift, ikke hvad der skete bagefter (om kunden faktisk mødte op). Et ærligt forbehold: agentens mål (goal) kan sættes og læses via REST API og MCP, men vurderingens RESULTAT for et bestemt opkald bliver i portalen og i e-mailen efter opkaldet - GET /v1/calls og get_call returnerer det ikke. Vurderingen kører desuden kun for agenter på volais nye stemmemotor - hvilken platform en agent kører på, fremgår af feltet provider (GET /v1/agents, list_agents og agentens detaljeside i portalen); volai tager sig af skiftet. Ældre agenter, der bliver på den oprindelige platform, får den først efter flytningen til denne motor.
Hvad agenten ved (baggrundsmateriale)
Ud over instruktionerne kan agenten få baggrundsmateriale - åbningstider, en prisliste, en FAQ. Det udfyldes i feltet »Hvad agenten ved« i portalen (afsnittet Avanceret) eller i feltet knowledge på POST/PATCH /v1/agents. Teksten føjes til slutningen af prompten, kan fylde op til 20000 tegn, og en PATCH med en tom værdi sletter den. I modsætning til et værktøj ændrer dette materiale sig aldrig under et opkald - alt, der ændrer sig (ordrestatus, ledige tider), hører hjemme i et værktøj, ikke her.
8E-mail efter opkaldet
Når et opkald med agenten er slut, sender volai en e-mail med resuméet og et link til opkaldets detaljer i portalen - det samme resumé, som API'et viser i feltet summary. Den sendes for agenter, der kører på volais egen stemmemotor (provider: "engine"); en agent på ElevenLabs (provider: "elevenlabs") får den endnu ikke.
Kontakten »E-mail efter hvert opkald« findes på siden Indstillinger - slås den fra, stopper e-mailen for hele kontoen på én gang. For at stoppe den for en enkelt agent bruges afkrydsningsfeltet »Send mig en e-mail efter hvert opkald« på agentens detaljeside (feltet notifyEmail: false i API'et). Der sendes højst én e-mail pr. opkald, og et opkald uden noget at rapportere (intet resumé, ingen indsamlede data og ingen afslutningsårsag) udløser ingen.
9Optagelser
Agentopkald optages og kan afspilles direkte fra opkaldets detaljeside i portalen - et klik i udskriften springer til det tilsvarende sted i optagelsen. For at hente eller afspille den andre steder bruges GET /v1/calls/{id}/recording (samme API-nøgle) - formatet følger svarets header content-type: audio/mpeg (MP3) for en agent på ElevenLabs, i dag audio/ogg for en agent på volais motor. Feltet hasRecording viser, om et opkald har en optagelse.
- De gemmes i 90 dage efter opkaldet og slettes derefter. Udskrift og resumé gemmes separat og slettes ikke sammen med optagelsen. Efter halvfems dage returnerer endpointet
recording_expired. - Det kan slås fra pr. agent med en kontakt på agentens detaljeside eller feltet
recordCalls: falsei API'et. Der optages ikke for opkald, der startes fra det tidspunkt; et opkald, der allerede ringer eller er i gang, følger indstillingen fra det øjeblik, det startede (et udgående opkald fra det øjeblik, det blev ringet op), så det optages stadig. - Kun opkald, der håndteres af den indbyggede agent, optages. En direkte bro mellem to numre, et relay-opkald og et SIP-opkald optages aldrig.
Underretning af den, der ringer, er dit ansvar
Optagelse af et opkald er behandling af personoplysninger. Agenten oplyser ikke selv om det - ønskes det, slås »Fortæl den opringende, at samtalen optages« til på agenten (recordingNotice: true i API'et), og volai føjer en kort linje til agentens første replik om, at opkaldet optages. Den kan lige så godt skrives ind i åbningsreplikken manuelt. At underretningen opfylder lovgivningen i den konkrete situation, er den dataansvarliges ansvar.
Hver API-fejl indeholder cause (hvem der løser den) og action (hvad der skal gøres) - se Fejlformat i REST API-referencen.
10Begrænsninger
- Et opkald varer højst 10 minutter (600 sekunder), derefter afslutter agenten det selv.
- Hvis den, der ringer, er tavs i 20 sekunder, opfatter agenten det som opkaldets afslutning og lægger på.
- Agenten svarer cirka 1 sekund efter, at der er talt færdigt - i reel trafik varierer det lidt med belastningen.
11Sprog
Agenten kan tale fem sprog - tjekkisk (standard), slovakisk, engelsk, tysk og polsk - sproget indstilles på agentens detaljeside (feltet language i POST/PATCH /v1/agents, create_agent/update_agent). En dedikeret stemme til hvert sprog (Cartesia) er kun tilgængelig for en agent, der kører på volais egen motor (se afsnittet Stemmer nedenfor) - en agent, der bliver på ElevenLabs, taler det valgte sprog med stemmen Anet.
12Testopkald
Knappen »Ring til mig til test« på agentens detaljeside i portalen får agenten til at foretage et rigtigt opkald til det indtastede nummer - et hurtigt tjek af, hvordan den lyder, og hvordan den reagerer på systemprompten, uden at skulle ringe til dens nummer manuelt.
Afregnes som et almindeligt udgående opkald med agenten, agenttillæg inklusive (se afsnittet Priser nedenfor) - ingen rabat, ingen særtakst.
En agent på volais egen stemmemotor kan foretage et testopkald selv uden eget telefonnummer - det går ud over den fælles volai-linje, så den, der ringes op, ser volai-nummeret på skærmen, ikke agentens. En agent på ElevenLabs uden eget nummer kan ikke starte et testopkald, før den får tildelt et.
Højst 3 testopkaldsforsøg pr. konto pr. dag på tværs af alle agenter - hvert forsøg, der faktisk kom i forbindelse, tæller, også et, ingen tog imod; et forsøg, der mislykkedes, før det kunne forbinde (utilstrækkelig kredit, optaget linje), tæller ikke med i grænsen. Almindelige opkald via POST /v1/calls har ingen så streng grænse.
13Stemmer
Valget af udbyder ved oprettelse har tre tilstande: useForOutboundTasks: true i POST /v1/agents eller create_agent vælger volais egen stemmemotor, false starter på ElevenLabs selv med viderestilling, og udeladelse bruger implementeringens standard, som afhænger af motorens tilgængelighed, aktivering og de konfigurerede sprog. Valget af cs eller sk alene garanterer ikke motoren; når motorstandarden er slået fra, starter oprettelsen på ElevenLabs. Når en eksplicit false tilsidesætter sprogets motorstandard, indeholder svaret ved oprettelsen advarslen elevenlabs_by_explicit_choice, så en agent, der kun er beregnet til indgående opkald, oprettes uden feltet. Når transferTo slås til på en ElevenLabs-agent, forsøger volai efter gemning at flytte den til motoren. Forsøget kan være sat på pause, utilgængeligt eller mislykkes, så resultatet kontrolleres med et efterfølgende GET /v1/agents/{id} for REST eller i den returnerede agent for MCP. Feltet provider viser, hvilken platform en agent kører på; viderestilling virker ikke, så længe den bliver på ElevenLabs. Et vellykket skift kan ændre dens stemme. Det samme forsøg følger efter en ændring af language på en ElevenLabs-agent fra et sprog, hvor nye agenter starter på ElevenLabs (i dag en, de, pl), til et, hvor de starter på motoren (cs, sk); agenten får så det nye sprogs standardmotorstemme (Milena, Katarina). Et skift mellem cs og sk flytter intet. Flytning mellem platforme sker ellers via volais support. ElevenLabs accepterer kun katty fra kataloget eller et rå ElevenLabs-stemme-id; andre katalogstemmer kræver motoren.
voiceId på create_agent/update_agent (og feltet af samme navn i POST/PATCH /v1/agents) vælger agentens stemme. Den ufiltrerede liste GET /v1/voices (MCP list_voices uden argumentet provider) viser ikke ElevenLabs-stemmen katty - REST returnerer den kun med ?provider=elevenlabs, MCP med argumentet provider: "elevenlabs". Cartesia-stemmer (Milena, Jan og stemmerne til andre sprog) er til agenter på volais egen motor, Katty til agenter på ElevenLabs (noten ovenfor beskriver, hvilken platform en agent kører på). Den ældre stemme anet bliver kun på agenter, der allerede har den - siden 12. september 2026 tildeler ElevenLabs den ikke længere til nye agenter, og volai afviser en sådan anmodning med en forklaring. Ved oprettelse med eksplicit useForOutboundTasks: true erstattes en genkendt katalogstemme, der ikke er tilgængelig på motoren, herunder katty, af motorens standard for det valgte sprog; når en udeladt værdi vælger motoren via implementeringens standard, afvises den samme uforenelige stemme. Et rå ElevenLabs-id afvises altid for motoren. Uden voiceId får agenten sin udbyders standardstemme - Milena på motoren, skabelonens stemme (Katty) på ElevenLabs.
Kataloget tilbyder mindst én kvindestemme og én mandsstemme pr. sprog (i dag fire til tjekkisk): 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. Portalen tilbyder kun stemmer på agentens valgte sprog - de skifter sammen (se afsnittet Sprog ovenfor).
Hver stemme i tabellen tilhører volais egen stemmemotor. For en agent på ElevenLabs afviser API'et dem med en 400 - den agent accepterer kun katty (som den ufiltrerede liste ikke viser) og et rå ElevenLabs-stemme-id.
| id | Beskrivelse | Forhåndsvisning |
|---|---|---|
| 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. | |
| 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 accepterer også et rå ElevenLabs-ID, men kun for en agent på standardplatformen (provider: "elevenlabs"). Til en agent på motoren bruges et katalogstemme-id. En ukendt værdi eller en, der er uforenelig med udbyderen, giver en fejl med en liste over de gyldige muligheder.
14Statistik
Agentens detaljeskærm i portalen viser antallet af besvarede opkald, deres gennemsnitlige og længste varighed og hvor mange der var i de seneste 30 dage - der findes intet dedikeret API til det, de samme tal kan beregnes ud fra GET /v1/calls.
15Priser
Stemmeagenten afregnes oven i opkaldsprisen pr. sekund - uden afrunding op til hele minutter. Priserne er ekskl. moms, ligesom hele prislisten.
| Retning | Opkald | Agent | I alt |
|---|---|---|---|
| Udgående | 0.92 CZK/min (~EUR 0.04) | 2.50 CZK/min (~EUR 0.10) | 3.42 CZK/min (~EUR 0.14) |
| Indgående | 0.50 CZK/min (~EUR 0.02) | 2.50 CZK/min (~EUR 0.10) | 3.00 CZK/min (~EUR 0.13) |
Den fulde prisoversigt med eksempler findes på siden Priser.
Foretrækkes en egen ElevenLabs, Vapi eller en anden platform? Agenttillægget kan springes over med en egen agent - se Medbring din egen agent.
16Udskrifter og webhook
Når et opkald er slut, kan udskrift og resumé hentes via GET /v1/calls/{id} (felterne transcript og summary) - eller volai kan sende dem til en URL som en hændelse call.completed, så snart de er klar. Udskriftens format, verifikation af signatur og fejlhåndtering findes på siden Webhooks.
Ingen lyst til at vente på en webhook eller polle API'et? I portalen viser hver agents detaljeside også en liste over seneste opkald med udskriften klar til at læse direkte.
17volais stemmemotor
Nogle agenter kører i dag på volais egen stemmemotor i stedet for ElevenLabs. Skiftet ændrer opkaldsrutningen, og agentens hele konfiguration flytter med - instruktioner, åbningsreplik, datafelter, opkaldsmål, viden, værktøjer og viderestilling. Hvad der ændrer sig, og hvad der ikke gør:
- Stemmer en agent, der havde en ElevenLabs-stemme valgt (Katty eller den ældre Anet), får motorens standardstemme for sit sprog, når den skifter - Milena til tjekkisk. Motoren tilbyder ikke en ElevenLabs-stemme som hovedstemme, ElevenLabs bliver kun som reserve ved et Cartesia-udfald. I agentens indstillinger kan derefter vælges enhver anden katalogstemme til agentens sprog, til tjekkisk blandt andet Jan. En stemme, agenten allerede har fra motorens katalog, røres ikke.
- Svartid forbliver den samme som hos ElevenLabs - cirka 1 sekund efter, at der er talt færdigt.
- Optagelser uændret - gemmes stadig i 90 dage og kan slås fra på samme måde på agentens detaljeside.
- Besked om optagelse uændret - når beskeden om optagelse er slået til for agenten (`recordingNotice`), føjer volai også her en kort linje til agentens første replik om, at opkaldet optages (se afsnittet Optagelser ovenfor). Uden den mulighed, eller når optagelse er slået fra, tilføjes linjen slet ikke.
- Oplysning om AI uændret - åbningsreplikken går til udbyderen præcis, som den er skrevet. Den håndhæves ikke: hvis replikken ikke siger, at den, der ringer, taler med en digital assistent, advares der kun (EU's AI-forordning, artikel 50), og gemning går stadig igennem. Oplysningspligten forbliver et ansvar hos den ansvarlige hos begge udbydere.
- Værktøjer og viderestilling de flytter med agenten - et vellykket skift sender motoren dens værktøjer og den konfigurerede viderestilling til et menneske, så de ikke skal sættes op igen. På volais egen stemmemotor virker viderestilling som en bro (som i afsnittet Viderestilling til et menneske ovenfor) - broen er afprøvet i den daglige drift, og portalen viser den fulde viderestillingsformular for en agent på motoren. Slås viderestilling til på en agent på standardplatformen (ElevenLabs), udløser det et øjeblikkeligt skiftforsøg efter gemning; resultatet kontrolleres i `provider`, for et forsøg sat på pause, en utilgængelig motor eller en fejl kan lade agenten blive på ElevenLabs, hvor viderestilling ikke virker. Et vellykket skift kan ændre dens stemme til motorens standard. Masseflytning af numre i bølger springer derfor agenter med konfigureret viderestilling over.
- Registrering af telefonsvarer ved udgående opkald kun volais egen stemmemotor kan det - inden for få sekunder efter besvarelsen genkender den en telefonsvarer i stedet for et menneske og, afhængigt af indstillingen, markerer den blot, lægger på eller venter på bippet og læser en besked op. Indstilles på agentens detalje (kun motoragenter), feltet `voicemail` via API og MCP. Opkaldslisten viser så »Telefonsvarer svarede« for et udgående opkald med en telefonsvarer i stedet for det sædvanlige udfald. Standardplatformen (ElevenLabs) har ingen sådan registrering.
- Påmindelse ved stilhed kun volais egen stemmemotor afspiller den - når den, der ringer, er tavs et stykke tid, spørger agenten én gang, om vedkommende stadig er der. Indstillingen (til/fra, 3 til 25 sekunder) gemmes for begge udbydere - for en agent på standardplatformen (ElevenLabs) er feltet på agentens detalje gråt, og værdien høres, når agenten skifter til motoren. En egen påmindelsessætning (`silencePromptText`, op til 80 tegn, i stedet for standardpåmindelsen for agentens sprog, som på dansk er »Er du der stadig?«) gemmes på samme måde.
- Beskyttelse af første replik kun volais egen stemmemotor kan det, og kun ved udgående opkald: mens den første replik afspilles (det antal sekunder, der er indstillet, 0 til 20), afbryder en kort reaktion fra den, der svarede (»Hallo?«, »Ja?«), den ikke: et svar uden et afbrydende ord (for eksempel stop, nej, vent) bortfalder i det beskyttede vindue, så det afbryder ikke replikken, står ikke i udskriften, og agenten reagerer ikke på det, mens et afbrydende ord altid afbryder den. De afbrydende ord følger agentens sprog: en engelsk agent afbrydes af stop, no, wait eller hold. Feltet `firstMessageProtectSecs` gemmes for begge udbydere uden tvungen standard - for en agent på standardplatformen (ElevenLabs) er det gråt på agentens detalje og høres, når agenten skifter til motoren. I opkaldets udskrift har en agentreplik, som den, der ringer, afbrød, flaget `interrupted`.
- Agentens latter kun volais egen stemmemotor kan le igen, når den, der ringer, ler eller spøger under opkaldet - og kun med en tjekkisk Cartesia-stemme (Milena, Jan og resten af kataloget). Standardplatformen (ElevenLabs) kan det slet ikke, selv med feltet sat. I agentens indstillinger vælges Automatisk (motoren slår selv latter fra ved følsomme emner, såsom inkasso, sundhed, myndigheder eller bedemandsvirksomhed), Til (tilsidesætter den registrering) eller Fra. Ændringen træder i kraft fra næste opkald.
18Kalender og aftaler
En agent på volais egen stemmemotor kan tjekke en ledig tid i en Google- eller Apple-kalender direkte under opkaldet og booke aftalen på stedet - den fortæller den, der ringer, om et tidspunkt er ledigt, foreslår de nærmeste ledige tider og booker aftalen, når et navn er bekræftet. Det slås til under fanen Kalender i agenteditoren: vælg forbindelsen (Data og integrationer), den konkrete kalender og reglerne for tilgængelighed.
- Regler for tilgængelighed tidsvinduer pr. ugedag (hvornår agenten overhovedet tilbyder aftaler), aftalens længde, en buffer mellem aftaler, mindste varsel før det bookede tidspunkt og horisonten - hvor langt frem agenten søger. Editoren udfylder standardværdier, men hver agent kan have sine egne.
- Indbyggede værktøjer kalenderen bruger to indbyggede værktøjer, check_availability og book_appointment - i modsætning til de egne værktøjer fra afsnittet Værktøjer ovenfor oprettes de ikke manuelt, de slås til sammen med kalenderen og tæller ikke med i kontoens grænse for værktøjer.
- Kun volais egen motor virker kun for en agent på volais egen stemmemotor. Slås kalenderen til for en agent på standardplatformen (ElevenLabs), gemmes indstillingen, og agenten forsøger at skifte til volais motor lige efter gemning - ligesom ved viderestilling til et menneske.
- Hvad agenten siger og ikke siger agenten læser aldrig op, hvad der står i kalenderen - kun om et givet tidspunkt er ledigt. Telefonnummeret på den, der ringer, føjes kun til begivenheden, når agenten kender det (et skjult nummer betyder, at begivenheden ikke har noget telefonnummer).
- Også uden for et opkald den samme søgning efter ledige tider og booking af aftaler virker også uden for et opkald, via REST (POST /v1/integrations/{id}/availability, POST /v1/integrations/{id}/events) og MCP (find_free_slots, create_calendar_event) - se afsnittet Kalendere i REST API-referencen og MCP-referencen for detaljer.
Relateret
MCP-server
Forbind Claude Code, Codex CLI, Codex desktop, Cursor og andre AI-editorer.
REST API
Komplet reference for alle endpoints: numre, opkald, sms, mobilnumre til sms, agenter og deres kladder, værktøjer, optagelser, webhooks, ring-ikke-liste, relay, konto, opgaver, saldo, bilag, kalendere og integrationer.
Webhooks
Begivenheder, strukturerede data i body, signaturverifikation, genforsøg ved fejl.
Medbring din egen agent
Tilslut en tredjepartsplatform (ElevenLabs, Asterisk ...) - uden tillæg for agenten.