<?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: Subhranshu Kumar Parhi</title>
    <description>The latest articles on DEV Community by Subhranshu Kumar Parhi (@subhranshu).</description>
    <link>https://dev.to/subhranshu</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%2F4078040%2F9ca81e35-e879-495f-9337-c9430d95d808.jpg</url>
      <title>DEV Community: Subhranshu Kumar Parhi</title>
      <link>https://dev.to/subhranshu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/subhranshu"/>
    <language>en</language>
    <item>
      <title>I built a voice health agent for Bharat in 10 days.</title>
      <dc:creator>Subhranshu Kumar Parhi</dc:creator>
      <pubDate>Fri, 14 Aug 2026 19:03:02 +0000</pubDate>
      <link>https://dev.to/subhranshu/i-built-a-voice-health-agent-for-bharat-in-10-days-1oaa</link>
      <guid>https://dev.to/subhranshu/i-built-a-voice-health-agent-for-bharat-in-10-days-1oaa</guid>
      <description>&lt;p&gt;title: "I Built a Voice Health Agent for Bharat in 10 Days"&lt;br&gt;
published: true&lt;br&gt;
tags: voiceai, ai, python, livekit&lt;br&gt;
cover_image: &lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/f8grt2lufyuahwxe23h8.jpg" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/f8grt2lufyuahwxe23h8.jpg&lt;/a&gt;&lt;br&gt;
Github : &lt;a href="https://github.com/subhranshuparh/Voice-Agent.git" rel="noopener noreferrer"&gt;https://github.com/subhranshuparh/Voice-Agent.git&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="http://www.linkedin.com/in/subhranshu-parhi-021562350" rel="noopener noreferrer"&gt;www.linkedin.com/in/subhranshu-parhi-021562350&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  I Built a Voice Health Agent for Bharat in 10 Days
&lt;/h1&gt;

&lt;p&gt;What if you could call a healthcare assistant, speak naturally in Hindi or English, and get help without typing anything?&lt;/p&gt;

&lt;p&gt;That's the idea behind &lt;strong&gt;Aarogya Mitra—a voice-first AI health access assistant I built during the **10 Days of Voice Agents—#VoiceForBharat Edition&lt;/strong&gt; challenge powered by Murf AI.&lt;/p&gt;

&lt;p&gt;Over 10 days, I worked on real-time voice interaction, multilingual conversations, healthcare tools, consent-based memory, human escalation, outbound calls, specialist agent handoffs, and call analytics.&lt;/p&gt;

&lt;p&gt;This is the story of what I built, the challenges I faced, and what I learned while building it.&lt;/p&gt;


&lt;h2&gt;
  
  
  🏥 The Problem
&lt;/h2&gt;

&lt;p&gt;India has a huge and diverse healthcare ecosystem, but navigating healthcare services isn't always easy.&lt;/p&gt;

&lt;p&gt;For many people, especially in rural and semi-urban areas, accessing information can involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding the nearest healthcare center&lt;/li&gt;
&lt;li&gt;Understanding government health schemes&lt;/li&gt;
&lt;li&gt;Knowing which documents are required&lt;/li&gt;
&lt;li&gt;Booking appointments&lt;/li&gt;
&lt;li&gt;Getting vaccination or medication reminders&lt;/li&gt;
&lt;li&gt;Reaching a human when an AI assistant cannot help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For someone with limited digital literacy, typing into a website isn't necessarily the easiest interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice can be much more natural.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of searching through a portal, someone could simply ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"मेरे नज़दीक कौन सा PHC है?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;"Which PHC is nearest to me?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That became the core idea behind &lt;strong&gt;Aarogya Mitra&lt;/strong&gt;.&lt;/p&gt;


&lt;h1&gt;
  
  
  🎙️ What Is Aarogya Mitra?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Aarogya Mitra&lt;/strong&gt; is a full-stack, real-time voice AI health access assistant designed to help citizens navigate public healthcare services through natural conversation.&lt;/p&gt;

&lt;p&gt;The goal isn't to replace doctors.&lt;/p&gt;

&lt;p&gt;Instead, the agent acts as a &lt;strong&gt;health access assistant&lt;/strong&gt; — helping users find information, navigate services, and connect with human support when necessary.&lt;/p&gt;
&lt;h3&gt;
  
  
  What can it do?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🏥 Find nearby PHCs and hospitals&lt;/li&gt;
