<?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: Mahto Mohit</title>
    <description>The latest articles on DEV Community by Mahto Mohit (@mahto_mohit_b88d3dbd7e905).</description>
    <link>https://dev.to/mahto_mohit_b88d3dbd7e905</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3781312%2F1a248b06-70e0-442d-bb7a-0566c50cdc2a.png</url>
      <title>DEV Community: Mahto Mohit</title>
      <link>https://dev.to/mahto_mohit_b88d3dbd7e905</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mahto_mohit_b88d3dbd7e905"/>
    <language>en</language>
    <item>
      <title>From a Simple Voice Bot to a Real Voice Agent: My 10-Day VoiceForBharat Journey 🎙️🇮🇳</title>
      <dc:creator>Mahto Mohit</dc:creator>
      <pubDate>Sat, 15 Aug 2026 11:52:23 +0000</pubDate>
      <link>https://dev.to/mahto_mohit_b88d3dbd7e905/from-a-simple-voice-bot-to-a-real-voice-agent-my-10-day-voiceforbharat-journey-1ofe</link>
      <guid>https://dev.to/mahto_mohit_b88d3dbd7e905/from-a-simple-voice-bot-to-a-real-voice-agent-my-10-day-voiceforbharat-journey-1ofe</guid>
      <description>&lt;h1&gt;
  
  
  From a Simple Voice Bot to a Real Voice Agent: My 10-Day VoiceForBharat Journey 🎙️🇮🇳
&lt;/h1&gt;

&lt;p&gt;Ten days ago, I started the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; challenge with a very simple idea.&lt;/p&gt;

&lt;p&gt;I wanted to build a voice agent that could actually have a useful conversation with a person.&lt;/p&gt;

&lt;p&gt;At the beginning, it was basically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User speaks → AI understands → AI replies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But over the next 10 days, I kept adding one feature at a time.&lt;/p&gt;

&lt;p&gt;The agent learned to remember users, use tools, make outbound calls, ask for human help, track call history and finally hand conversations over to a specialist agent.&lt;/p&gt;

&lt;p&gt;I chose the &lt;strong&gt;Financial Services&lt;/strong&gt; track, and this challenge turned out to be much more than just making an AI speak.&lt;/p&gt;

&lt;p&gt;There was a lot of debugging, a lot of testing, and quite a few moments where something that was working suddenly stopped working. 😅&lt;/p&gt;

&lt;p&gt;But that was also the best part of the experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0p3embsaw6kmz6hsjlyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0p3embsaw6kmz6hsjlyq.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;FinGuard — my voice agent built for the Financial Services track.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  💡 Why I Chose Financial Services
&lt;/h2&gt;

&lt;p&gt;Financial services can be confusing for many people.&lt;/p&gt;

&lt;p&gt;There are government schemes, eligibility requirements, documents, deadlines and different rules to understand.&lt;/p&gt;

&lt;p&gt;A person shouldn't always have to search through multiple websites or read long documents just to get a basic answer.&lt;/p&gt;

&lt;p&gt;That's where I wanted voice AI to help.&lt;/p&gt;

&lt;p&gt;Instead of typing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What documents do I need for this government scheme?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;a user could simply ask the question by voice.&lt;/p&gt;

&lt;p&gt;The goal of my project was to make financial assistance feel more like a conversation instead of another complicated form.&lt;/p&gt;

&lt;p&gt;I also wanted the agent to know its limits.&lt;/p&gt;

&lt;p&gt;For financial use cases, giving a confident but incorrect answer can be worse than saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm not able to verify that information right now."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That became an important design principle throughout the project.&lt;/p&gt;


&lt;h1&gt;
  
  
  🎙️ What I Built
&lt;/h1&gt;

&lt;p&gt;My voice agent uses several technologies working together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LiveKit&lt;/strong&gt; — real-time voice communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deepgram&lt;/strong&gt; — speech-to-text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini&lt;/strong&gt; — language model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Murf Falcon&lt;/strong&gt; — text-to-speech&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; — backend and agent logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; — persistent memory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telephony/Linphone&lt;/strong&gt; — outbound calling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The basic flow looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0imkluvk6bx3jd83c7pk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0imkluvk6bx3jd83c7pk.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The voice pipeline connecting LiveKit, Deepgram, Gemini, memory, tools, specialist agents and Murf Falcon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The interesting part isn't any single component.&lt;/p&gt;

