<?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: Shazil Parwez</title>
    <description>The latest articles on DEV Community by Shazil Parwez (@shazil).</description>
    <link>https://dev.to/shazil</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Shazil Parwez</title>
      <link>https://dev.to/shazil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shazil"/>
    <language>en</language>
    <item>
      <title>Building FinSathi: My 10-Day Journey from a Voice Agent to a Multi-Agent Financial Assistant</title>
      <dc:creator>Shazil Parwez</dc:creator>
      <pubDate>Sat, 15 Aug 2026 13:46:50 +0000</pubDate>
      <link>https://dev.to/shazil/building-finsathi-my-10-day-journey-from-a-voice-agent-to-a-multi-agent-financial-assistant-7ok</link>
      <guid>https://dev.to/shazil/building-finsathi-my-10-day-journey-from-a-voice-agent-to-a-multi-agent-financial-assistant-7ok</guid>
      <description>&lt;h1&gt;
  
  
  Building FinSaathi: My 10-Day Journey from a Voice Agent to a Multi-Agent Financial Assistant
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What happens when you spend 10 days teaching an AI voice agent not just to talk, but to actually remember, use tools, make calls, ask humans for help, analyze its performance, and delegate work to another agent?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That was my challenge.&lt;/p&gt;

&lt;p&gt;As part of the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt;, I built &lt;strong&gt;FinSaathi&lt;/strong&gt;, a voice-based Financial Services assistant designed around one simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Financial information should be easier to access, easier to understand, and safer to interact with.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What started as a voice conversation gradually became a complete agent system with &lt;strong&gt;memory, tools, telephony, human escalation, analytics, and specialist-agent handoffs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is the story of how I built it.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What Is FinSaathi?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FinSaathi&lt;/strong&gt; is a voice-based Financial Services assistant designed to help users understand financial schemes, digital banking safety, and related financial-literacy topics through natural conversations.&lt;/p&gt;

&lt;p&gt;The target user doesn't need to type long questions or navigate complicated interfaces.&lt;/p&gt;

&lt;p&gt;They can simply &lt;strong&gt;speak&lt;/strong&gt;.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"Mujhe PMJJBY ke baare mein thoda bataiye."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🗣️ &lt;strong&gt;"UPI fraud se safe kaise rahun?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FinSaathi responds conversationally and can continue the interaction in &lt;strong&gt;Hindi, English, or Hinglish&lt;/strong&gt;, depending on how the user communicates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Voice?
&lt;/h3&gt;

&lt;p&gt;Financial information can sometimes feel intimidating, especially when users have to navigate forms, websites, or unfamiliar terminology.&lt;/p&gt;

&lt;p&gt;Voice changes that interaction.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Search → Read → Understand → Repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the experience becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Speak → Ask → Listen → Continue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes voice particularly interesting for &lt;strong&gt;accessibility, conversational guidance, and users who are more comfortable communicating verbally&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🏗️ The Architecture
&lt;/h1&gt;

&lt;p&gt;At a high level, the system looks 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        │
                     │  Voice / Browser │
                     └────────┬─────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │  Speech-to-Text  │
                     └────────┬─────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │    FinSaathi     │
                     │    Main Agent    │
                     └────────┬─────────┘
                              │
                ┌─────────────┼───────────────┐
                │             │               │
                ▼             ▼               ▼
             Memory         Tools       Human Escalation
                │             │               │
                │             │               │
                └─────────────┼───────────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │ Specialist Agent │
                     │   SchemeSathi    │
                     └────────┬─────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │  Text-to-Speech  │
                     │   Murf Falcon    │
                     └────────┬─────────┘
                              │
                              ▼
                     ┌──────────────────┐
                     │   User hears     │
                     │    response      │
                     └──────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F133qcof8991n6dtz65gw.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%2F133qcof8991n6dtz65gw.png" alt=" " width="800" height="449"&gt;&lt;/a&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%2F9idm80gb6gnzfqe4ol45.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%2F9idm80gb6gnzfqe4ol45.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎙️ Why Murf Falcon?
&lt;/h2&gt;

&lt;p&gt;A voice agent needs more than an accurate text response.&lt;/p&gt;