&lt;li&gt;💳 Explain Ayushman Bharat / PM-JAY eligibility&lt;/li&gt;
&lt;li&gt;📄 Explain required documents&lt;/li&gt;
&lt;li&gt;📅 Help with clinic appointments&lt;/li&gt;
&lt;li&gt;📞 Make outbound vaccination and medication reminder calls&lt;/li&gt;
&lt;li&gt;👨‍⚕️ Escalate complex cases to human supervisors&lt;/li&gt;
&lt;li&gt;🧠 Remember returning callers with explicit consent&lt;/li&gt;
&lt;li&gt;📊 Track calls through analytics&lt;/li&gt;
&lt;li&gt;🛑 Process opt-out requests immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make healthcare access simpler through voice.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🧠 How the System Works
&lt;/h1&gt;

&lt;p&gt;The core pipeline is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🎙️ User speaks
       ↓
Deepgram Nova-3
Speech → Text
       ↓
Google Gemini
Reasoning + Tool Calls + Guardrails
       ↓
Murf Falcon
Text → Speech
       ↓
LiveKit
Real-time audio transport
       ↓
🔊 User hears the response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Technology Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Speech-to-Text&lt;/td&gt;
&lt;td&gt;Deepgram Nova-3&lt;/td&gt;
&lt;td&gt;Multilingual transcription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Google Gemini&lt;/td&gt;
&lt;td&gt;Reasoning and tool calls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text-to-Speech&lt;/td&gt;
&lt;td&gt;Murf Falcon&lt;/td&gt;
&lt;td&gt;Natural Indian voice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transport&lt;/td&gt;
&lt;td&gt;LiveKit&lt;/td&gt;
&lt;td&gt;Real-time voice communication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Agent logic and tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;td&gt;Voice interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;SQLite&lt;/td&gt;
&lt;td&gt;Memory and analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The backend connects the entire pipeline through the &lt;strong&gt;LiveKit Agents SDK&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🇮🇳 1. Giving the Agent an Indian Voice
&lt;/h1&gt;

&lt;p&gt;One of the first things I changed was the TTS voice.&lt;/p&gt;

&lt;p&gt;I used &lt;strong&gt;Murf Falcon with the Anisha voice&lt;/strong&gt;, an Indian English voice designed for natural conversations.&lt;/p&gt;

&lt;p&gt;I also configured different voices for specialist agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anisha&lt;/strong&gt; → Main Aarogya Mitra agent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pooja&lt;/strong&gt; → Appointment Specialist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samar&lt;/strong&gt; → Health Scheme Specialist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The voice should feel familiar to Indian users.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The TTS configuration looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;murf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;TTS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;voice&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Anisha&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Conversation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;SentenceTokenizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;min_sentence_len&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;text_pacing&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The low latency of the voice pipeline helped make the conversation feel much closer to a real phone conversation rather than a traditional chatbot.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛡️ 2. Safety Guardrails
&lt;/h1&gt;

&lt;p&gt;Healthcare is a sensitive domain, so I didn't want the agent to behave like a doctor.&lt;/p&gt;

&lt;p&gt;The system prompt defines "Aarogya Mitra" as&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"An empathetic and reliable voice health access assistant."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent does &lt;strong&gt;not&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diagnose medical conditions&lt;/li&gt;
&lt;li&gt;Prescribe medication&lt;/li&gt;
&lt;li&gt;Pretend to be a doctor&lt;/li&gt;
&lt;li&gt;Invent medical information&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Main doctor nahi hu aur diagnosis ya prescription dawa nahi bata sakta. Kripya certified doctor se consult karein."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system also has an emergency escalation flow for serious situations such as chest pain or breathing difficulties.&lt;/p&gt;

&lt;p&gt;The biggest lesson here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In healthcare AI, knowing what not to do is just as important as knowing what to do.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🗣️ 3. Hindi + English + Hinglish
&lt;/h1&gt;

&lt;p&gt;One of the most interesting parts of this project was multilingual interaction.&lt;/p&gt;