&lt;p&gt;The interesting part is how all of them work together during a real conversation.&lt;/p&gt;


&lt;h1&gt;
  
  
  🧠 Giving the Agent Memory
&lt;/h1&gt;

&lt;p&gt;One of the first problems I faced was that the agent had no memory.&lt;/p&gt;

&lt;p&gt;A user could have a conversation, end the call and come back later.&lt;/p&gt;

&lt;p&gt;The agent would basically start from zero again.&lt;/p&gt;

&lt;p&gt;So I added &lt;strong&gt;SQLite-based persistent memory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I created a way to store useful information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User ID&lt;/li&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;Language preference&lt;/li&gt;
&lt;li&gt;Relevant facts&lt;/li&gt;
&lt;li&gt;Last interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the agent can recognize a returning user and continue the conversation with some context from the previous interaction.&lt;/p&gt;

&lt;p&gt;For example, instead of treating the user like a completely new person every time, the agent can understand that it has interacted with them before.&lt;/p&gt;
&lt;h3&gt;
  
  
  But there was an important rule.
&lt;/h3&gt;

&lt;p&gt;The agent shouldn't just save everything automatically.&lt;/p&gt;

&lt;p&gt;It needs to ask the user before remembering new information.&lt;/p&gt;

&lt;p&gt;Something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Would you like me to remember this for your next conversation?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the user says no, that information shouldn't be saved.&lt;/p&gt;

&lt;p&gt;This made the memory feature much more meaningful because it wasn't just about storing data.&lt;/p&gt;

&lt;p&gt;It was also about &lt;strong&gt;consent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7gp5n3uqe657lhow3bj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7gp5n3uqe657lhow3bj0.png" alt=" " width="800" height="380"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;SQLite-based memory and call data used by FinGuard.&lt;/em&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  🔧 Giving the Agent Tools
&lt;/h1&gt;

&lt;p&gt;After memory, the next question was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if the agent needs information that isn't already in the conversation?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's where tools came in.&lt;/p&gt;

&lt;p&gt;For the Financial Services track, I added financial/scheme-related functionality that the agent can call when it needs specific information.&lt;/p&gt;

&lt;p&gt;For example, a user might ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you check if I qualify for this government scheme?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of simply generating an answer, the agent can collect the required information and use the appropriate tool.&lt;/p&gt;

&lt;p&gt;This was one of the biggest differences between a normal chatbot and the agent I was building.&lt;/p&gt;

&lt;p&gt;The agent wasn't only generating text.&lt;/p&gt;

&lt;p&gt;It was deciding:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Do I need to use a tool for this?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also paid attention to the failure case.&lt;/p&gt;

&lt;p&gt;If the tool or data source isn't available, the agent shouldn't silently fail or make up an answer.&lt;/p&gt;

&lt;p&gt;It should tell the user that the information couldn't be retrieved.&lt;/p&gt;

&lt;p&gt;For a financial application, I think this is extremely important.&lt;/p&gt;


&lt;h1&gt;
  
  
  📞 Making Outbound Calls
&lt;/h1&gt;

&lt;p&gt;Then came one of the most exciting parts of the challenge.&lt;/p&gt;

&lt;p&gt;Until this point, the user was starting the conversation.&lt;/p&gt;

&lt;p&gt;For Day 6, I worked on making the &lt;strong&gt;agent call the user&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I used a telephony setup with &lt;strong&gt;Linphone&lt;/strong&gt; for outbound calling.&lt;/p&gt;

&lt;p&gt;The use case I chose was related to financial scheme reminders.&lt;/p&gt;

&lt;p&gt;For example, imagine a user has already been identified as potentially eligible for a scheme and an important deadline is approaching.&lt;/p&gt;

&lt;p&gt;Instead of waiting for the user to remember, the voice agent can proactively make a call.&lt;/p&gt;

&lt;p&gt;The flow becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;System
   ↓
Trigger
   ↓
Voice Agent
   ↓
Outbound Call
   ↓
User
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;But outbound calls introduced a completely different voice experience.&lt;/p&gt;

&lt;p&gt;When someone receives an unexpected call, the agent has to explain itself quickly.&lt;/p&gt;

&lt;p&gt;It needs to tell the user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is calling&lt;/li&gt;
&lt;li&gt;Why it is calling&lt;/li&gt;
&lt;li&gt;What the call is about&lt;/li&gt;
&lt;li&gt;How the user can stop the interaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That made me realize that &lt;strong&gt;voice UX is just as important as the AI model&lt;/strong&gt;.&lt;/p&gt;


