Casestudy over een AI-spraakagent

Vocale

Een medewerker die de telefoon van een bedrijf beantwoordt, het antwoord in de eigen documenten van dat bedrijf vindt en het supportticket opent nog voordat de beller heeft opgehangen — via de nummers die het bedrijf al in bezit heeft, en op hun eigen hardware als ze dat willen.

  • IndustrieInbound support and telephony
  • GebruikersSupport teams on a Yeastar or SIP PBX
  • DekkingEvery call, around the clock
  • DienstenProduct Design, Development, AI
Vocale: platform voor AI-spraakassistenten

Overzicht

Vocale koppelt een AI-agent aan een telefoonlijn die een bedrijf al heeft. Een klant belt het nummer dat hij altijd al heeft gebeld; de agent neemt bij de eerste beltoon op, spreekt zijn taal, beantwoordt vragen op basis van de eigen handleidingen en het beleid van het bedrijf, en — wanneer het antwoord eigenlijk is "hier moet iemand naar kijken" — maakt hij een supportticket aan met de reeds verzamelde gegevens.

Er verandert niets aan het telefoonsysteem. Het bedrijf behoudt zijn provider, zijn nummers en zijn belabonnement; een Yeastar- of compatibel SIP-platform wordt eenmalig via een formulier aangesloten, waarna de trunk en de gespreksroutering daarachter worden ingesteld. Vervolgens hoef je alleen nog maar de documenten te uploaden die de agent moet kennen, de paar zinnen te schrijven die de toon aangeven, en het geheel in een browser te testen totdat het goed klinkt — en dat alles voordat er ook maar één echt gesprek naar de agent wordt doorgeschakeld.

De beslissing die bepalend is voor de economische haalbaarheid, is waar de modellen draaien; daarom levert het platform twee engines binnen één product. Op het gehoste niveau zijn spraak, redenering en stem afkomstig van een API van een derde partij en wordt elke minuut in rekening gebracht. Op het zelfgehoste niveau draaien alle drie de functies op een GPU die onder eigen beheer van het bedrijf staat; er verlaten geen audiobestanden of documenten het gebouw en een gesprek kost alleen elektriciteit. Het wisselen tussen beide niveaus is een kwestie van configuratie; de agent gedraagt zich in beide gevallen hetzelfde.

  • Next.js 15
  • TypeScript
  • Tailwind CSS
  • Supabase
  • PostgreSQL
  • LiveKit
  • WebRTC
  • SIP telephony
  • Python
  • vLLM + Qwen3-8B
  • Faster-Whisper
  • Coqui XTTS-v2
  • Pinecone

Projectvideo

vocaleSluit de telefoonlijn aan. Er wordt opgenomen.

Een stapsgewijze uitleg over Vocale, van het aansluiten van een telefoonsysteem en het uploaden van een handleiding tot een live gesprek waarin de vraag wordt beantwoord en de vraag die niet beantwoord kon worden, wordt doorgestuurd.

Belangrijkste functies

  • Neemt de telefoon op

    Wordt gekoppeld aan het Yeastar- of SIP-systeem dat het bedrijf al gebruikt, zodat oproepen de medewerker bereiken via de nummers die klanten altijd al hebben gebeld.

  • Gebaseerd op uw documenten

    Handleidingen, beleidsdocumenten en prijslijsten worden op het moment dat de vraag wordt gesteld geüpload, geïndexeerd en doorzocht — zodat het antwoord afkomstig is uit het eigen materiaal van het bedrijf en niet uit het geheugen van het model.

  • Opent tickets tijdens het gesprek

    Wanneer een beller iemand nodig heeft, noteert de medewerker het onderwerp, de contactgegevens en de urgentie terwijl de beller nog aan de lijn is, en maakt vervolgens zelf het ticket aan.

  • Weet wie er belt

    Een bestaande klantendatabase is alleen-lezen gekoppeld, zodat een inkomend nummer al aan een account wordt gekoppeld voordat de medewerker iets zegt.

  • Twee motoren, één product

    Dezelfde agent draait op een gehoste API of volledig op een eigen GPU. Het bedrijf kiest op basis van de kosten en op basis van waar de gegevens naartoe mogen worden gestuurd.