&lt;p&gt;I configured Deepgram Nova-3 for multilingual speech recognition and used LiveKit's multilingual turn detection.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Hindi
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"मुझे पास का अस्पताल बताओ"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  English
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where is the nearest hospital?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Hinglish
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;"Mera health card kaise apply karu?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Real conversations in India aren't always purely Hindi or purely English.&lt;/p&gt;

&lt;p&gt;People naturally switch between languages.&lt;/p&gt;

&lt;p&gt;I also instructed the LLM to generate Hindi using &lt;strong&gt;Devanagari script&lt;/strong&gt; instead of Romanized Hindi.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;❌ namaste, aap kaise hain?

✅ नमस्ते, आप कैसे हैं?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This improved the naturalness of the TTS output.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 4. Memory for Returning Callers
&lt;/h1&gt;

&lt;p&gt;I wanted Aarogya Mitra to become more useful when someone returns.&lt;/p&gt;

&lt;p&gt;The system stores caller information in SQLite &lt;strong&gt;only with explicit consent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Possible information includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;District&lt;/li&gt;
&lt;li&gt;Language preference&lt;/li&gt;
&lt;li&gt;Appointment history&lt;/li&gt;
&lt;li&gt;Other permitted profile information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent can retrieve a caller using a tool like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nd"&gt;@function_tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lookup_caller&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

    &lt;span class="n"&gt;profile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_user_profile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No record found for this caller.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent always asks for consent before saving information.&lt;/p&gt;

&lt;p&gt;It also supports a &lt;strong&gt;"forget me"&lt;/strong&gt; command that removes stored caller records.&lt;/p&gt;




&lt;h1&gt;
  
  
  🏥 5. Healthcare Domain Tools
&lt;/h1&gt;

&lt;p&gt;A voice agent becomes much more useful when it can actually perform actions instead of only generating text.&lt;/p&gt;

&lt;p&gt;I built domain-specific healthcare tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  PHC Lookup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lookup_nearest_phc(district)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool provides information about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHCs&lt;/li&gt;
&lt;li&gt;District hospitals&lt;/li&gt;
&lt;li&gt;Jan Aushadhi Kendras&lt;/li&gt;
&lt;li&gt;OPD timings&lt;/li&gt;
&lt;li&gt;Doctor availability&lt;/li&gt;
&lt;li&gt;Bed information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current prototype contains data for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Patna&lt;/li&gt;
&lt;li&gt;Varanasi&lt;/li&gt;
&lt;li&gt;Lucknow&lt;/li&gt;
&lt;li&gt;Jaipur&lt;/li&gt;
&lt;li&gt;Bhopal&lt;/li&gt;
&lt;li&gt;Ranchi&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scheme Eligibility
&lt;/h3&gt;

&lt;p&gt;I also created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;check_scheme_eligibility(scheme_name)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides information about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ayushman Bharat / PM-JAY&lt;/li&gt;
&lt;li&gt;Eligibility&lt;/li&gt;
&lt;li&gt;Coverage&lt;/li&gt;
&lt;li&gt;Required documents&lt;/li&gt;
&lt;li&gt;Relevant helpline information&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  👨‍⚕️ 6. Human Escalation
&lt;/h1&gt;

&lt;p&gt;An AI assistant shouldn't try to handle every situation itself.&lt;/p&gt;

&lt;p&gt;When a case requires human assistance, Aarogya Mitra can create a human escalation request.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User needs human assistance
        ↓
Agent explains what will be shared
        ↓
Ask for explicit consent
        ↓
User says YES
        ↓
create_human_help_request()
        ↓
Generate reference ID
        ↓
Give reference ID to caller
        ↓
Optional supervisor notification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Kya main aapki details supervisor team ko send kar du?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the user agrees, the system generates a reference ID such as the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESC-47823
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that the reference ID comes from the backend tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The LLM is never allowed to invent it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also added automatic redaction for sensitive information such as the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aadhaar numbers&lt;/li&gt;
&lt;li&gt;OTPs&lt;/li&gt;
&lt;li&gt;PINs&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  📞 7. Outbound Health Reminder Calls
&lt;/h1&gt;

