Voice agents
Voice-agents in drie talen: een shift-cover case study
De eerste call kwam binnen om 4:47 op een zaterdag. Zes maanden geleden zou hij de dispatcher wakker hebben gebeld. Deze zaterdag wekte hij niemand, en om 4:53 was de vervanging rond.

De eerste call kwam binnen om 4:47 op een zaterdag. Een ploegbaas bij een vleesverwerker in Sint-Niklaas had om 7 uur 's ochtends twee schoonmakers nodig op de slachtvloer, omdat één van de nachtploeg was uitgegleden op een putdeksel en de ander weigerde solo verder te werken. Zes maanden geleden zou die call Hilde hebben wakker gebeld, de dispatcher bij een industrieel schoonmaakbedrijf in Mechelen met 19 mensen, die vervolgens een Google Sheet met mobiele nummers had afgebeld tot ze twee ja's te pakken had. Deze zaterdag wekte de call niemand. Om 4:53 had de voice-agent een Poolse schoonmaakster in Antwerpen-Noord aan de lijn, bevestigd dat ze binnen een kwartier kon vertrekken, ingeroosterd, en de klant een bevestigings-sms gestuurd in het Nederlands.
Die voice-agent handelt nu zo'n 230 inkomende shift-cover calls per week af.
De vorm van het probleem
Het bedrijf draait nachten in de corridor Antwerpen-Mechelen-Brussel: voedselproductie, logistieke magazijnen en een paar ziekenhuizen. De meeste mensen zijn Pools of Roemeens, met een Vlaams-Nederlandstalig kernteam en een kleinere Franstalige groep vanuit de Brusselse kant. De klanten bellen ook in drie talen. Ongeveer één op de vier ingeplande shifts krijgt op het laatste moment een wijziging. Een klant wil twee mensen extra, een schoonmaker is ziek, een vlucht is vertraagd, een kind is ziek.
Hilde handelde de meeste van die wijzigingen buiten kantooruren af op haar privé-mobiel. Vorig jaar september vertelde ze de eigenaar dat ze met Kerst zou opstappen als er niets veranderde. Dat is de enige zin in dit verhaal die ertoe deed voor het besluit om überhaupt iets te bouwen.
Wat we daadwerkelijk hebben gebouwd
Drie componenten, geen ervan op zichzelf bijzonder slim.
Een gratis Belgisch nummer op Twilio dat inkomende calls routeert naar een voice-agent met drie taalprofielen. Taaldetectie gebeurt op de eerste twee seconden audio met Deepgrams meertalige STT, gebiast richting Pools en Belgisch Nederlands met ongeveer veertig minuten interne calls. De generieke Nederlandse modellen waren niet best met Vlaamse telefoonaudio. Een kleine bias-dataset dichtte het gat.
Een reasoning loop die de live roostering uit Shiftbase leest. Hij weet wie nu op shift staat, wie uit rotatie is, wie eerder bij die klant heeft gewerkt, en wie binnen veertig minuten reizen van de locatie zit. De lijst geschikte kandidaten wordt een callable function. De agent pikt er één, belt ze uit, vraagt in hun voorkeurstaal of ze de shift kunnen overnemen, en bevestigt of gaat door naar de volgende.
Een terugschrijfactie naar Shiftbase via REST. Bevestigde vervanging gaat het rooster in als gepubliceerde shift. De oorspronkelijke schoonmaker wordt, als bekend is dat hij ziek is, afgemeld met de reden in de log. De klant krijgt een bevestigings-sms via Twilio met de voornaam van de schoonmaker en de ETA.
Er is geen model getraind op data van het bedrijf. Er is geen "AI-strategie". Er is een voice-agent die het saaie werk goed doet.
Waarom drie talen, en niet één
Alleen Nederlands had ongeveer 55% van de inkomende calls gedekt. Frans dekt nog eens 20%. Pools dekt de rest. In het Pools zat het grootste deel van de frustratie van de dispatcher, omdat zij het niet spreekt. De schoonmakers spreken genoeg Nederlands om hun werk te doen, maar een telefoontje om 5 uur 's ochtends in hun tweede taal, half slapend, is de slechtst denkbare UX. Ze in het Pools bellen meer dan verdubbelde het ja-percentage bij eerste contact.
We gebruiken ElevenLabs voor TTS, omdat de Poolse stemmen de enige waren die we testten die niet klonken als een robot die een spellingsboek voorleest. Poolse klemtoon is meedogenloos. Zet hem op de verkeerde lettergreep en de schoonmaakster denkt dat het een oplichtersbelletje is en hangt op.
De Shiftbase-integratie die het langst duurde
Het voice-gedeelte zat in twee weken in elkaar. De integratie kostte vijf.
Shiftbase heeft een nette API en behoorlijke docs. Het probleem is niet de API. Het probleem is dat echte roosters in echte bedrijven vol staan met ongeschreven regels. Marek werkt niet met Andrzej door een oude ruzie. De fabriek in Sint-Niklaas vereist een HACCP-certificaat dat maar zes van de teamleden hebben. Eén klant weigert uitzendkrachten en wil alleen mensen die minstens zes maanden in vaste dienst zijn. Niets van dit alles staat in Shiftbase. Het zit in Hilde's hoofd.
We hebben er vier avondsessies met haar tegenaan gegooid, een whiteboard, en een lijst met historische edge cases. De output was een callable filter, ongeveer dit:
def eligible_for_shift(shift, candidates):
out = []
for c in candidates:
if shift.client.requires_haccp and not c.has_haccp:
continue
if shift.client.no_agency and c.employment_type == "agency":
continue
min_tenure = shift.client.min_tenure_months or 0
if c.tenure_months < min_tenure:
continue
if any(b in shift.crew_ids for b in c.cannot_work_with):
continue
if c.travel_minutes_to(shift.site) > 40:
continue
if c.is_on_shift_within(hours=8):
continue
out.append(c)
return sorted(
out,
key=lambda c: (
-c.shifts_at_client.get(shift.client.id, 0),
c.travel_minutes_to(shift.site),
),
)
Dat zijn twaalf regels Python. Het is ook het stuk dat het verschil maakt tussen of de agent meteen de juiste persoon belt of drie keer de verkeerde. Het grootste deel van de uren die we factureren in voice-agent-werk gaat zitten in het schrijven van het equivalent van die twaalf regels voor een bedrijf dat ze nog nooit op papier heeft gezet.
Hilde werd niet ontslagen
Dit is het stuk dat in elke voice-agent case study wordt overgeslagen. Er was halverwege de bouw een reëel risico dat de eigenaar naar de demo zou kijken en zou concluderen dat hij Hilde kon laten gaan.
Dat deed hij niet. We hebben voor de start van het project een lang gesprek met hem gevoerd over welke beslissingen de agent niet kan nemen. De agent kan niet beredeneren waarom een bepaalde klant de briefing blijft veranderen. Hij hoort niet dat Mareks vrouw bij het laatste telefoontje raar klonk. Hij beslist niet of je tegengas moet geven als een klant er zonder bijbetaling een vierde dagshift bij wil. Dat zijn de keuzes die Hilde nu maakt, met volle aandacht, tijdens normale uren.
Haar werk buiten kantooruren zakte van ongeveer 22 uur per week naar zo'n 4. Haar slaap herstelde. Ze runt nu de klantrelatiekant van dispatch en traint nieuwe mensen op de eigenaardigheden van de agent. De eerlijke versie is dat de agent Hilde niet heeft vervangen. Hij heeft haar weggehaald van het deel van het werk dat haar weekenden opslokte.
Cijfers na acht weken
De agent ging live op 10 maart. Stand van vorige week:
- 230 inkomende shift-cover calls per week afgehandeld, gemiddeld.
- 89% van de vervangingsslots gevuld zonder tussenkomst van de dispatcher.
- Mediaantijd van inkomende call tot bevestigde vervanging: 4 minuten 12 seconden.
- All-in kostprijs per afgehandelde call (telco, STT, model, TTS, Twilio-nummers): 38 cent.
- Werklast dispatcher buiten kantooruren: ongeveer 80% lager.
De 11% van de calls die nog steeds een mens nodig hebben, zijn meestal de calls met een klant-edge-case die de agent nog niet snapt. Die voegen we tijdens een wekelijkse review toe aan de regelset. De regelset wordt langzaam langer, niet explosief.
Het lastige aan een voice-agent is niet de stem. Het zijn de twaalf ongeschreven regels in het hoofd van de dispatcher, en het eerlijke gesprek over welke beslissingen de mens houdt.
Wat brak, en hoe we het merkten
In de eerste week belde de agent vol zelfvertrouwen een schoonmaker die al drie weken ziek thuis zat, omdat Shiftbase alleen de huidig ingeplande periode als afwezig markeert en wij uit een cache lazen. Hij nam op, zei nee, en de agent ging door. Hilde was woedend dat die cache überhaupt bestond. We hebben hem eruit gesloopt.
Het tweede probleem was subtieler. De Poolse TTS sprak één van de klant-locatienamen ("Stora Enso") uit alsof het Pools was. De schoonmaakster dacht dat ze naar een andere locatie werd gestuurd. We hebben een klein uitspraakwoordenboek met klantnamen toegevoegd, die in het Engels worden uitgesproken, ongeacht het taalprofiel.
Het derde was een kwestie van aansprakelijkheid. Als de agent een klant iets onwaars vertelt (de verkeerde naam van een schoonmaker, een ETA waar niemand zich eigenlijk aan heeft gecommitteerd), draagt het bedrijf dat, niet de leverancier van het model. We hebben de bevestigingsstap aangescherpt: elke toezegging aan een klant (naam schoonmaker, ETA, scope van het werk) wordt na het wegschrijven uit het Shiftbase-record teruggelezen, nooit uit de gespreksbuffer. De agent belooft niets wat het systeem niet heeft vastgelegd.
De 38-centsvraag
Met 38 cent per call zijn de unit economics niet te vergelijken met twee jaar geleden. Dezelfde agent gebouwd in 2024, met generieke Nederlandse TTS en een gehost reasoning model, was eerder rond de €1,80 per call all-in uitgekomen. Het grootste deel van de besparing zit in TTS-prijzen en modelprijzen. Een kleiner deel zit in betere Europese telefonie-routing.
Servet-rekenwerk: 230 calls per week, 52 weken, 38 cent. Dat is ongeveer €4.700 per jaar aan operationele kosten. Hilde's overwerkvergoeding alleen al was een veelvoud daarvan. De bouw, inclusief de vier whiteboard-sessies en de taalkalibratie, was binnen het eerste kwartaal terugverdiend.
Het punt is niet het geld. Het punt is dat voice-agents zijn opgeschoven van "interessant als je schaal hebt" naar "logisch als je een dispatcher hebt". Een bedrijf van 19 mensen kan er nu één betalen, en het verschil tussen een goede en een nutteloze agent zit niet in de speech-stack. Het zit erin of iemand de moeite heeft genomen om de regels op te schrijven die nog niemand had opgeschreven.
Toen we deze voice-agent in Mechelen bouwden, liepen we steeds aan tegen het gat tussen wat de dispatcher zei dat de regels waren en wat de regels eigenlijk waren zodra een shift om 4 uur 's nachts uit de bocht vloog. We losten het op door drie woensdagavonden bij haar te zitten, op te nemen hoe ze hardop dacht terwijl ze historische cases doorliep, en dat transcript om te zetten in de filter hierboven. Dat soort werk is de helft van AI-agents waar nooit over wordt gepraat, en het is het grootste deel van het werk.
Als je een dispatch-operatie runt, is het kleinste wat je deze week kunt doen het call-log van vorige week buiten kantooruren openen en tellen hoeveel van die calls eigenlijk een ja-of-nee-vraag waren aan de juiste persoon, in de juiste taal. Dat getal is je shift-cover-lift.
Kern
Voice-agents gaan niet meer over stem. Het lastige is de ongeschreven regels in het hoofd van de dispatcher omzetten in een filter die de agent kan aanroepen.
FAQ
Waarom drie taalprofielen in plaats van één meertalige prompt?
Eén meertalige setup landt op telefoonaudio om 5 uur 's ochtends in ongeveer 4% van de gevallen in de verkeerde taal. Aparte profielen met harde taaldetectie op de eerste twee seconden waren bij ons betrouwbaarder.
Wat gebeurt er als de voice-agent geen geschikte kandidaten meer heeft?
Hij escaleert naar de dispatcher met een samenvatting van wie geprobeerd is, wat ze zeiden, en welke restricties de rest hebben uitgesloten. De dispatcher beslist of een regel wordt opgerekt of dat de klant wordt teruggebeld.
Hoe voorkom je dat de agent te veel belooft aan klanten?
Elke toezegging (naam, ETA, scope) wordt na het wegschrijven teruggelezen uit het Shiftbase-record, nooit uit het gesprek. Als het systeem het niet heeft vastgelegd, zegt de agent het ook niet aan de telefoon.
Kan een voice-agent als deze werken zonder een rooster-tool zoals Shiftbase?
Ja, maar het grootste deel van de bouwkosten verschuift dan naar de plek waar het rooster wel leeft. Een spreadsheet werkt als die schone ID's en historie heeft. Een whiteboard op kantoor werkt niet.