&lt;h1&gt;
  
  
  🙋 When AI Should Ask for Human Help
&lt;/h1&gt;

&lt;p&gt;Another important feature I worked on was &lt;strong&gt;human escalation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;While building the agent, I realized that a good AI agent shouldn't try to answer every possible question.&lt;/p&gt;

&lt;p&gt;There are situations where the right thing to do is to involve a human.&lt;/p&gt;

&lt;p&gt;So instead of forcing the AI to continue a conversation when it isn't confident or the situation requires human support, the agent can ask for human help.&lt;/p&gt;

&lt;p&gt;This is especially important in financial services.&lt;/p&gt;

&lt;p&gt;I would rather have my agent say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'll connect you with someone who can help with this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;than confidently provide incorrect information.&lt;/p&gt;

&lt;p&gt;For me, this was an important lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A smarter agent isn't the one that answers everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes, it's the one that knows when to stop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fan2wlcuxoeejavc2zpgm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fan2wlcuxoeejavc2zpgm.png" alt=" " width="800" height="619"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Human escalation requests are tracked when the AI should not handle a situation alone.&lt;/em&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  📊 Keeping Track of Calls
&lt;/h1&gt;

&lt;p&gt;Once the agent could handle more complex conversations and phone calls, I wanted to know what was actually happening during those interactions.&lt;/p&gt;

&lt;p&gt;So I worked on &lt;strong&gt;call history and analytics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The system can keep track of previous call interactions so they can be reviewed later.&lt;/p&gt;

&lt;p&gt;This is useful because building an AI agent isn't only about making the conversation work.&lt;/p&gt;

&lt;p&gt;You also need to understand what happened during the conversation.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previous calls&lt;/li&gt;
&lt;li&gt;Call outcomes&lt;/li&gt;
&lt;li&gt;User interactions&lt;/li&gt;
&lt;li&gt;Conversation history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;can help when improving the system later.&lt;/p&gt;

&lt;p&gt;It also gave me a better idea of how a real voice AI application would be monitored.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc83ofslhdal594c1tts.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc83ofslhdal594c1tts.png" alt=" " width="800" height="754"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Call analytics showing previous voice interactions and their outcomes.&lt;/em&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  🤝 One Agent Doesn't Need to Do Everything
&lt;/h1&gt;

&lt;p&gt;For Day 9, I added one of my favorite features:&lt;/p&gt;
&lt;h2&gt;
  
  
  Government Scheme Specialist Agent
&lt;/h2&gt;

&lt;p&gt;Initially, I had one main agent handling everything.&lt;/p&gt;

&lt;p&gt;But that's not necessarily the best architecture.&lt;/p&gt;

&lt;p&gt;A real support system might have different specialists for different problems.&lt;/p&gt;

&lt;p&gt;So I created a separate specialist whose job is focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Government schemes&lt;/li&gt;
&lt;li&gt;Scheme eligibility&lt;/li&gt;
&lt;li&gt;Required documents&lt;/li&gt;
&lt;li&gt;Scheme-related questions&lt;/li&gt;
&lt;li&gt;Basic scheme guidance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main agent remains the primary agent.&lt;/p&gt;

&lt;p&gt;If the user asks a normal financial question, the main agent answers it.&lt;/p&gt;

&lt;p&gt;But if the user needs detailed government scheme assistance, the main agent can hand the conversation over.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you check if I am eligible for this government scheme?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Main Agent:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'll connect you with our government scheme specialist who can help you with the eligibility details."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then the specialist takes over.&lt;/p&gt;

&lt;p&gt;The important part is that the user doesn't have to explain the whole problem again.&lt;/p&gt;

&lt;p&gt;The relevant context is passed to the specialist.&lt;/p&gt;

&lt;p&gt;This made the system feel much more like a team of AI agents instead of one huge prompt trying to do everything.&lt;/p&gt;


&lt;h1&gt;
  
  
  🔐 Guardrails and Safety
&lt;/h1&gt;

&lt;p&gt;Because I chose the Financial Services track, I had to think carefully about what information the agent should and shouldn't ask for.&lt;/p&gt;

