<?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: Yogapriya N</title>
    <description>The latest articles on DEV Community by Yogapriya N (@yogapriya_n_13).</description>
    <link>https://dev.to/yogapriya_n_13</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%2F4078947%2F487a8112-5755-4025-9132-0a7a25f9fa37.png</url>
      <title>DEV Community: Yogapriya N</title>
      <link>https://dev.to/yogapriya_n_13</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yogapriya_n_13"/>
    <language>en</language>
    <item>
      <title>Building Anisha: My 10-Day Journey Building a Voice Agent for Local Commerce</title>
      <dc:creator>Yogapriya N</dc:creator>
      <pubDate>Sat, 15 Aug 2026 14:03:55 +0000</pubDate>
      <link>https://dev.to/yogapriya_n_13/building-anisha-my-10-day-journey-building-a-voice-agent-for-local-commerce-5aon</link>
      <guid>https://dev.to/yogapriya_n_13/building-anisha-my-10-day-journey-building-a-voice-agent-for-local-commerce-5aon</guid>
      <description>&lt;h2&gt;
  
  
  From a simple voice assistant to a real-time AI system with memory, tools, phone calls, analytics, and specialist handoffs
&lt;/h2&gt;

&lt;p&gt;For the past 10 days, I have been building a voice agent as part of &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; by Murf AI.&lt;/p&gt;

&lt;p&gt;What started as a basic voice conversation gradually became something much bigger: an AI assistant that can remember customers, look up product information, make outbound calls, escalate difficult situations to humans, track call outcomes, and hand conversations to specialist agents.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;Anisha&lt;/strong&gt; — my AI voice assistant for local commerce.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Problem I Wanted to Solve
&lt;/h2&gt;

&lt;p&gt;I chose the &lt;strong&gt;Local Commerce&lt;/strong&gt; track.&lt;/p&gt;

&lt;p&gt;Local kirana stores handle many repetitive customer questions every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"What is the price of basmati rice?"&lt;/li&gt;
&lt;li&gt;"Is this product available?"&lt;/li&gt;
&lt;li&gt;"Do you provide home delivery?"&lt;/li&gt;
&lt;li&gt;"Can I return this item?"&lt;/li&gt;
&lt;li&gt;"Can I speak to someone from the store?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For many customers, especially when they are busy or not comfortable navigating a complicated application, speaking naturally is easier than typing.&lt;/p&gt;

&lt;p&gt;That's where Anisha comes in.&lt;/p&gt;

&lt;p&gt;Anisha acts as a voice-based assistant for a local kirana store and helps customers get information through a natural conversation.&lt;/p&gt;

&lt;p&gt;The goal wasn't just to make an AI that could talk.&lt;/p&gt;

&lt;p&gt;The goal was to make a voice agent that could &lt;strong&gt;actually do useful work&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Meet Anisha
&lt;/h2&gt;

&lt;p&gt;Anisha is a conversational AI assistant designed for local commerce.&lt;/p&gt;

&lt;p&gt;She can help with product prices, stock availability, store-related questions, customer memory, human escalation, and specialist handoffs.&lt;/p&gt;

&lt;p&gt;I designed her personality to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Friendly&lt;/li&gt;
&lt;li&gt;Helpful&lt;/li&gt;
&lt;li&gt;Concise&lt;/li&gt;
&lt;li&gt;Natural in conversation&lt;/li&gt;
&lt;li&gt;Careful about information she cannot verify&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The voice is powered by &lt;strong&gt;Murf Falcon&lt;/strong&gt;, which became one of the most important parts of the project because the voice needs to feel natural rather than like a traditional text-to-speech system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anisha's interface
&lt;/h3&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%2F54l3kyjgjcjvvnmysckw.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%2F54l3kyjgjcjvvnmysckw.png" alt="Anisha local commerce voice assistant homepage" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The homepage introduces Anisha and provides a simple &lt;strong&gt;Start a Call&lt;/strong&gt; experience.&lt;/p&gt;

&lt;p&gt;The interface also highlights some of the main capabilities such as prices and stock, personalization, and human support.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. How the System Works
&lt;/h2&gt;

