<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fabien Ledoux</title>
    <description>The latest articles on DEV Community by Fabien Ledoux (@fabienledoux).</description>
    <link>https://dev.to/fabienledoux</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3462866%2F6400a728-2926-4d99-8cec-1f71d7990e41.png</url>
      <title>DEV Community: Fabien Ledoux</title>
      <link>https://dev.to/fabienledoux</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fabienledoux"/>
    <language>en</language>
    <item>
      <title>Building Gaia: Our Journey Creating a Custom Voicebot for Customer Service</title>
      <dc:creator>Fabien Ledoux</dc:creator>
      <pubDate>Sun, 31 Aug 2025 15:41:18 +0000</pubDate>
      <link>https://dev.to/fabienledoux/building-gaia-our-journey-creating-a-custom-voicebot-for-customer-service-1gb</link>
      <guid>https://dev.to/fabienledoux/building-gaia-our-journey-creating-a-custom-voicebot-for-customer-service-1gb</guid>
      <description>&lt;p&gt;Hi everyone 👋, I’m Fabien, CEO of ContactMedia, a customer relationship center based in Avignon, France. While I’m not a developer myself, our team decided to take on a very technical challenge: building our own voicebot, which we called Gaia.&lt;/p&gt;

&lt;p&gt;In this post, I’d like to share our journey — why we built it, what tech stack we used, the challenges we faced, and the lessons we learned along the way.&lt;/p&gt;

&lt;p&gt;Why Build Instead of Buy?&lt;/p&gt;

&lt;p&gt;When exploring voicebots, we quickly realized that off-the-shelf solutions were either:&lt;/p&gt;

&lt;p&gt;Too rigid (hard to adapt to our clients’ workflows), or&lt;/p&gt;

&lt;p&gt;Too expensive for continuous experimentation.&lt;/p&gt;

&lt;p&gt;So we took the hard path: building our own. Our goal wasn’t to compete with big tech, but to create a tailored, flexible bot we could train and iterate on.&lt;/p&gt;

&lt;p&gt;The Core Architecture&lt;/p&gt;

&lt;p&gt;Like most voicebots, Gaia is powered by three main components:&lt;/p&gt;

&lt;p&gt;Speech-to-Text (STT): Converts customer speech into text.&lt;/p&gt;

&lt;p&gt;We experimented with Google Speech-to-Text and Whisper (by OpenAI).&lt;/p&gt;

&lt;p&gt;Whisper provided excellent accuracy with noisy environments, but latency was higher.&lt;/p&gt;

&lt;p&gt;Natural Language Understanding (NLU): Extracts intent from text.&lt;/p&gt;

&lt;p&gt;We started with Rasa NLU and also tested Dialogflow.&lt;/p&gt;

&lt;p&gt;Rasa gave us more flexibility in training domain-specific intents.&lt;/p&gt;

&lt;p&gt;Text-to-Speech (TTS): Turns responses back into voice.&lt;/p&gt;

&lt;p&gt;We tested Amazon Polly and Microsoft Azure TTS.&lt;/p&gt;

&lt;p&gt;Azure’s neural voices gave the most natural experience for French.&lt;/p&gt;

&lt;p&gt;We orchestrated everything via a Node.js backend, connected to SIP telephony APIs for real-time call handling.&lt;/p&gt;

&lt;p&gt;Handling Real-World Complexity&lt;/p&gt;

&lt;p&gt;Some of the challenges we faced:&lt;/p&gt;

&lt;p&gt;Accents and dialects: French has strong regional variations. Training custom language models with our call data significantly improved accuracy.&lt;/p&gt;

&lt;p&gt;Interruptions and overlaps: Customers often talk over the bot. We had to implement “barge-in” handling so Gaia could stop talking when the caller resumed.&lt;/p&gt;

&lt;p&gt;Fallback logic: No NLU is perfect. We designed clear fallbacks — confirming intent, asking clarifying questions, or escalating to a human agent.&lt;/p&gt;

&lt;p&gt;Latency: Even 500ms delay feels unnatural in a phone conversation. Optimizing our pipeline (especially TTS) was critical.&lt;/p&gt;

&lt;p&gt;Measuring Success&lt;/p&gt;

&lt;p&gt;We didn’t want to judge Gaia only by “calls automated.” Instead, we tracked:&lt;/p&gt;

&lt;p&gt;Task success rate: Did the bot achieve the goal (e.g., booking an appointment)?&lt;/p&gt;

&lt;p&gt;Average handling time: Was it faster than a human?&lt;/p&gt;

&lt;p&gt;Customer satisfaction surveys: Did callers feel the experience was acceptable?&lt;/p&gt;

&lt;p&gt;So far, Gaia handles ~60% of appointment scheduling calls without human help.&lt;/p&gt;

&lt;p&gt;Key Lessons&lt;/p&gt;

&lt;p&gt;Start with narrow use cases. Appointment scheduling was the easiest entry point.&lt;/p&gt;

&lt;p&gt;Design for escalation. Customers need to know they can reach a human.&lt;/p&gt;

&lt;p&gt;Continuously retrain. New slang, new accents, new cases — the bot must evolve.&lt;/p&gt;

&lt;p&gt;Latency is UX. Users forgive mistakes, but not long pauses.&lt;/p&gt;

&lt;p&gt;What’s Next&lt;/p&gt;

&lt;p&gt;We’re now exploring:&lt;/p&gt;

&lt;p&gt;Adding sentiment analysis to detect frustration.&lt;/p&gt;

&lt;p&gt;Better context handling across multi-turn conversations.&lt;/p&gt;

&lt;p&gt;Using fine-tuned LLMs (like GPT-4o-mini) for more natural dialogues.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Building Gaia was a huge technical challenge for a mid-sized company like ours. But it showed us something important: you don’t need to be a Silicon Valley giant to experiment with conversational AI.&lt;/p&gt;

&lt;p&gt;If you’re a dev curious about voicebots, my advice is simple: start small, iterate fast, and always design with the human in mind.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>networking</category>
      <category>voicebot</category>
    </item>
  </channel>
</rss>