&lt;p&gt;The agent should never ask users for things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OTPs&lt;/li&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;PINs&lt;/li&gt;
&lt;li&gt;Bank credentials&lt;/li&gt;
&lt;li&gt;Unnecessary account numbers&lt;/li&gt;
&lt;li&gt;Sensitive information that isn't needed for the task&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also shouldn't make claims like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You are officially approved for this scheme."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, it should explain that any eligibility result is based on the information available and that final approval belongs to the relevant authority.&lt;/p&gt;

&lt;p&gt;This was one of the biggest differences between building a normal demo chatbot and building something for a real-world financial use case.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa1x9xl61aq66mtva2slv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa1x9xl61aq66mtva2slv.png" alt=" " width="740" height="525"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;FinGuard's financial safety guardrails and user-facing security guidance.&lt;/em&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  🎙️ Why Murf Falcon Was Important
&lt;/h1&gt;

&lt;p&gt;For a voice agent, the response isn't just text.&lt;/p&gt;

&lt;p&gt;The user has to listen to it.&lt;/p&gt;

&lt;p&gt;That means the voice needs to feel natural enough that the conversation doesn't feel like someone is reading a generated paragraph.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;Murf Falcon&lt;/strong&gt; for the text-to-speech part of my project.&lt;/p&gt;

&lt;p&gt;The agent generates a response, and Murf Falcon converts that response into speech so the user can hear it in real time.&lt;/p&gt;

&lt;p&gt;The challenge also helped me understand how much the voice experience depends on the complete pipeline.&lt;/p&gt;

&lt;p&gt;Even if the LLM response is good, the experience can still feel bad if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Speech recognition is slow&lt;/li&gt;
&lt;li&gt;The response takes too long&lt;/li&gt;
&lt;li&gt;TTS isn't configured correctly&lt;/li&gt;
&lt;li&gt;Audio doesn't reach the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So voice AI is really a combination of several systems working together.&lt;/p&gt;


&lt;h1&gt;
  
  
  🧩 The Main Architecture
&lt;/h1&gt;

&lt;p&gt;At a high level, the system can be thought of like this:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    USER
                     │
                     ▼
              ┌─────────────┐
              │   LiveKit   │
              │ Voice Layer │
              └──────┬──────┘
                     │
                     ▼
              ┌─────────────┐
              │  Deepgram   │
              │     STT     │
              └──────┬──────┘
                     │
                     ▼
              ┌─────────────┐
              │   Gemini    │
              │ Main Agent  │
              └──────┬──────┘
                     │
          ┌──────────┼───────────┐
          │          │           │
          ▼          ▼           ▼
       SQLite      Tools     Specialist
       Memory                  Agent
          │          │           │
          └──────────┼───────────┘
                     │
                     ▼
              ┌─────────────┐
              │ Murf Falcon │
              │     TTS     │
              └──────┬──────┘
                     │
                     ▼
                    USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For outbound calls, the telephony layer connects the agent to the user's phone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftet3d31c6hidnk3ok4m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftet3d31c6hidnk3ok4m7.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;em&gt;The Main Architecture&lt;/em&gt;
&lt;/h2&gt;
&lt;h1&gt;
  
  
  😅 What Was Actually Difficult?
&lt;/h1&gt;

&lt;p&gt;This challenge wasn't:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write code → everything works → done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wish it was. 😅&lt;/p&gt;

&lt;p&gt;There were quite a few issues during development.&lt;/p&gt;

&lt;p&gt;I faced problems with things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LiveKit configuration&lt;/li&gt;
&lt;li&gt;Voice/TTS configuration&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Agent connections&lt;/li&gt;
&lt;li&gt;Telephony&lt;/li&gt;
&lt;li&gt;Outbound calling&lt;/li&gt;
&lt;li&gt;Backend/frontend communication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One problem I faced was related to the TTS voice configuration.&lt;/p&gt;

&lt;p&gt;The voice I initially tried wasn't supported with the model configuration I was using.&lt;/p&gt;

&lt;p&gt;There were also times when the agent itself was running, but the expected voice response wasn't coming through.&lt;/p&gt;

&lt;p&gt;That's where debugging became important.&lt;/p&gt;

&lt;p&gt;Instead of looking at the entire application as one big problem, I started checking each part separately:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Is LiveKit connected?
        ↓
Is STT receiving audio?
        ↓
Is the LLM generating a response?
        ↓
Is TTS receiving the response?
        ↓