&lt;p&gt;It needs to respond quickly enough that the conversation still feels like a conversation.&lt;/p&gt;

&lt;p&gt;For this project, I used &lt;strong&gt;Murf Falcon&lt;/strong&gt; as the TTS layer because it is designed for real-time voice-agent interactions.&lt;/p&gt;

&lt;p&gt;The important part for me wasn't simply generating speech.&lt;/p&gt;

&lt;p&gt;It was reducing the gap between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The AI generated an answer."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"The AI is actually talking to me."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That difference becomes especially noticeable during &lt;strong&gt;interruptions, follow-up questions, and multi-turn conversations&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 The Agent's Personality and Guardrails
&lt;/h1&gt;

&lt;p&gt;One of the first things I learned is that a voice agent needs more than a model.&lt;/p&gt;

&lt;p&gt;It needs &lt;strong&gt;boundaries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;FinSaathi was designed with a clear identity and purpose, along with financial-safety guardrails.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 Sensitive Information FinSaathi Must Never Request
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OTPs&lt;/li&gt;
&lt;li&gt;PINs&lt;/li&gt;
&lt;li&gt;UPI PINs&lt;/li&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;CVVs&lt;/li&gt;
&lt;li&gt;Full bank account numbers&lt;/li&gt;
&lt;li&gt;Full card numbers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It must also never promise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;❌ Guaranteed scheme approval&lt;/li&gt;
&lt;li&gt;❌ Guaranteed enrollment&lt;/li&gt;
&lt;li&gt;❌ Guaranteed financial outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a user asks about an account-specific issue or an application status, FinSaathi doesn't pretend to have access to information it doesn't have.&lt;/p&gt;

&lt;p&gt;Instead, it directs the user toward the appropriate official channel.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;A good AI agent isn't just defined by what it can do. It is also defined by what it refuses to do.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🇮🇳 Hindi, English and Hinglish
&lt;/h1&gt;

&lt;p&gt;India isn't a single-language conversational environment.&lt;/p&gt;

&lt;p&gt;A user might start in Hindi, insert an English technical term, and switch back to Hindi in the same sentence.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Mujhe PMJJBY ki eligibility check karni hai."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"UPI payment karte time safe kaise reh sakta hoon?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FinSaathi was designed to handle this kind of &lt;strong&gt;code-mixed conversation&lt;/strong&gt; naturally.&lt;/p&gt;

&lt;p&gt;The goal wasn't to force users into a particular language.&lt;/p&gt;

&lt;p&gt;The goal was to let the user &lt;strong&gt;communicate naturally&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 Giving FinSaathi Memory
&lt;/h1&gt;

&lt;p&gt;On &lt;strong&gt;Day 4&lt;/strong&gt;, FinSaathi learned something extremely important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Users shouldn't have to introduce themselves every time.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I added persistent user memory using a database.&lt;/p&gt;

&lt;p&gt;The stored information is intentionally limited to useful conversational context.&lt;/p&gt;

&lt;p&gt;A simplified record looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user_123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"language_preference"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hinglish"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"facts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"preferred_scheme"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PMJJBY"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_interaction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"timestamp"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The actual implementation should only store information that is useful and appropriate for future interactions.&lt;/p&gt;

&lt;p&gt;I also added an important rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔐 &lt;strong&gt;Ask before saving personal information.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the user doesn't want something remembered, the system shouldn't save it.&lt;/p&gt;

&lt;p&gt;This made memory feel less like hidden tracking and more like an &lt;strong&gt;explicit conversational feature&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;Another major shift happened when FinSaathi stopped relying only on the model's internal knowledge.&lt;/p&gt;

&lt;p&gt;On &lt;strong&gt;Day 5&lt;/strong&gt;, I added domain-specific tools.&lt;/p&gt;

&lt;p&gt;The basic architecture became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User asks a question
        ↓
FinSaathi understands intent
        ↓
Does this require external data?
        ↓
       Yes
        ↓
     Tool Call
        ↓
 Real / Available Data
        ↓
FinSaathi explains the result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;An AI model can &lt;strong&gt;generate an answer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A tool can &lt;strong&gt;retrieve or calculate something&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those are not the same thing.&lt;/p&gt;