De uitdaging

Om zeven uur ’s avonds gaat de telefoon. Het antwoord staat in een PDF op de gedeelde schijf. Er is niemand om het te lezen.

Een hulplijn is slechts zo beschikbaar als de mensen die de telefoontjes beantwoorden, en de vragen die binnenkomen zijn vrijwel altijd dezelfde paar: wat zijn jullie openingstijden, wordt dit vergoed, hoe kan ik het resetten? De antwoorden staan al opgeschreven – in een handleiding, een beleid, een prijslijst – maar niet op een plek waar een beller erbij kan en een medewerker ze kan vinden terwijl iemand in de wacht staat. Door een AI in te zetten, is de beschikbaarheid voor de helft opgelost. Door er een per minuut te huren, wordt dit stilletjes vervangen door een kostenprobleem, want hoe beter het werkt, hoe vaker het wordt gebruikt, en hoe meer het elke maand kost.

  • Telefoontjes buiten kantooruren

    ’s Avonds, in het weekend en op feestdagen wordt de oproep doorgeschakeld naar de voicemail — en wat daar terechtkomt, zijn meestal de standaardvragen die iemand binnen een minuut zou hebben afgehandeld.

  • Antwoorden die niemand kan vinden

    De informatie staat wel in documenten, maar niet in een vorm die iemand kan raadplegen terwijl er een beller in de wacht staat.

  • Prijs per minuut

    Bij beheerde spraak-AI-platforms wordt per gespreksminuut gefactureerd, waardoor de kosten stijgen naarmate het gebruik toeneemt — een verkeerde prikkel om een helpdesk op te zetten.

Onze oplossing

Eén agent, die je al aan de lijn hebt.

Vocale fungeert als schakel tussen het telefoonsysteem van een bedrijf en zijn kennisbestand. De PBX wordt via een formulier gekoppeld en de routering wordt daarachter ingesteld. Documenten worden geüpload en geïndexeerd. De manier waarop de agent reageert, wordt in gewone taal gedefinieerd in plaats van in code, en het geheel kan in een browser worden getest voordat er een echt gesprek binnenkomt. Zodra het systeem live is, wordt alles wat het heeft gedaan vastgelegd – het transcript, de zoekopdrachten die het heeft uitgevoerd, de tickets die het heeft aangemaakt – zodat het team kan beoordelen of het zijn werk goed doet, voordat het meer taken krijgt toevertrouwd.

Wordt aangesloten op de PBX, niet eromheen

Yeastar en compatibele SIP-systemen worden via een formulier aangemeld, en het bedrijf behoudt zijn provider, zijn nummers en zijn belabonnement.

Ophalen voordat het spreekt

Een vraag waarvoor een feit nodig is, leidt tot een zoekopdracht in de geïndexeerde documenten, en het antwoord wordt samengesteld uit de gevonden resultaten — waarbij ‘niets gevonden’ ook een antwoord is dat de agent mag geven.

Gehost of zelf gehost, hetzelfde gedrag

Spraak, taal en stem worden verwerkt via een API van een derde partij of op een eigen GPU. Het wisselen tussen deze twee opties is een kwestie van configuratie, geen hercompilatie.

Hoe het werkt

Test het voordat een klant het doet

A sandbox that runs the whole pipeline in the browser. Pick a caller, start the call, and the transcript arrives live beside it as the agent hears and answers. Every session it has ever handled — browser or phone, inbound or outbound — is one click away in the rail on the left.

De Vocale-console voor spraakagenten: een groot stand-byvenster met daarnaast een paneel met het live transcript, daaronder een bellerkeuzescherm en een knop ‘Gesprek starten’, en een zijbalk met de recente gespreksgeschiedenis waarin de nummers zijn verborgen.