Is audio coming back?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Breaking the system into smaller pieces made debugging much easier.&lt;/p&gt;

&lt;p&gt;I learned that with real-time AI applications, &lt;strong&gt;knowing how to debug the pipeline is just as important as knowing how to build it.&lt;/strong&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  🛠️ How Someone Can Start Building a Voice Agent
&lt;/h1&gt;

&lt;p&gt;If you want to build something similar, I would strongly recommend starting small.&lt;/p&gt;

&lt;p&gt;Don't try to build memory, tools, telephony and multiple agents on day one.&lt;/p&gt;

&lt;p&gt;Start with the basic voice pipeline:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Speech
   ↓
STT
   ↓
LLM
   ↓
TTS
   ↓
Speech
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Once that works, add features one by one.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Clone the project
&lt;/h2&gt;

&lt;p&gt;My project is publicly available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/mohit2003116/ai-voice-agent" rel="noopener noreferrer"&gt;https://github.com/mohit2003116/ai-voice-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can clone it using:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/mohit2003116/ai-voice-agent.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ai-voice-agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The backend is inside the &lt;code&gt;backend&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Install dependencies
&lt;/h2&gt;

&lt;p&gt;The project uses &lt;code&gt;uv&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This installs the dependencies defined by the project.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Configure API keys
&lt;/h2&gt;

&lt;p&gt;The project needs API credentials for the services being used.&lt;/p&gt;

&lt;p&gt;Keep them in environment variables rather than writing them directly into the code.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LIVEKIT_URL=your_livekit_url
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret

DEEPGRAM_API_KEY=your_deepgram_api_key
MURF_API_KEY=your_murf_api_key
GOOGLE_API_KEY=your_google_api_key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The values above are only examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never publish your real API keys on GitHub.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Also don't publish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private phone numbers&lt;/li&gt;
&lt;li&gt;Caller information&lt;/li&gt;
&lt;li&gt;Personal user data&lt;/li&gt;
&lt;li&gt;Private credentials&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  4. Run the agent
&lt;/h2&gt;

&lt;p&gt;Once the environment variables and dependencies are configured, start the backend using the project's configured agent startup command.&lt;/p&gt;

&lt;p&gt;For development, my agent can be run through the Python/uv environment.&lt;/p&gt;

&lt;p&gt;Then connect the frontend or configured telephony setup and start testing.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. Test the conversation
&lt;/h2&gt;

&lt;p&gt;Start with something simple.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hello, can you help me understand a government scheme?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then gradually test:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you remember my name?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Can you check my eligibility?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And finally test the specialist handoff:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I need detailed help with a government scheme."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Testing one feature at a time makes it much easier to find where something is going wrong.&lt;/p&gt;


&lt;h1&gt;
  
  
  📈 What I Would Improve Next
&lt;/h1&gt;

&lt;p&gt;Even though the challenge is completed, I don't consider the project finished.&lt;/p&gt;

&lt;p&gt;There are still many things I want to improve.&lt;/p&gt;

&lt;p&gt;Some of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better latency&lt;/li&gt;
&lt;li&gt;More Indian language support&lt;/li&gt;
&lt;li&gt;More reliable financial data sources&lt;/li&gt;
&lt;li&gt;Better call analytics&lt;/li&gt;
&lt;li&gt;Better monitoring and error handling&lt;/li&gt;
&lt;li&gt;More specialist agents&lt;/li&gt;
&lt;li&gt;A more production-ready telephony setup&lt;/li&gt;
&lt;li&gt;Better privacy and consent management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would also like to experiment with having multiple specialist agents working together.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Main Agent
    │
    ├── Government Scheme Specialist
    │
    ├── Financial Education Specialist
    │
    └── Document Assistance Specialist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That could make the system much more flexible.&lt;/p&gt;


&lt;h1&gt;
  
  
  🎯 What I Learned From the Challenge
&lt;/h1&gt;

&lt;p&gt;When I started, I thought the biggest challenge would be:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How do I make an AI talk?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After 10 days, I realized that's actually just the beginning.&lt;/p&gt;

&lt;p&gt;The harder questions are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should the agent remember something?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should it use a tool?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should it make an outbound call?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should it ask for human help?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should it hand the conversation to another agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And maybe the most important one:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should it admit that it doesn't know something?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's what changed my thinking during this challenge.&lt;/p&gt;

&lt;p&gt;A voice agent isn't just an LLM with a microphone.&lt;/p&gt;

