Voice agents
Voice agents: Vapi vs Retell vs Twilio bij 4.800 calls
Een Antwerpse tandsoftware-leverancier met 24 medewerkers had 4.800 herinneringscalls per dag nodig in Nederlands en Frans, met barge-in onder de seconde. We testten drie stacks.

Op een dinsdag in maart opende de operations-lead bij een Antwerpse tandsoftware-leverancier met 24 medewerkers haar Vapi-billingconsole en las het getal twee keer. De uitgaande herinneringscalls van de maand ervoor hadden €31.400 gekost. Haar CFO had €12.000 begroot. De boekingsratio op de herinneringen was 9 procent gestegen ten opzichte van vorig jaar. Dat boeide haar minder dan het verschil met de begroting.
De volgende ochtend mailde ze ons. De vraag was helder: bestond er een voice-stack die hetzelfde resultaat haalde voor een derde van de kosten, zonder de sub-seconde barge-in op te geven waar haar Vlaamse praktijken stilletjes aan gewend waren geraakt?
In zes weken testten we drie opties op dezelfde replay-set van 1.000 calls: Vapi, Retell en een eigen pipeline van Twilio plus LiveKit plus Deepgram. Het eerlijke antwoord is dat alle drie deze workload aankunnen. Het nuttige antwoord zit in wat ze in hun demo's verbergen.
4.800 calls per dag in de praktijk
De Antwerpse leverancier verkoopt afspraaksoftware aan ongeveer 1.100 Belgische en Nederlandse tandartspraktijken. Elke praktijk zet herinneringen aan op 24 uur en 2 uur vooraf. Daarvan gaan er elke werkdag zo'n 4.800 uit als uitgaande voicecalls, ruwweg 65 procent Vlaams en 35 procent Frans.
Een typische herinnering heeft drie takken. De patiënt bevestigt ("ja, ik kom"), verzet ("kan ik verzetten naar volgende week?") of annuleert. Verzetten en annuleren gaan beide door naar een agendalookup, waarna de agent twee slots voorstelt en er eentje boekt. Een geslaagde bevestiging is het goedkope pad. Verzetten is het lange pad. Annuleren is waar je ontdekt of je stack een barge-in midden in de begroeting aankan.
Gewogen over opnames en voicemails komt de call-mix op deze klant uit op ongeveer 22 seconden voor een bevestiging, 71 seconden voor een verzetting, 14 seconden voor een voicemail-drop en 8 seconden voor een no-answer (vooral beltijd die de carrier doorberekent). Dat is zo'n 32.500 voice-minuten per maand. Vermenigvuldig dat met het all-in tarief dat elke leverancier feitelijk rekent, inclusief de standaard LLM en TTS-doorberekening, en de maandfactuur schrijft zichzelf. De €12.000 van de CFO ging uit van €0,08 per minuut. De Vapi-rekening ging uit van €0,18. Geen van beide was op zichzelf fout. Ze beantwoordden verschillende vragen.
De replay-set van 1.000 calls
Voor we ook maar één vendor draaiden, moesten we een representatieve steekproef van echte calls vastleggen. De Antwerpse leverancier had zes maanden aan opgenomen calls uit hun Vapi-flow, met een consent-banner aan het begin van elke call. We trokken er 1.000 uit, gestratificeerd op de productiemix: 540 Vlaams, 360 Frans en 100 gesprekken met taalwisseling (vooral Brusselse praktijken waar patiënt en agent vanaf de tweede beurt in verschillende talen verder praten).
Het replay-harnas was een kleine Twilio-app die een uitgaande call plaatste naar een nummer dat per beurt naar elke vendor werd gerouteerd, en vervolgens de opgenomen patiëntkant als antwoord-audio over de media stream afspeelde. De agent van elke vendor hoorde dezelfde 1.000 patiëntuitingen in dezelfde volgorde. We namen beide kanten van elke call op en berekenden drie metrics: hoorbare barge-in latency, end-to-end taakresultaat (werd de bevestiging of verzetting correct afgehandeld met het juiste slot geboekt), en totaal aan factureerbare minuten per regel, geschraapt uit de usage-export van elke vendor en de CDR's van de carrier.
Wat de replay-opstelling pijnlijk duidelijk maakte: vendor-demo's gebruiken bijna nooit echt opgenomen patiëntaudio. Ze gebruiken een mens die schoon in een headset praat. Echte patiëntaudio bevat een blaffende hond om drie uur 's middags, een autoradio op FM en een oma die begint te antwoorden voor de agent zijn tweede woord af heeft. Twee van de drie vendors zakten merkbaar op confirm-recall in de subsets met taalwisseling en achtergrondruis. De eigen stack, afgesteld met Deepgrams meertalige model en een iets agressievere VAD, bleef stabiel. Daar zie je niets van terug in een gepolijste demo.
Vapi als standaard startpunt
Naar Vapi grijp je als je in een middag een werkende voice-agent nodig hebt. De webconsole geeft je function calling, een gestructureerde system prompt en een telefoonnummer op één scherm. Voor de Antwerpse pilot had het interne team binnen een dag een Nederlandstalige confirm-only flow live, en de dag erna een Franse versie die daaruit was geforkt. Die snelheid is echt het product.
Wat hen na zes maanden verraste, was de kostenopbouw. Vapi's gepubliceerde platformfee is de goedkoopste regel op de factuur. De dure regels zijn het model en de stem. Standaard stuurt Vapi door naar OpenAI plus ElevenLabs tegen listprijs. Op een confirm-call van 22 seconden is ElevenLabs alleen al goed voor ongeveer 40 procent van de kosten per minuut. Vervang het door Cartesia of PlayHT en de platformfee weegt weer mee, maar dan ben je het originele één-console-één-factuur-voordeel kwijt dat je überhaupt naar Vapi bracht.
Barge-in latency, gemeten als de tijd tussen het moment dat de gebruiker begint te praten en het moment dat de audio van de agent hoorbaar stopt, kwam op 780 milliseconden uit op onze replay van 1.000 calls. Acceptabel voor deze use case. Niet de state of the art. De bottleneck was de standaard VAD-drempel, die Vapi wel ontsluit maar niet transparant.
Retell en de prijs van orchestratie
Retell is de optie die founders op de shortlist zetten als Vapi te bepalend voelt. Het behandelt de LLM, de STT en de TTS als volwaardige uitwisselbare plugins, en biedt een schonere state machine voor multi-turn flows. Hun documentatie is helder over de bewegende delen en de verantwoordelijkheidsverdeling.
Die scheiding is de feature, en de kosten. De Vapi-flow van het Antwerpse team had één system prompt en een function-call-schema. Het overzetten naar Retell vroeg om de takken bevestigen, verzetten en annuleren expliciet als nodes te modelleren, met transitievoorwaarden op elk. Productiewaardig, ja. Twee engineering-weken, ook ja.
Barge-in landde op 640 milliseconden met Retells standaard endpointing, en op 510 milliseconden toen we de stiltedrempel terugbrachten naar 110 milliseconden. De kosten per minuut lagen 12 procent onder Vapi bij dezelfde TTS-keuze, en 31 procent eronder als je Cartesia accepteerde in plaats van ElevenLabs. De confirm-recall bleef binnen één procentpunt van Vapi. De eerlijke samenvatting van Retell: sneller op barge-in, goedkoper op de factuur, meer werk in de bouw.
Zelf bouwen op Twilio plus LiveKit plus Deepgram
De derde optie is wat je bouwt zodra de rekening per minuut, maal je volume, het salaris van je platform engineer overstijgt. Bij 32.500 minuten per maand zat de Antwerpse leverancier ruim voorbij die drempel, en dat wist ze.
De architectuur is onspectaculair en goed gedocumenteerd. Twilio doet de carrier-kant met hun Media Streams-WebSocket en streamt μ-law audioframes van de PSTN-call naar je backend. LiveKits Agents-framework beheert de room en routeert audio tussen Deepgram voor streaming-STT, je gekozen LLM voor het redeneren, en een TTS-provider naar keuze. Een klein Silero VAD-model zit ervoor voor endpointing en bepaalt wanneer de gebruiker echt is uitgesproken in plaats van halverwege een zin pauzeert.
Een minimale LiveKit-agent ziet er zo uit:
from livekit import agents
from livekit.plugins import deepgram, openai, cartesia, silero
async def entrypoint(ctx: agents.JobContext):
agent = agents.VoicePipelineAgent(
vad=silero.VAD.load(min_silence_duration=0.12),
stt=deepgram.STT(model="nova-3", language="multi"),
llm=openai.LLM(model="gpt-4o-mini"),
tts=cartesia.TTS(voice="nl-be-female-1", model="sonic-2"),
allow_interruptions=True,
interrupt_speech_duration=0.10,
)
await ctx.connect()
agent.start(ctx.room)
De eigen stack leverde het laagste barge-in getal van de drie: 420 milliseconden op het 95e percentiel, na het terugbrengen van Silero's silence window naar 120 milliseconden en het verkorten van Cartesia's first-chunk buffer. De kosten per minuut, inclusief Twilio Belgium uitgaand, LiveKit Cloud participant-minuten, Deepgram Nova-3 streaming, GPT-4o-mini en Cartesia Sonic-2, stabiliseerden op €0,061. Ongeveer een derde van de Vapi all-in prijs.
Dat getal komt met engineering-schuld. Een platform als Vapi regelt stilletjes SIP-retries, codec-onderhandeling, jitter buffer-tuning en number warm-up. De dag dat je daar niet meer voor betaalt, regel je het zelf. Reken op twee engineers fulltime voor de eerste zes weken en één engineer op twintig procent voor het jaar daarna.
Het barge-in getal dat de demo's verbergen
Elke vendor-demo meet latency vanaf het moment dat hun backend de audio van de gebruiker erkent. Dat getal is niet wat de patiënt aan de lijn daadwerkelijk hoort. De patiënt hoort de tijd tussen het beginnen met praten en het stil worden van de agent-stem.
Tussen die twee momenten zitten drie dingen: het carrier-mediapad, de VAD-stiltedrempel en de TTS-interruptlogica. Het tweede prijzen vendors graag aan. Over het derde zijn ze stiller. Een TTS-engine die al 800 milliseconden aan audio in het oor van de patiënt heeft gestreamd, heeft nog 800 milliseconden audio te flushen voor er stilte terugkomt, hoe snel de VAD ook afgaat.
Adverteert je vendor met "200 ms barge-in" zonder erbij te zeggen of dat server-side detectie is of hoorbare interrupt, ga uit van het slechtste. Wat patiënten daadwerkelijk ervaren is doorgaans 2 tot 3 keer het marketinggetal.
Deepgrams gepubliceerde streaming-latency voor hun Nova-familie zit in de band van 150 tot 300 milliseconden, en dat klopt. Tel daar een VAD-venster van 100 milliseconden en een TTS-flush van 150 milliseconden bij op en je komt op de 420 milliseconden die wij maten. De marketingtagline was "150 ms" geweest. De patiëntervaring is 420. Beide zijn waar.
Minuutprijs-rekensom bij dit volume
De all-in tarieven waar we op uitkwamen, over dezelfde replay-set van 1.000 calls met identieke flows in beide talen:
- Vapi met OpenAI plus ElevenLabs als standaard: €0,182 per minuut
- Vapi met Cartesia ingewisseld: €0,131 per minuut
- Retell met OpenAI plus ElevenLabs: €0,161 per minuut
- Retell met Cartesia: €0,112 per minuut
- Twilio plus LiveKit plus Deepgram plus GPT-4o-mini plus Cartesia: €0,061 per minuut
Bij 32.500 minuten per maand zit er €3.930 verschil tussen de duurste en de goedkoopste configuratie. Per jaar €47.160. Dat is geen afrondingsfout op een bedrijf van 24 mensen. Het is ook niet het enige getal. De eigen stack drukte twee engineers zes weken lang in voice-infrastructuur. Volledig belaste kosten tegen Belgische tarieven: zo'n €40.000. Jaar één komt grofweg quitte op de besparing. In jaar twee komt het overschot in beeld, en in jaar drie heb je een echte voorsprong op de volgende concurrent die nog steeds €0,18 per minuut aan een managed platform betaalt.
Wat we opleverden
De Antwerpse leverancier ging in mei live op de eigen Twilio plus LiveKit plus Deepgram-stack, met Retell als hot standby achter een feature flag voor de Franstalige flow voor het geval van regressie. Toen we hun voice-agent bouwden, was het ding waar niemand je voor waarschuwt de codec-mismatch tussen LiveKit Cloud (Opus op 48 kHz) en Twilio's PSTN-leg (μ-law op 8 kHz). Dat gaf een transcode-penalty van 60 milliseconden die we alleen oppikten door aan beide kanten ruwe RTP vast te leggen. We zijn uiteindelijk een eigen LiveKit egress-node in Frankfurt gaan draaien en hebben de SIP-transcoder aan die regio vastgepind. Dat scheelde 90 milliseconden in de round-trip en loste een vreemde klacht op van drie Waalse praktijken dat "de agent klinkt alsof hij onder water zit".
Het kleinste dat je vandaag kunt doen, nog voor enige vendor-vergelijking ertoe doet, is de billing-export van je huidige voice-provider openen en de kosten per minuut opsplitsen in platformfee, LLM, STT en TTS. Lukt dat niet, dan is dat je eerste antwoord.
Kern
De juiste voice-stack is die waarbij de minuutprijs maal je jaarvolume de kosten van twee engineers gedurende zes weken overstijgt.
FAQ
Welke barge-in latency hoort een patiënt daadwerkelijk?
De tijd tussen het moment dat de patiënt begint te praten en het stil worden van de agent-audio, niet de tijd die de vendor-backend nodig heeft om spraak te detecteren. Reken op 2 tot 3 keer het marketinggetal.
Wanneer is een eigen voice-stack bouwen beter dan Vapi of Retell?
Zodra je jaarlijkse voice-uitgaven op een managed platform de kosten van twee engineers gedurende zes weken overstijgen. Daaronder gebruik je een managed platform. Daarboven bouw je de pipeline zelf en houd je hem in eigen hand.
Maakt de TTS-provider echt zoveel uit voor de minuutprijs?
Ja. Op korte herinneringscalls kan de TTS-provider 30 tot 40 procent van de kosten per minuut zijn. ElevenLabs vervangen door Cartesia of PlayHT verlaagt de rekening doorgaans met een derde zonder verlies aan verstaanbaarheid.
Kun je meerdere voice-stacks tegelijk draaien voor redundantie?
Ja. De Antwerpse leverancier draait de eigen stack als primair en een Retell-flow achter een feature flag als hot standby voor de Franse route. Failover is één configwijziging op de router.