De documenten waarop het betrekking heeft

Files are dropped straight onto the page, then parsed, split and indexed. Each row reports how many pages went in and how many searchable pieces came out, so it is obvious at a glance when a document is ready to be quoted on a call and when it is still being worked on.

De kennisbankpagina: een uploadvenster met slepen-en-neerzetten-functionaliteit boven een tabel met geïndexeerde documenten, waarin de naam, status, het aantal pagina’s en het aantal fragmenten worden weergegeven.

Wat het niet kon beantwoorden, wordt een ticket

The agent collects the subject, the customer and the urgency while the caller is still on the line and files the ticket itself, transcript attached. Support opens the queue to a list of real problems in the caller's own words instead of a column of missed calls.

De ticketpagina: een tabel met supporttickets met nummer, onderwerp, klant, status, prioriteit en aanmaakdatum; de meeste daarvan worden automatisch aangemaakt tijdens telefoongesprekken.

Het weet wie er belt

An existing customer database connects read-only, with a mapping step for whichever columns hold the name and the number. From then on an inbound call is matched against it before the agent speaks — and the records stay where they are. Vocale reads them; it does not become the place they live.

De klantenpagina toont een gesynchroniseerde externe database met 14.039 records, met de bedieningselementen ‘Toewijzingen bewerken’ en ‘Verbinding bewerken’. De kolommen ‘Naam’ en ‘Telefoonnummer’ zijn vervaagd.

Nummers, toegewezen via de console

Telephony is the one part a business should not have to get right alone, so provisioning is an operator job rather than a self-service form. Each number is registered, pointed at an organisation and switched on from here — which doubles as the fastest way to see which tenants are actually taking calls.

Het scherm met SIP-nummers voor beheerders: tellers voor het totale aantal nummers, actieve en inactieve nummers, en een tabel waarin elk nummer wordt gekoppeld aan een naam, een organisatie en een tenant, met een schakelaar om de status te wijzigen.

Wat elke minuut kost

Spend is metered the way the models bill it — caller speech, agent speech and replayed history, broken out per model and per organisation. It is what turns the choice between a hosted API and a private GPU into a decision with a number attached rather than an argument.

Het dashboard voor administratiekosten en gebruik: totale kosten, gemiddelde kosten per gesprek, aantal gesprekken en minuten en kosten per minuut, een grafiek met de dagelijkse uitgaven, een uitsplitsing per kostensoort en per model, en de geldende tarieven.

Impact & resultaten

Werd bij de eerste beltoon opgenomen, en de prijs was vergelijkbaar met die van software.

Waar het bij een helpdesk om draait, is niet de abstracte nauwkeurigheid — het gaat erom of de oproep werd beantwoord en of het antwoord juist was. Vocale beantwoordt alle vragen, op elk uur van de dag, in de taal van de beller, en laat een transcript achter zodat de tweede vraag kan worden beantwoord. De onderstaande kosten zijn wat het platform gedurende een maand aan daadwerkelijke gesprekken in rekening heeft gebracht op het gehoste niveau; bij het zelfgehoste niveau wordt die lijn verplaatst naar hardware waarvoor het bedrijf al betaalt, en blijft het bedrag per minuut volledig stabiel.

Telefoonbereikbaarheid, zonder dienstrooster en zonder wachtrij
Kosten per gespreksminuut op basis van verbruik, gehost pakket
Talen waarnaar de agent kan worden omgeschakeld
Mogelijkheden: gehoste API of eigen GPU

Systeemontwerp

Wat een bedrijf via het dashboard kan doen