&lt;p&gt;I also designed failure handling so that if a data source is unavailable, the agent doesn't silently fail or invent an answer.&lt;/p&gt;

&lt;p&gt;Instead, it explains that the information could not be retrieved.&lt;/p&gt;




&lt;h1&gt;
  
  
  📞 Making FinSaathi Call Users
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Day 6&lt;/strong&gt; introduced one of the most interesting pieces of the project:&lt;/p&gt;

&lt;h2&gt;
  
  
  Outbound Voice Calls
&lt;/h2&gt;

&lt;p&gt;Instead of waiting for the user to open the browser and start a conversation, FinSaathi could &lt;strong&gt;initiate a call&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I integrated &lt;strong&gt;LiveKit's SIP capabilities&lt;/strong&gt; with a telephony setup using &lt;strong&gt;Linphone&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The basic flow became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
Outbound Call API
   ↓
LiveKit Room
   ↓
FinSaathi Agent
   ↓
SIP Participant
   ↓
Phone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This changed the experience from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Come talk to my AI."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"My AI can proactively reach out to me."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That opened up an entirely different set of possibilities for &lt;strong&gt;reminders and proactive assistance&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  👤 Knowing When to Ask a Human
&lt;/h1&gt;

&lt;p&gt;One of the most important design decisions came on &lt;strong&gt;Day 7&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An AI agent shouldn't try to solve everything.&lt;/p&gt;

&lt;p&gt;For Financial Services, situations involving &lt;strong&gt;possible fraud or decisions beyond the agent's authority&lt;/strong&gt; should trigger human assistance.&lt;/p&gt;

&lt;p&gt;So I introduced a human-help workflow.&lt;/p&gt;

&lt;p&gt;The agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identifies a situation requiring human help.&lt;/li&gt;
&lt;li&gt;Explains what information it wants to share.&lt;/li&gt;
&lt;li&gt;Asks the user for permission.&lt;/li&gt;
&lt;li&gt;Creates a human-help request.&lt;/li&gt;
&lt;li&gt;Gives the user a reference ID.&lt;/li&gt;
&lt;li&gt;Explains what happens next.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🚫 Escalation Data Must Stay Safe
&lt;/h3&gt;

&lt;p&gt;The escalation summary should &lt;strong&gt;not&lt;/strong&gt; contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;OTPs&lt;/li&gt;
&lt;li&gt;PINs&lt;/li&gt;
&lt;li&gt;Account numbers&lt;/li&gt;
&lt;li&gt;Unnecessary private information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This created a simple principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🛡️ &lt;strong&gt;AI should know when it has reached the edge of its authority.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  📊 Measuring the Agent
&lt;/h1&gt;

&lt;p&gt;On &lt;strong&gt;Day 8&lt;/strong&gt;, I added a &lt;strong&gt;Call Analytics Dashboard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The agent works."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to measure what actually happened.&lt;/p&gt;

&lt;p&gt;The dashboard tracks:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total Calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Total number of calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Successful Calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Calls completed successfully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failed Calls&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Calls that failed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Success Rate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Percentage of successful calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The values come from &lt;strong&gt;actual call outcomes rather than hardcoded numbers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For FinSaathi, a successful call can mean that the user successfully completes an eligibility interaction or receives the required information.&lt;/p&gt;

&lt;p&gt;This creates a feedback loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice Call
    ↓
Call Outcome
    ↓
Database
    ↓
Analytics
    ↓
Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fkab83f3nltd6ec4mzd0j.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%2Fkab83f3nltd6ec4mzd0j.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was an important shift from building an &lt;strong&gt;AI demo&lt;/strong&gt; to thinking about an &lt;strong&gt;AI system&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🤝 Teaching One Agent to Delegate
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Day 9&lt;/strong&gt; was probably the most interesting architectural step.&lt;/p&gt;

&lt;p&gt;I didn't want FinSaathi to pretend it was an expert in everything.&lt;/p&gt;

&lt;p&gt;So I introduced a second agent:&lt;/p&gt;