&lt;p&gt;The basic voice pipeline 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;              ┌───────────────┐
              │    Customer   │
              │     Voice     │
              └───────┬───────┘
                      │
                      ▼
              ┌───────────────┐
              │    LiveKit    │
              │ Real-time RTC │
              └───────┬───────┘
                      │
                      ▼
              ┌───────────────┐
              │   Deepgram    │
              │      STT      │
              └───────┬───────┘
                      │
                      ▼
              ┌───────────────┐
              │      LLM      │
              │   Reasoning   │
              └───────┬───────┘
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
      Product      Memory      Escalation /
       Tools       / DB         Handoff
          │           │           │
          └───────────┼───────────┘
                      ▼
              ┌───────────────┐
              │  Murf Falcon  │
              │      TTS      │
              └───────┬───────┘
                      │
                      ▼
              ┌───────────────┐
              │    Customer   │
              │     Voice     │
              └───────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main components are:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speech-to-text:&lt;/strong&gt; Deepgram converts the customer's voice into text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM:&lt;/strong&gt; The language model understands the request, decides what to do, and generates a response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools:&lt;/strong&gt; When the agent needs real information, it can call tools instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory:&lt;/strong&gt; Customer information can be stored and retrieved for returning users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Text-to-speech:&lt;/strong&gt; Murf Falcon converts the response into natural speech.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-time transport:&lt;/strong&gt; LiveKit handles the real-time audio communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Voice Agent Session
&lt;/h3&gt;

&lt;p&gt;The core voice pipeline is configured as an agent session. For example:&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;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentSession&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;stt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;deepgram&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;STT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nova-3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;endpointing_ms&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;no_delay&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;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&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;Conversational&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;sample_rate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;24000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;streaming&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;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;span class="n"&gt;vad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;proc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;userdata&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vad&lt;/span&gt;&lt;span class="sh"&gt;"&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;h2&gt;
  
  
  4. Giving the Agent Real Capabilities
&lt;/h2&gt;

&lt;p&gt;One of the biggest lessons I learned was that a voice agent shouldn't simply generate answers.&lt;/p&gt;

&lt;p&gt;It should be able to &lt;strong&gt;take actions&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product Lookup
&lt;/h3&gt;

&lt;p&gt;For example, if a customer asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What is the price of basmati rice?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anisha should not guess.&lt;/p&gt;

&lt;p&gt;Instead, she uses the product lookup tool to retrieve the actual product information.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Product Lookup Tool
&lt;/h3&gt;

&lt;p&gt;Instead of allowing the LLM to guess product information, I exposed a tool that retrieves the actual data:&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="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lookup_product&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;product_name&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="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Retrieve real grocery product details.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_execute_product_lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lookup_product&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;product_name&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tool connects the conversation to the product data, so Anisha can provide verified information about price and availability instead of making up an answer.&lt;/p&gt;

&lt;p&gt;The same applies to stock availability.&lt;/p&gt;

&lt;p&gt;This is important because hallucinating a product price in a commerce application can directly mislead a customer.&lt;/p&gt;

&lt;p&gt;So I added guardrails telling the agent to use the product lookup tool whenever verified product information is required.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Memory for Returning Customers
&lt;/h2&gt;

&lt;p&gt;Another feature I added was customer memory.&lt;/p&gt;

&lt;p&gt;Instead of treating every conversation as completely new, Anisha can retrieve information associated with returning callers.&lt;/p&gt;

&lt;p&gt;This makes the interaction more personalized.&lt;/p&gt;

&lt;p&gt;Memory also introduced an important engineering lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storing information is easy. Using it correctly in a natural conversation is harder.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent needs to retrieve relevant information without making the conversation feel robotic or exposing unnecessary stored information.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Human Escalation
&lt;/h2&gt;

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

&lt;p&gt;Some situations require a human.&lt;/p&gt;

&lt;p&gt;For example, if a customer has a complicated payment or order issue, Anisha can recognize that the request needs human support instead of pretending she can resolve it.&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%2Fuxvxot83msrbug8xqt54.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%2Fuxvxot83msrbug8xqt54.png" alt="Anisha human escalation conversation" width="799" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agent can collect the relevant information and ask the customer for permission before passing the issue to human support.&lt;/p&gt;

&lt;p&gt;This was an important design principle for me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A good voice agent should know when it is better to stop being the only agent.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. Specialist Agent Handoff
&lt;/h2&gt;

&lt;p&gt;I also implemented a specialist handoff for &lt;strong&gt;returns and refunds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, if a customer says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I bought basmati rice yesterday, but the packet was damaged. I want to return it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Anisha recognizes that this is a returns/refunds issue.&lt;/p&gt;

&lt;p&gt;Instead of continuing to answer as the general commerce assistant, she transfers the conversation to a specialist.&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%2Fwembxkdlu8lnsuzxxab0.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%2Fwembxkdlu8lnsuzxxab0.png" alt="Anisha returns and refunds specialist handoff" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The specialist receives the context of the conversation and continues helping the customer.&lt;/p&gt;