Stroomschema. Een gebruiker met een Yeastar-PBX of iets dergelijks logt in en komt terecht op een hoofddashboard, dat is onderverdeeld in zeven onderdelen: Telefonie en PBX-configuratie; Kennisbank met mogelijkheden om documenten te uploaden, te bekijken en te verwijderen; Configuratie van spraakagenten met instellingen voor systeemmeldingen en een testinterface voor chat en spraak; Live-activiteiten en monitoring met gespreksgeschiedenis en agentactiviteit; Integratie van het ticketsysteem met koppelen, aanmaken, bekijken, bewerken en verwijderen; Beheer van klantgegevens met koppeling aan de klantendatabase en het aanmaken van nieuwe klanten; en Accountbeheer met profiel bewerken, gegevens downloaden en account verwijderen.
Zeven werkgebieden achter één aanmelding. Telefonie en kennis worden eenmalig ingesteld; de dagelijkse gang van zaken bestaat uit operationele taken, ticketverwerking en klantgegevens.

Anatomie van een enkele spreekbeurt

Sequentiediagram van één gespreksbeurt. De WebRTC-audio van de gebruiker komt binnen bij een LiveKit-server, die de audioframes doorgeeft aan de agent. Spraakdetectie identificeert spraak, de buffer wordt naar Faster-Whisper gestuurd en levert een transcript op, de beurt van de gebruiker wordt opgeslagen in PostgreSQL, de chatcontext en -geschiedenis worden naar het Qwen3-8B-taalmodel gestuurd dat wordt aangeboden door vLLM, dat tokens terugstroomt, de tekst wordt genormaliseerd en samengevoegd tot zinnen voordat XTTS-v2 deze weergeeft als audioframes, de beurt van de assistent wordt opgeslagen en de audio wordt via WebRTC teruggestuurd naar de gebruiker.
Invoer en uitvoer in één keer — waarbij beide delen direct worden vastgelegd terwijl ze plaatsvinden. Op het zelfgehoste niveau is elke box binnen de agent een model dat op de eigen GPU van het bedrijf draait.

Wat er op te lossen viel

Midden in een zin onderbroken worden

Solution: Bellers onderbreken het antwoord zodra ze het hebben begrepen, en een medewerker die gewoon doorpraat, klinkt onnatuurlijk. Met spraakdetectie wordt het uitgaande geluid onderbroken zodra de beller iets zegt, waarna de tekst van de medewerker wordt ingekort tot wat er daadwerkelijk is gehoord — zodat het gesprek verdergaat op basis van het gesprek dat de beller heeft gevoerd, in plaats van het gesprek dat het systeem had gepland.

Stilte terwijl het nadenkt

Solution: Het doorzoeken van de documenten duurt net zo lang als het luisteren naar een verbroken telefoongesprek. De medewerker zegt na een halve seconde een korte, natuurlijke opvulzin en breekt die af zodra de zoekopdracht resultaat oplevert, waardoor er voldoende tijd is voor het ophalen van de informatie zonder dat er een stilte ontstaat.

Tekst die niet wordt voorgelezen

Solution: Tekst die voor het scherm is geschreven, is niet geschreven om te worden voorgelezen: geldbedragen, datums in cijfers, afkortingen. Een normalisatielaag zet bedragen, datums, tijden en afkortingen per taal om in hun gesproken vorm, voordat ze het spraakmodel bereiken.

Eén GPU, meerdere gesprekken

Solution: Bij een live spraaksessie worden de modellen in het videogeheugen opgeslagen, waardoor de capaciteit wordt beperkt door het VRAM en niet door de ruwe rekenkracht. Sessies worden per kaart toegewezen en de werklast wordt expliciet over de kaarten verdeeld — als men de standaardpooling laat werken, komen spraak- en taalverwerking op dezelfde GPU terecht en belemmeren ze elkaar.

Vragen

Nee. Vocale sluit aan op het telefoonsysteem dat u al gebruikt — Yeastar en compatibele SIP-platforms — en de oproepen blijven binnenkomen op de nummers die uw klanten al hebben. De verbinding wordt eenmalig tot stand gebracht via het dashboard, waarna de trunk en de routering automatisch worden ingesteld.

Gaan er na vijf uur telefoontjes verloren?

We zullen een medewerker met u in contact brengen.