&lt;h2&gt;
  
  
  SchemeSathi
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SchemeSathi&lt;/strong&gt; is a Government Scheme Specialist focused specifically on detailed government-scheme questions.&lt;/p&gt;

&lt;p&gt;Now the system looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                         FinSaathi
                             │
                  ┌──────────┴──────────┐
                  │                     │
          Normal Question       Specialist Question
                  │                     │
                  ▼                     ▼
             FinSaathi             SchemeSathi
                                     Specialist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example: Normal Question
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"UPI fraud se safe kaise rahun?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FinSaathi handles it directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: Specialist Question
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"PMJJBY ki detailed eligibility aur required documents kya hain?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;FinSaathi recognizes that the question needs specialized assistance.&lt;/p&gt;

&lt;p&gt;It tells the user:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Main aapko Government Scheme Specialist se connect karta hoon. Aapko apni query dobara explain nahi karni padegi."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then &lt;strong&gt;SchemeSathi&lt;/strong&gt; takes over.&lt;/p&gt;

&lt;p&gt;The specialist already receives the relevant context.&lt;/p&gt;

&lt;p&gt;So it can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Aapne PMJJBY ki eligibility aur required documents ke baare mein poocha tha. Main wahi se continue karta hoon."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The user doesn't have to repeat the question.&lt;/p&gt;

&lt;p&gt;This is where the project started feeling less like a chatbot and more like a &lt;strong&gt;multi-agent system&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧩 The Biggest Lessons From Building FinSaathi
&lt;/h1&gt;

&lt;p&gt;The biggest lesson wasn't about one specific API.&lt;/p&gt;

&lt;p&gt;It was learning how many moving pieces are required to make a voice agent actually useful.&lt;/p&gt;

&lt;p&gt;A voice agent is not simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM + TTS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice
  +
Real-time transport
  +
LLM
  +
Prompting
  +
Tools
  +
Memory
  +
Safety
  +
Error handling
  +
Telephony
  +
Human escalation
  +
Analytics
  +
Specialist routing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every new capability introduced another failure point.&lt;/p&gt;

&lt;p&gt;And that taught me to think more like a &lt;strong&gt;systems engineer&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧯 The Difficult Parts
&lt;/h1&gt;

&lt;p&gt;The challenge wasn't completely smooth.&lt;/p&gt;

&lt;p&gt;And honestly, that's one of the most useful parts of building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Outbound Calling
&lt;/h2&gt;

&lt;p&gt;Getting the outbound voice flow working required more than simply adding a &lt;strong&gt;"Call"&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;There was a chain involving:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
Backend
   ↓
LiveKit
   ↓
SIP Trunk
   ↓
Telephony Client
   ↓
Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A problem anywhere in that chain could result in a call that connected but didn't behave as expected.&lt;/p&gt;

&lt;p&gt;Debugging the call path taught me to inspect the system &lt;strong&gt;layer by layer&lt;/strong&gt; instead of assuming the model itself was the problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Tool Reliability
&lt;/h2&gt;

&lt;p&gt;Tools introduce another failure mode.&lt;/p&gt;

&lt;p&gt;The model might correctly decide that it needs external information, but the external source can still fail.&lt;/p&gt;

&lt;p&gt;That meant the agent needed &lt;strong&gt;explicit failure behavior&lt;/strong&gt;.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"I don't know."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or worse:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Inventing an answer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;the agent should communicate that the requested data could not currently be retrieved.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Context Transfer
&lt;/h2&gt;

&lt;p&gt;The specialist handoff introduced another subtle problem.&lt;/p&gt;

&lt;p&gt;It isn't enough to create a second agent.&lt;/p&gt;

&lt;p&gt;The second agent needs to understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Why am I here?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Without context transfer, the user ends up explaining the same thing twice.&lt;/p&gt;

&lt;p&gt;That defeats one of the main advantages of delegation.&lt;/p&gt;

&lt;p&gt;So I treated &lt;strong&gt;context as part of the handoff itself&lt;/strong&gt; rather than simply switching agents.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛠️ How to Build Your Own Voice Agent
&lt;/h1&gt;

&lt;p&gt;If you want to build something similar, don't start by trying to build everything at once.&lt;/p&gt;