&lt;p&gt;Aarogya Mitra also supports outbound health reminder calls.&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 shell"&gt;&lt;code&gt;uv run python src/outbound_dialer.py &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--to&lt;/span&gt; +919876543210 &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Ramesh Kumar"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--reminder&lt;/span&gt; &lt;span class="s2"&gt;"Polio Booster"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can also process a CSV campaign:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run python src/outbound_dialer.py &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--csv&lt;/span&gt; health_reminders.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The outbound agent starts with a scripted introduction and provides an opt-out mechanism.&lt;/p&gt;

&lt;p&gt;If someone says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Stop calling me."&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Mujhe call mat karo."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The opt-out tool is triggered.&lt;/p&gt;

&lt;p&gt;This taught me an important lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Voice automation should always respect the user's ability to say no.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🤖 8. Multi-Agent Handoffs
&lt;/h1&gt;

&lt;p&gt;One of my favorite architectural features was the &lt;strong&gt;specialist agent system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of making one huge agent responsible for everything, I created specialist agents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Aarogya Mitra
                       |
          ┌────────────┴────────────┐
          ↓                         ↓
Appointment Specialist       Scheme Specialist
       Pooja                       Samar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a caller wants to book an appointment, the Aarogya Mitra transfers the conversation to the appointment specialist.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;transfer_to_appointment_specialist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RunContext&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;

    &lt;span class="n"&gt;specialist&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AppointmentSpecialistAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;chat_ctx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;exclude_instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;call_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;specialist&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Main aapko hamare Clinic aur &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Appointment Specialist se connect &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kar raha hu.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The conversation context is preserved during the handoff.&lt;/p&gt;

&lt;p&gt;The specialist can then use the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;check_available_slots()
book_clinic_appointment()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture makes the system easier to scale because every specialist has its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt&lt;/li&gt;
&lt;li&gt;Voice&lt;/li&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Responsibilities&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  📊 9. Call Analytics
&lt;/h1&gt;

&lt;p&gt;Every call is logged in SQLite.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Successful calls&lt;/li&gt;
&lt;li&gt;Failed calls&lt;/li&gt;
&lt;li&gt;Call duration&lt;/li&gt;
&lt;li&gt;Channel&lt;/li&gt;
&lt;li&gt;Actions taken&lt;/li&gt;
&lt;li&gt;Failure category&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failure categories include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user_hungup_early
user_declined_consent
tool_or_api_error
no_action_taken
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This provides the foundation for a future real-time analytics dashboard.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧩 Challenges I Faced
&lt;/h1&gt;

&lt;p&gt;Building the agent wasn't simply about connecting APIs.&lt;/p&gt;

&lt;p&gt;Most of the interesting work happened when things &lt;strong&gt;didn't work as expected&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenge 1 — Hindi TTS Pronunciation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Problem
&lt;/h3&gt;

&lt;p&gt;Initially, the LLM generated Romanized Hindi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namaste, aap kaise hain?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The voice could pronounce it, but it didn't feel as natural as native Hindi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;I added an explicit system instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Always write every language in its own native script.

Hindi → Devanagari

Never romanize Hindi.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lesson
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TTS quality isn't only about the voice model. The text you send to the model matters too.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Challenge 2 — The LLM Inventing Reference IDs
&lt;/h2&gt;

&lt;p&gt;Before the escalation tool executed, the LLM could sometimes say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your ticket ID is ESC-12345.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while the backend generated the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ESC-47823
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That creates a serious reliability problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;I added:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NEVER INVENT OR SPEAK A REFERENCE ID
BEFORE CALLING THE TOOL.

ALWAYS WAIT FOR THE TOOL OUTPUT.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also added automated tests to catch this behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Never let an LLM invent identifiers that should come from your backend.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Challenge 3 — Multilingual Turn Detection
&lt;/h2&gt;

&lt;p&gt;The default English turn detector sometimes interrupted Hindi sentences before the caller had finished speaking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;I switched to LiveKit's multilingual turn detection.&lt;/p&gt;

&lt;p&gt;This improved sentence-boundary detection for Hindi and English conversations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lesson
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A good voice agent needs to understand not only what the user says, but when they have finished speaking.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Challenge 4 — Enforcing Consent
&lt;/h2&gt;

&lt;p&gt;I needed to make sure the agent could never create a human escalation request without permission.&lt;/p&gt;

&lt;p&gt;Prompt instructions alone weren't enough.&lt;/p&gt;