&lt;p&gt;This made the system feel much closer to a real support workflow.&lt;/p&gt;

&lt;p&gt;Instead of building one giant agent that handles everything, different agents can have different responsibilities.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Outbound Phone Calls
&lt;/h2&gt;

&lt;p&gt;The project also includes outbound SIP calling.&lt;/p&gt;

&lt;p&gt;This allowed me to move beyond browser-based conversations and experiment with actual phone communication.&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%2Ffb599v81t9bzxtlw5bgb.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%2Ffb599v81t9bzxtlw5bgb.png" alt="Anisha outbound SIP phone call" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was one of the most exciting parts of the project because it demonstrated how a voice agent can exist beyond a web interface.&lt;/p&gt;

&lt;p&gt;The same conversational system can be connected to telephony infrastructure and used for phone-based interactions.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Call Analytics Dashboard
&lt;/h2&gt;

&lt;p&gt;Once an agent starts handling calls, another question becomes important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How are those calls performing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built an operations dashboard to track call outcomes.&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%2Fobiivfypca6a8gujr1xn.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%2Fobiivfypca6a8gujr1xn.png" alt="Anisha operations analytics dashboard" width="799" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The dashboard shows information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Successful calls&lt;/li&gt;
&lt;li&gt;Failed calls&lt;/li&gt;
&lt;li&gt;Success rate&lt;/li&gt;
&lt;li&gt;Total calls&lt;/li&gt;
&lt;li&gt;Calls by source&lt;/li&gt;
&lt;li&gt;Recent calls&lt;/li&gt;
&lt;li&gt;Call outcomes&lt;/li&gt;
&lt;li&gt;Call duration&lt;/li&gt;
&lt;li&gt;Conversation topics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns the project from simply being a voice demo into something that can also be monitored as an application.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. The Hardest Part: When the Agent Went Silent
&lt;/h2&gt;

&lt;p&gt;Not everything worked on the first attempt.&lt;/p&gt;

&lt;p&gt;One of the most frustrating problems happened after I introduced function calling.&lt;/p&gt;

&lt;p&gt;I had a strange situation where asking about stock availability could work, but asking for a product price could sometimes result in the agent becoming silent.&lt;/p&gt;

&lt;p&gt;At first, it wasn't obvious where the problem was.&lt;/p&gt;

&lt;p&gt;Was it the database?&lt;/p&gt;

&lt;p&gt;Was the tool being called?&lt;/p&gt;

&lt;p&gt;Was the LLM returning the wrong format?&lt;/p&gt;

&lt;p&gt;Was the TTS system receiving something it couldn't speak?&lt;/p&gt;

&lt;p&gt;I had to trace the complete flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User request
    ↓
LLM
    ↓
Tool call
    ↓
Database lookup
    ↓
Tool result
    ↓
LLM response
    ↓
TTS
    ↓
Voice output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important lesson was that &lt;strong&gt;tool output in a voice agent is different from tool output in a normal text application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A response that is technically valid for an application isn't necessarily a good response for a TTS pipeline.&lt;/p&gt;

&lt;p&gt;I changed the tool results into natural spoken text and added sanitization around the TTS flow so that technical fragments such as JSON or other unwanted formatting would not accidentally be spoken to the user.&lt;/p&gt;

&lt;p&gt;After that, I tested the complete tool flow again.&lt;/p&gt;

&lt;p&gt;This was probably one of my biggest lessons from the challenge:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Debugging a voice agent means debugging the entire conversation pipeline, not just the LLM.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  11. What I Learned During the Challenge
&lt;/h2&gt;

&lt;p&gt;Over these 10 days, I learned that building a voice agent involves much more than connecting an LLM to a microphone.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Voice needs a complete pipeline
&lt;/h3&gt;

&lt;p&gt;You need speech recognition, reasoning, text-to-speech, and real-time communication working together.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Tools make an agent useful
&lt;/h3&gt;

&lt;p&gt;An LLM can understand a question, but tools allow it to access real application data.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Guardrails are essential
&lt;/h3&gt;

&lt;p&gt;The agent should know what it can and cannot claim.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Voice responses need special design
&lt;/h3&gt;

&lt;p&gt;Text that looks fine on a screen may sound terrible when spoken.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Memory changes the experience
&lt;/h3&gt;

&lt;p&gt;A returning user should not always feel like a completely new customer.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. AI should know its limits
&lt;/h3&gt;

&lt;p&gt;Human escalation is not a failure. In many situations, it is the correct behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Specialist agents can make systems easier to manage
&lt;/h3&gt;