&lt;p&gt;It's a complete system where speech recognition, reasoning, tools, memory, voice generation, telephony and safety all have to work together.&lt;/p&gt;


&lt;h1&gt;
  
  
  🚀 Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Looking back at where I started 10 days ago and where the project is now, I'm genuinely happy with the progress.&lt;/p&gt;

&lt;p&gt;It started as a simple voice conversation.&lt;/p&gt;

&lt;p&gt;Then it learned to remember.&lt;/p&gt;

&lt;p&gt;Then it learned to use tools.&lt;/p&gt;

&lt;p&gt;Then it learned to make calls.&lt;/p&gt;

&lt;p&gt;Then it learned when to ask a human.&lt;/p&gt;

&lt;p&gt;Then it learned how to hand a conversation to a specialist.&lt;/p&gt;

&lt;p&gt;And along the way, I learned a lot about building and debugging real-time AI systems.&lt;/p&gt;

&lt;p&gt;The challenge may be over, but I'm definitely not done building.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔗 Project Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mohit2003116" rel="noopener noreferrer"&gt;
        mohit2003116
      &lt;/a&gt; / &lt;a href="https://github.com/mohit2003116/ai-voice-agent" rel="noopener noreferrer"&gt;
        ai-voice-agent
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Voice Agent Starter — Powered by Murf Falcon&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Build a production voice AI agent in 5 minutes. Powered by the fastest TTS on the market - swap the system prompt to build anything from customer support to language tutors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt; &lt;a href="https://murf.ai/api/docs/text-to-speech/streaming" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/db7bf12a5f5585a33fb99e43d713c1496533102576907c6643e488221cf247d1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5454532d4d75726625323046616c636f6e2d363336364631" alt="Murf Falcon"&gt;&lt;/a&gt; &lt;a href="https://docs.livekit.io" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fda4f125b93984f962dc38580531fb47772deab77b73e246180e581a8cae1c92/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5472616e73706f72742d4c6976654b69742d303032636632" alt="LiveKit"&gt;&lt;/a&gt; &lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7e5467cebf1145e2e9b56585b8b28c31ec43e55e8daa2e9ee2f6abe2fe78fe28/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d3030374143433f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt; &lt;a href="https://www.python.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aa310a519d421027705c2a5553e301bdea1fa6e331b3cd73e02a9ba368f077d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302b2d3337373641423f6c6f676f3d707974686f6e266c6f676f436f6c6f723d7768697465" alt="Python"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why Murf Falcon&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;55ms model latency&lt;/strong&gt; - fastest production TTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;130ms time-to-first-audio&lt;/strong&gt; across 10+ global regions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.01/1000 characters&lt;/strong&gt; - up to 10x cheaper than alternatives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;150+ voices&lt;/strong&gt; across 35+ languages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;99.38% pronunciation accuracy&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;
&lt;/div&gt;


  &lt;div class="js-render-enrichment-target"&gt;
    &lt;div class="render-plaintext-hidden"&gt;
      &lt;pre&gt;flowchart LR
    A[🎙️ User speaks] --&amp;gt;|audio| B[Deepgram STT]
    B --&amp;gt;|text| C[LLM]
    C --&amp;gt;|response text| D[Murf Falcon TTS]
    D --&amp;gt;|audio| E[LiveKit]
    E --&amp;gt;|stream| F[🔊 User hears]

    style A fill:#444441,stroke:#888780,color:#fff
    style B fill:#185FA5,stroke:#85B7EB,color:#fff
    style C fill:#534AB7,stroke:#AFA9EC,color:#fff
    style D fill:#0F6E56,stroke:#5DCAA5,color:#fff
    style E fill:#D85A30,stroke:#F0997B,color:#fff
    style F fill:#444441,stroke:#888780,color:#fff
&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;span class="js-render-enrichment-loader d-flex flex-justify-center flex-items-center width-full"&gt;
    &lt;span&gt;
      &lt;span class="sr-only"&gt;Loading&lt;/span&gt;
&lt;/span&gt;
  &lt;/span&gt;





&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quickstart&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prerequisites&lt;/h3&gt;