&lt;p&gt;Start with the &lt;strong&gt;smallest possible voice loop&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Understand the Core Architecture
&lt;/h2&gt;

&lt;p&gt;At minimum, you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Speech-to-Text
      ↓
     LLM
      ↓
Text-to-Speech
      ↓
Real-Time Audio Transport
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;🧠 Memory&lt;/li&gt;
&lt;li&gt;🔧 Tools&lt;/li&gt;
&lt;li&gt;🛡️ Guardrails&lt;/li&gt;
&lt;li&gt;📞 Telephony&lt;/li&gt;
&lt;li&gt;👤 Human Escalation&lt;/li&gt;
&lt;li&gt;📊 Analytics&lt;/li&gt;
&lt;li&gt;🤝 Specialist Agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This incremental approach makes debugging much easier.&lt;/p&gt;




&lt;h1&gt;
  
  
  🚀 2. Create the Project
&lt;/h1&gt;

&lt;p&gt;A typical structure can look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;voice-agent/
│
├── backend/
│   └── src/
│       ├── agent.py
│       ├── prompt.py
│       ├── tools/
│       ├── database/
│       └── outbound_call.py
│
├── frontend/
│   ├── app/
│   ├── components/
│   └── ...
│
├── .env.local
├── .gitignore
└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep the agent logic separate from the frontend.&lt;/p&gt;

&lt;p&gt;That makes it much easier to test and extend later.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔐 3. Keep API Keys Out of Your Code
&lt;/h1&gt;

&lt;p&gt;Never write secrets directly inside Python or JavaScript files.&lt;/p&gt;

&lt;p&gt;Use environment variables.&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;MURF_API_KEY=your_murf_api_key
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then access them from your application environment.&lt;/p&gt;

&lt;p&gt;Your &lt;code&gt;.env&lt;/code&gt; files should be included in &lt;code&gt;.gitignore&lt;/code&gt;.&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;.env
.env.local
.env.*.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And commit a safe example file instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MURF_API_KEY=your_api_key_here
LIVEKIT_API_KEY=your_api_key_here
LIVEKIT_API_SECRET=your_api_secret_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Never publish:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔑 API keys&lt;/li&gt;
&lt;li&gt;🔐 SIP credentials&lt;/li&gt;
&lt;li&gt;📞 Phone numbers&lt;/li&gt;
&lt;li&gt;👤 Caller information&lt;/li&gt;
&lt;li&gt;🗄️ Database credentials&lt;/li&gt;
&lt;li&gt;🔒 Private conversation data&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎙️ 4. Connect Your Agent
&lt;/h1&gt;

&lt;p&gt;Once your environment variables are configured:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the backend.&lt;/li&gt;
&lt;li&gt;Start the frontend.&lt;/li&gt;
&lt;li&gt;Start/connect the real-time transport.&lt;/li&gt;
&lt;li&gt;Open the voice interface.&lt;/li&gt;
&lt;li&gt;Grant microphone permission.&lt;/li&gt;
&lt;li&gt;Start a conversation.&lt;/li&gt;
&lt;li&gt;Verify that speech reaches the agent.&lt;/li&gt;
&lt;li&gt;Verify that the response comes back as audio.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first milestone should simply be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I can speak
      ↓
The agent understands
      ↓
The agent speaks back
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Don't add memory or telephony before this works reliably.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 5. Add Tools and Memory
&lt;/h1&gt;

&lt;p&gt;Once the basic voice loop works:&lt;/p&gt;

&lt;p&gt;Add memory for information that genuinely improves future conversations.&lt;/p&gt;

&lt;p&gt;Then add tools for information that the model should &lt;strong&gt;not simply guess&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A useful rule is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;If the answer can change or needs verification, consider using a tool instead of relying entirely on the model.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🛡️ 6. Add Guardrails Before Going Further
&lt;/h1&gt;

&lt;p&gt;This is especially important for sensitive domains.&lt;/p&gt;

&lt;p&gt;Define clearly:&lt;/p&gt;

&lt;h3&gt;
  
  
  What the agent CAN do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Explain&lt;/li&gt;