&lt;p&gt;So I used two layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1 — System prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before invoking create_human_help_request,
you MUST ask the caller for permission.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Layer 2 — Tool validation
&lt;/h3&gt;

&lt;p&gt;The tool checks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;user_permission_granted&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If permission isn't granted, the tool refuses to create the request.&lt;/p&gt;

&lt;p&gt;This is a simple example of &lt;strong&gt;defense in depth for AI systems&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  🏗️ Voice Agent Architecture
&lt;/h1&gt;

&lt;p&gt;The minimum architecture requires four major components:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;STT&lt;/td&gt;
&lt;td&gt;Speech → Text&lt;/td&gt;
&lt;td&gt;Deepgram Nova-3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Reasoning + Response&lt;/td&gt;
&lt;td&gt;Google Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TTS&lt;/td&gt;
&lt;td&gt;Text → Speech&lt;/td&gt;
&lt;td&gt;Murf Falcon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transport&lt;/td&gt;
&lt;td&gt;Real-time audio&lt;/td&gt;
&lt;td&gt;LiveKit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The complete flow 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;                    🎙️ USER
                       |
                       ↓
             Deepgram Nova-3 STT
                  Multilingual
                       |
                       ↓
               Google Gemini
            Reasoning + Tool Calls
                       |
          ┌────────────┼─────────────┐
          ↓            ↓             ↓
       PHC Tool    Scheme Tool   Memory Tool
          |            |             |
          └────────────┼─────────────┘
                       ↓
                 Murf Falcon
                    Anisha
                       |
                       ↓
               LiveKit WebRTC
                   / SIP
                       |
                       ↓
                    🔊 USER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🚀 How to Run the Project
&lt;/h1&gt;

&lt;p&gt;The project started from the open-source Murf LiveKit starter.&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/murf-ai/murf-livekit-starter.git

&lt;span class="nb"&gt;cd &lt;/span&gt;murf-livekit-starter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need API keys for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LiveKit
Murf
Deepgram
Google AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;backend/.env.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and add:&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="nv"&gt;LIVEKIT_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wss://your-project.livekit.cloud
&lt;span class="nv"&gt;LIVEKIT_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-key
&lt;span class="nv"&gt;LIVEKIT_API_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-secret

&lt;span class="nv"&gt;MURF_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-key
&lt;span class="nv"&gt;DEEPGRAM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-key
&lt;span class="nv"&gt;GOOGLE_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Never commit API keys to GitHub.&lt;/strong&gt;&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;\start_app.ps1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Talk to Aarogya Mitra&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"मेरे नज़दीक Patna में PHC कहाँ है?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🔄 The Same Architecture Can Build Other Agents
&lt;/h1&gt;

&lt;p&gt;One thing I really liked about this architecture is how easily the use case can change.&lt;/p&gt;

&lt;p&gt;The same foundation could be adapted into the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎓 AI language tutor&lt;/li&gt;
&lt;li&gt;🏦 Banking voice assistant&lt;/li&gt;
&lt;li&gt;🛒 Shopping assistant&lt;/li&gt;
&lt;li&gt;🏨 Hotel booking agent&lt;/li&gt;
&lt;li&gt;🎧 Customer support agent&lt;/li&gt;
&lt;li&gt;📅 Appointment scheduling assistant&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The underlying voice pipeline stays almost the same.&lt;/p&gt;




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

&lt;p&gt;This project is still just the beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Live Healthcare Data
&lt;/h3&gt;

&lt;p&gt;The current healthcare facility data is static.&lt;/p&gt;

&lt;p&gt;I'd like to integrate government healthcare APIs and ABDM-related infrastructure for more dynamic information.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. WhatsApp / SMS Follow-ups
&lt;/h3&gt;

&lt;p&gt;After a call, users could receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Appointment IDs&lt;/li&gt;
&lt;li&gt;Escalation reference IDs&lt;/li&gt;
&lt;li&gt;Reminder information&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Real Inbound SIP Calling
&lt;/h3&gt;

&lt;p&gt;The next step would be a verified Indian inbound number so users could directly call Aarogya Mitra.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Real-Time Analytics
&lt;/h3&gt;