&lt;/div&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Python&lt;/strong&gt; 3.10+&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;a href="https://docs.astral.sh/uv/" rel="nofollow noopener noreferrer"&gt;uv&lt;/a&gt;&lt;/strong&gt; - fast Python package manager

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; macOS/Linux&lt;/span&gt;
curl -LsSf https://astral.sh/uv/install.sh &lt;span class="pl-k"&gt;|&lt;/span&gt; sh
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Windows (PowerShell)&lt;/span&gt;
powershell -ExecutionPolicy ByPass -c &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;irm https://astral.sh/uv/install.ps1 | iex&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js&lt;/strong&gt; 18+&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pnpm&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/mohit2003116/ai-voice-agent" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;LinkedIn Demo / Journey:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/mohit-kumar-mahto-05b122325_10daysofaivoiceagents-murffalcon-voiceforbharat-share-7494250358081417216-U0ug/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAAFIQy8cB028-0ExVOK4Kz1r0n_NPk-f03qA" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4D22AQHWACYvwBNYBw%2Ffeedshare-shrink_800%2FB4DaADs_O9JwBs-%2F0%2F1786768520683%3Fe%3D2147483647%26v%3Dbeta%26t%3DgjZCkRL940HAF52d2Zv5hKNlYI7xDX6lxw2Rbf_M6AY" height="640" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/mohit-kumar-mahto-05b122325_10daysofaivoiceagents-murffalcon-voiceforbharat-share-7494250358081417216-U0ug/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAAFIQy8cB028-0ExVOK4Kz1r0n_NPk-f03qA" rel="noopener noreferrer" class="c-link"&gt;
            #10daysofaivoiceagents #murffalcon #voiceforbharat #voiceai #aiagents #livekit #ai #buildinpublic #murfai | Mohit kumar Mahto
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🚀 10 Days of Voice Agents — Completed!!

10 days ago, I started this challenge with a very simple idea -- I wanted to build a voice agent that could do more than just answer questions.

I chose the Financial Services track, and honestly, these 10 days were full of learning, debugging, and a lot of things that didn't work on the first try. 😅
During these 10 days, I added different features to my voice agent step by step:

🧠 Memory
I added SQLite so the agent can remember users and continue conversations instead of forgetting everything after a call.

🔧 Tools
The agent can use financial tools when it needs specific information instead of simply making up an answer.

📞 Outbound Calls
I worked on making the agent call a user instead of always waiting for the user to call it.

🙋 Human Escalation
The agent can understand when a situation needs human help instead of trying to answer everything itself.

📊 Call History
I also added call history so I can see and track previous interactions.

🤝 Specialist Agent
One of my favourite parts was adding a separate Government Scheme Specialist. Now the main agent can hand over a scheme-related conversation to the specialist without asking the user to explain everything again.

And of course, the voice side was powered using Murf Falcon, with LiveKit, Deepgram, Gemini and other tools working together behind the scenes.The hardest part for me was honestly not writing the first version.

It was debugging everything when something went wrong especially voice configuration, telephony and getting all the different components to work together properly.

There were times when something work then suddenly something  broke. 😅

But that is probably what I learned the most from this challenge. A voice agent is not just about making an AI talk.

It has to know when to remember, when to use a tool, when to call, when to ask a human for help and when to hand the conversation to another agent.
I'm really happy with how much the project changed in just 10 days.

Big thanks to Murf AI for giving me the opportunity to build and learn through the 10 Days of Voice Agents — VoiceForBharat Edition.

This challenge is over, but I'm definitely not done building. 🚀

#10DaysofAIVoiceAgents #MurfFalcon #VoiceForBharat #VoiceAI #AIAgents #LiveKit #ai #BuildInPublic #murfai 
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt;&lt;br&gt;
10 Days of Voice Agents — VoiceForBharat Edition&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Thank You
&lt;/h2&gt;

&lt;p&gt;A big thank you to &lt;strong&gt;Murf AI&lt;/strong&gt; for organizing the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The 10 days were a mix of coding, debugging, experimenting and learning.&lt;/p&gt;

&lt;p&gt;Most importantly, it gave me a chance to build something from scratch and understand what it actually takes to turn a simple AI conversation into a complete voice agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built with LiveKit, Deepgram, Gemini, SQLite and Murf Falcon.&lt;/strong&gt; 🎙️🚀&lt;br&gt;
@murfai&lt;/p&gt;

&lt;h1&gt;
  
  
  10DaysofAIVoiceAgents #MurfFalcon #VoiceForBharat #VoiceAI #AIAgents #GenerativeAI #LiveKit #BuildInPublic
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>api</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