&lt;li&gt;Guide&lt;/li&gt;
&lt;li&gt;Retrieve information&lt;/li&gt;
&lt;li&gt;Ask clarifying questions&lt;/li&gt;
&lt;li&gt;Summarize&lt;/li&gt;
&lt;li&gt;Escalate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What the agent CANNOT do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;❌ Request sensitive credentials&lt;/li&gt;
&lt;li&gt;❌ Guarantee financial outcomes&lt;/li&gt;
&lt;li&gt;❌ Pretend to access private accounts&lt;/li&gt;
&lt;li&gt;❌ Invent unavailable information&lt;/li&gt;
&lt;li&gt;❌ Make decisions outside its authority&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Writing these boundaries &lt;strong&gt;before adding advanced capabilities&lt;/strong&gt; makes the rest of the system much safer.&lt;/p&gt;




&lt;h1&gt;
  
  
  📞 7. Add Telephony Carefully
&lt;/h1&gt;

&lt;p&gt;Once browser-based conversations work, telephony can be added.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Phone
    ↓
SIP / Telephony
    ↓
Real-Time Communication Layer
    ↓
Voice Agent
    ↓
TTS
    ↓
Phone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start with a number you control and test the entire call lifecycle.&lt;/p&gt;

&lt;p&gt;Don't immediately build complicated outbound workflows.&lt;/p&gt;

&lt;p&gt;First prove:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent can call
      ↓
User answers
      ↓
Agent speaks
      ↓
Call ends
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then add business logic.&lt;/p&gt;




&lt;h1&gt;
  
  
  🤝 8. Add Human and Specialist Escalation
&lt;/h1&gt;

&lt;p&gt;Once the agent can operate independently, teach it &lt;strong&gt;when to stop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are two very different forms of escalation.&lt;/p&gt;

&lt;h3&gt;
  
  
  👤 Human Escalation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI → Human
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this when the situation requires human authority or intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤖 Specialist Handoff
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Main Agent → Specialist Agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this when another AI agent has narrower expertise.&lt;/p&gt;

&lt;p&gt;Keeping these concepts separate makes the architecture much cleaner.&lt;/p&gt;




&lt;h1&gt;
  
  
  📊 9. Measure What Actually Happens
&lt;/h1&gt;

&lt;p&gt;Finally, build analytics around &lt;strong&gt;real events&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Don't hardcode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Total Calls = 100
Successful Calls = 85
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Call
 ↓
Outcome
 ↓
Database
 ↓
Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That turns a demo into something you can actually evaluate.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔮 What's Next for FinSaathi?
&lt;/h1&gt;

&lt;p&gt;The 10-day challenge is over, but FinSaathi doesn't have to be.&lt;/p&gt;

&lt;p&gt;There are several directions I'd like to explore next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More financial-literacy workflows&lt;/li&gt;
&lt;li&gt;Better multilingual support&lt;/li&gt;
&lt;li&gt;More verified financial-data tools&lt;/li&gt;
&lt;li&gt;Improved specialist routing&lt;/li&gt;
&lt;li&gt;More robust evaluation&lt;/li&gt;
&lt;li&gt;Better observability&lt;/li&gt;
&lt;li&gt;Production-grade authentication&lt;/li&gt;
&lt;li&gt;Stronger privacy controls&lt;/li&gt;
&lt;li&gt;More sophisticated analytics&lt;/li&gt;
&lt;li&gt;Deployment at scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to make FinSaathi answer everything.&lt;/p&gt;

&lt;p&gt;The goal is to make it &lt;strong&gt;useful, trustworthy, and responsible&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🎓 What I Learned
&lt;/h1&gt;

&lt;p&gt;If I had to summarize the entire 10-day challenge in a few lessons, they would be:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Voice Changes the UX
&lt;/h2&gt;

&lt;p&gt;A voice agent isn't just a chatbot with audio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn-taking, latency, interruptions, tone, and language all matter.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Tools Make Agents More Useful
&lt;/h2&gt;

&lt;p&gt;An LLM can reason about a request, but tools allow the system to &lt;strong&gt;interact with the real world&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Memory Needs Boundaries
&lt;/h2&gt;