&lt;p&gt;I'd like to build a dashboard showing the following:&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
Successful Calls
Failed Calls
Success Rate
Average Duration
Escalation Count
Opt-out Count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. More Indian Languages
&lt;/h3&gt;

&lt;p&gt;I'd also like to experiment with the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bengali&lt;/li&gt;
&lt;li&gt;Tamil&lt;/li&gt;
&lt;li&gt;Rajasthani&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term goal is to make the agent accessible to more people across India.&lt;/p&gt;




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

&lt;p&gt;After 10 days of building this project, these are my biggest takeaways:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Voice AI is more than STT + LLM + TTS
&lt;/h3&gt;

&lt;p&gt;A good voice agent needs the following:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low latency + turn detection + prompting + reliable tools + safety + conversation design.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. LLMs need guardrails
&lt;/h3&gt;

&lt;p&gt;Don't assume the model will always follow your instructions.&lt;/p&gt;

&lt;p&gt;Critical operations should have &lt;strong&gt;backend-level validation&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Consent should be enforced in code
&lt;/h3&gt;

&lt;p&gt;For sensitive operations, don't rely only on the system prompt.&lt;/p&gt;

&lt;p&gt;The tool itself should verify permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Multilingual AI requires more than translation
&lt;/h3&gt;

&lt;p&gt;Hindi-English conversations have their own rhythm and turn-taking patterns.&lt;/p&gt;

&lt;p&gt;STT, turn detection, and TTS all matter.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Specialized agents scale better
&lt;/h3&gt;

&lt;p&gt;Instead of one massive agent with dozens of responsibilities, specialist agents can handle specific workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. The best AI projects solve real problems
&lt;/h3&gt;

&lt;p&gt;The most satisfying part wasn't connecting APIs.&lt;/p&gt;

&lt;p&gt;It was thinking about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;How can voice make an existing service easier for someone who struggles with traditional digital interfaces?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the part of AI development I want to keep exploring.&lt;/p&gt;




&lt;h1&gt;
  
  
  📂 Project Structure
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;backend/
├── src/
│   ├── agent.py
│   ├── db.py
│   ├── health_tools.py
│   ├── escalation_tools.py
│   └── outbound_dialer.py
│
└── tests/
    └── test_memory.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Main files
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;agent.py&lt;/code&gt;&lt;/strong&gt; — Main voice agent, tools, guardrails, and specialist handoffs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;db.py&lt;/code&gt;&lt;/strong&gt; — SQLite memory and call analytics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;health_tools.py&lt;/code&gt;&lt;/strong&gt; — PHC lookup and health scheme functionality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;escalation_tools.py&lt;/code&gt;&lt;/strong&gt;—Human escalation, sanitization, and supervisor notification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;outbound_dialer.py&lt;/code&gt;&lt;/strong&gt; — Outbound calls and CSV campaigns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;test_memory.py&lt;/code&gt;&lt;/strong&gt; — Evaluation and memory-related tests.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔗 Project Repository
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Murf LiveKit Starter:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/murf-ai/murf-livekit-starter" rel="noopener noreferrer"&gt;https://github.com/murf-ai/murf-livekit-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Murf Falcon TTS&lt;/li&gt;
&lt;li&gt;LiveKit Agents&lt;/li&gt;
&lt;li&gt;Deepgram Nova-3&lt;/li&gt;
&lt;li&gt;Google Gemini&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Building Aarogya Mitra in 10 days taught me that creating a voice agent isn't simply about making an AI talk.&lt;/p&gt;

&lt;p&gt;It's about designing an entire &lt;strong&gt;conversation system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The agent needs to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When to speak&lt;/li&gt;
&lt;li&gt;When to listen&lt;/li&gt;
&lt;li&gt;When to use a tool&lt;/li&gt;
&lt;li&gt;When to ask permission&lt;/li&gt;
&lt;li&gt;When to hand off to a human&lt;/li&gt;
&lt;li&gt;When to stop&lt;/li&gt;
&lt;li&gt;And, most importantly, &lt;strong&gt;when not to answer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm excited to continue exploring &lt;strong&gt;Voice AI, Agentic AI, multilingual systems, and AI for social impact&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you're building a voice agent too, I'd love to see what you're creating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built as part of the 10 Days of Voice Agents — #VoiceForBharat Edition. 🇮🇳🎙️&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's build useful AI.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