&lt;p&gt;Instead of one agent handling every possible situation, specialized agents can handle specific workflows.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. How You Can Build Your Own Voice Agent
&lt;/h2&gt;

&lt;p&gt;If you want to build a similar system, start with the simplest possible pipeline.&lt;/p&gt;

&lt;p&gt;You need four main pieces:&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 Transport
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For my project, I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deepgram&lt;/strong&gt; — speech-to-text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM&lt;/strong&gt; — conversation and reasoning&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;LiveKit&lt;/strong&gt; — real-time voice transport&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then add capabilities one at a time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get basic voice conversation working.&lt;/li&gt;
&lt;li&gt;Add a clear system prompt.&lt;/li&gt;
&lt;li&gt;Add safety guardrails.&lt;/li&gt;
&lt;li&gt;Add one useful tool.&lt;/li&gt;
&lt;li&gt;Add database memory.&lt;/li&gt;
&lt;li&gt;Add human escalation.&lt;/li&gt;
&lt;li&gt;Add telephony.&lt;/li&gt;
&lt;li&gt;Add analytics.&lt;/li&gt;
&lt;li&gt;Add specialist handoffs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don't try to build everything at once.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Running the Project
&lt;/h2&gt;

&lt;p&gt;The complete source code is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/YogapriyaN2007/voice-for-bharath?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Anisha — VoiceForBharat GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic setup
&lt;/h3&gt;

&lt;p&gt;Clone the repository:&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/YogapriyaN2007/voice-for-bharath.git
&lt;span class="nb"&gt;cd &lt;/span&gt;voice-for-bharath
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create and activate the project's virtual environment and install the required dependencies according to the repository instructions.&lt;/p&gt;

&lt;p&gt;Then configure your 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_key_here
DEEPGRAM_API_KEY=your_key_here
GOOGLE_API_KEY=your_key_here
LIVEKIT_URL=your_livekit_url
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;&lt;strong&gt;Never commit real API keys, SIP credentials, phone numbers, caller information, or &lt;code&gt;.env&lt;/code&gt; files to GitHub.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow the repository's setup instructions to start the agent and frontend, then connect to Anisha and test a conversation.&lt;/p&gt;

&lt;p&gt;Try questions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"What is the price of basmati rice?"

"Is basmati rice available?"

"I need help with my order."

"I want to return a damaged product."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  14. What I Would Improve Next
&lt;/h2&gt;

&lt;p&gt;This project is a starting point, not the final version.&lt;/p&gt;

&lt;p&gt;Some things I would like to improve next are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better multilingual support&lt;/li&gt;
&lt;li&gt;More robust error recovery&lt;/li&gt;
&lt;li&gt;More detailed call analytics&lt;/li&gt;
&lt;li&gt;Improved latency monitoring&lt;/li&gt;
&lt;li&gt;More specialized agents&lt;/li&gt;
&lt;li&gt;Better production-grade authentication&lt;/li&gt;
&lt;li&gt;More realistic commerce integrations&lt;/li&gt;
&lt;li&gt;Improved UI feedback during live conversations&lt;/li&gt;
&lt;li&gt;Better testing for long and complex voice conversations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  15. Final Thoughts
&lt;/h2&gt;

&lt;p&gt;When I started this challenge, I thought building a voice agent mainly meant making an AI that could listen and speak.&lt;/p&gt;

&lt;p&gt;After 10 days, I understand that a useful voice agent is much more than that.&lt;/p&gt;

&lt;p&gt;It needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversation + tools + memory + guardrails + real-time communication + monitoring + escalation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most valuable part of this challenge wasn't just getting Anisha to talk.&lt;/p&gt;

&lt;p&gt;It was learning how to make her &lt;strong&gt;useful, reliable, and aware of her limitations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm really happy to have completed &lt;strong&gt;10 Days of Voice Agents — VoiceForBharat Edition&lt;/strong&gt; and to have built Anisha from a basic voice assistant into a more complete local-commerce voice system.&lt;/p&gt;

&lt;p&gt;A huge thank you to &lt;strong&gt;Murf AI&lt;/strong&gt; for creating this challenge and making it possible to explore voice AI by actually building something.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built With
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Murf Falcon&lt;/li&gt;
&lt;li&gt;LiveKit&lt;/li&gt;
&lt;li&gt;Deepgram&lt;/li&gt;
&lt;li&gt;LLM&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;SIP / Telephony&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anisha — Local Commerce Voice Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Track:&lt;/strong&gt; Local Commerce&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/YogapriyaN2007/voice-for-bharath?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;GitHub — voice-for-bharath&lt;/a&gt;&lt;/p&gt;




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