&lt;p&gt;Remembering everything isn't necessarily a feature.&lt;/p&gt;

&lt;p&gt;Good memory means remembering the &lt;strong&gt;right things&lt;/strong&gt;, with user awareness and consent.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Safety Should Be Designed, Not Added Later
&lt;/h2&gt;

&lt;p&gt;Especially in Financial Services, guardrails aren't optional.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Agents Need to Know Their Limits
&lt;/h2&gt;

&lt;p&gt;Sometimes the best answer isn't an AI-generated answer.&lt;/p&gt;

&lt;p&gt;Sometimes it's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"I need a human."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And sometimes it's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"I'll connect you to a specialist."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. A Working System Is More Than a Working Model
&lt;/h2&gt;

&lt;p&gt;The model is only one part of the product.&lt;/p&gt;

&lt;p&gt;The real engineering challenge is connecting all the pieces &lt;strong&gt;reliably&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;Ten days ago, I started with the idea of building a voice agent.&lt;/p&gt;

&lt;p&gt;Today, &lt;strong&gt;FinSaathi&lt;/strong&gt; can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎙️ Hold voice conversations&lt;/li&gt;
&lt;li&gt;🇮🇳 Communicate naturally in Hindi/Hinglish&lt;/li&gt;
&lt;li&gt;🛡️ Follow financial safety guardrails&lt;/li&gt;
&lt;li&gt;🧠 Remember returning users&lt;/li&gt;
&lt;li&gt;🔧 Use domain-specific tools&lt;/li&gt;
&lt;li&gt;📞 Make outbound calls&lt;/li&gt;
&lt;li&gt;👤 Escalate to human support&lt;/li&gt;
&lt;li&gt;📊 Track call outcomes&lt;/li&gt;
&lt;li&gt;🤝 Hand specialized conversations to another AI agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's probably the biggest thing I learned:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Building an AI agent isn't about giving a model more capabilities. It's about designing a system that knows what to do, when to do it, and when not to do it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'm incredibly glad I took on the &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; challenge.&lt;/p&gt;

&lt;p&gt;It pushed me beyond simply building an AI model and into thinking about &lt;strong&gt;product design, real-time systems, safety, reliability, and agent architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Huge thanks to the team behind the challenge and to &lt;strong&gt;Murf AI&lt;/strong&gt; for creating an environment where builders could experiment with voice agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And this is only the beginning. 🚀&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;💻 GitHub Repository&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ShazilParwez/vox-nova/tree/day10" rel="noopener noreferrer"&gt;https://github.com/ShazilParwez/vox-nova/tree/day10&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Live Demo&lt;/p&gt;

&lt;p&gt;Day 4 [&lt;a href="https://www.linkedin.com/posts/shazil-parwez_voiceforbharat-activity-7492141057862799361-P98H?utm_source=social_share_send&amp;amp;utm_medium=member_desktop_web&amp;amp;rcm=ACoAAFGqLokBOy5Fxt_Vd6OGVOwKhGPH8G_8tQw" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/shazil-parwez_voiceforbharat-activity-7492141057862799361-P98H?utm_source=social_share_send&amp;amp;utm_medium=member_desktop_web&amp;amp;rcm=ACoAAFGqLokBOy5Fxt_Vd6OGVOwKhGPH8G_8tQw&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Day 6 [&lt;a href="https://www.linkedin.com/posts/shazil-parwez_voiceforbharat-10daysofvoiceagents-murfai-activity-7492960482925064194-1yV3?utm_source=social_share_send&amp;amp;utm_medium=member_desktop_web&amp;amp;rcm=ACoAAFGqLokBOy5Fxt_Vd6OGVOwKhGPH8G_8tQw" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/shazil-parwez_voiceforbharat-10daysofvoiceagents-murfai-activity-7492960482925064194-1yV3?utm_source=social_share_send&amp;amp;utm_medium=member_desktop_web&amp;amp;rcm=ACoAAFGqLokBOy5Fxt_Vd6OGVOwKhGPH8G_8tQw&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>javascript</category>
      <category>python</category>
      <category>voiceai</category>
    </item>
  </channel>
</rss>
