<?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: Safdar</title>
    <description>The latest articles on DEV Community by Safdar (@safdar_52ae400ba6ff01703e).</description>
    <link>https://dev.to/safdar_52ae400ba6ff01703e</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%2F3781409%2Fa85e6a9e-ecfd-4145-b3e7-064f7a003985.png</url>
      <title>DEV Community: Safdar</title>
      <link>https://dev.to/safdar_52ae400ba6ff01703e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/safdar_52ae400ba6ff01703e"/>
    <language>en</language>
    <item>
      <title>I Built a Voice AI Assistant for Indian Farmers — My 10-Day Voice Agent Journey</title>
      <dc:creator>Safdar</dc:creator>
      <pubDate>Sat, 15 Aug 2026 05:59:16 +0000</pubDate>
      <link>https://dev.to/safdar_52ae400ba6ff01703e/i-built-a-voice-ai-assistant-for-indian-farmers-my-10-day-voice-agent-journey-l97</link>
      <guid>https://dev.to/safdar_52ae400ba6ff01703e/i-built-a-voice-ai-assistant-for-indian-farmers-my-10-day-voice-agent-journey-l97</guid>
      <description>&lt;p&gt;What if a farmer could simply pick up a phone, speak naturally in Malayalam or English, and ask:&lt;/p&gt;

&lt;p&gt;“&lt;em&gt;What is today's market price?&lt;/em&gt;”&lt;/p&gt;

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

&lt;p&gt;“&lt;em&gt;It's going to rain tomorrow. Should I spray my crops today?&lt;/em&gt;”&lt;/p&gt;

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

&lt;p&gt;“&lt;em&gt;My crop is getting damaged. Can someone help me?&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;No typing. No complicated menus. Just a conversation.&lt;/p&gt;

&lt;p&gt;That was the idea behind Farm &amp;amp; Field, the voice agent I built during the 10 Days of Voice Agents — &lt;strong&gt;VoiceForBharat&lt;/strong&gt; Edition challenge by &lt;strong&gt;Murf AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Over these 10 days, I went from building a basic voice conversation to creating an agricultural voice assistant with memory, real-time tools, outbound calling, human escalation, call analytics, multilingual conversations, and a specialist agent.&lt;/p&gt;

&lt;p&gt;I built Farm &amp;amp; Field, a voice assistant designed to help farmers with everyday agricultural questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Farm &amp;amp; Field Does&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Farm &amp;amp; Field can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answer general farming questions&lt;/li&gt;
&lt;li&gt;Provide weather information&lt;/li&gt;
&lt;li&gt;Look up agricultural market prices&lt;/li&gt;
&lt;li&gt;Remember returning users with consent&lt;/li&gt;
&lt;li&gt;Handle Malayalam, English, and Manglish conversations&lt;/li&gt;
&lt;li&gt;Make outbound calls for alerts&lt;/li&gt;
&lt;li&gt;Escalate serious problems to a human&lt;/li&gt;
&lt;li&gt;Hand crop-related problems to a specialist agent&lt;/li&gt;
&lt;li&gt;Track call outcomes through a dashboard
The main idea was simple:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI should not try to do everything itself.&lt;/p&gt;

&lt;p&gt;If it needs current information, it uses a tool.&lt;/p&gt;

&lt;p&gt;If the problem needs specialized knowledge, it hands the conversation to a specialist.&lt;/p&gt;

&lt;p&gt;If the situation is beyond what the AI can safely handle, it asks a human for help.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the system works
&lt;/h2&gt;

&lt;p&gt;A voice agent is basically four main components connected together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speech-to-Text (STT)&lt;/strong&gt; — converts the farmer's speech into text. I used Deepgram.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LLM&lt;/strong&gt; — understands the conversation and decides what to do. I used Google Gemini.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Text-to-Speech (TTS)&lt;/strong&gt; — converts the response back into voice. I used Murf Falcon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-time transport&lt;/strong&gt; — carries the audio between the user and agent. I used LiveKit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of this, Farm &amp;amp; Field has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQLite for user memory and call data&lt;/li&gt;
&lt;li&gt;Weather and market-price tools&lt;/li&gt;
&lt;li&gt;Human escalation&lt;/li&gt;
&lt;li&gt;A Crop Problem Specialist agent&lt;/li&gt;
&lt;li&gt;Outbound calling through LiveKit SIP&lt;/li&gt;
&lt;li&gt;A call analytics dashboard&lt;/li&gt;
&lt;li&gt;A customized Next.js frontend&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The important features
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🇮🇳 Malayalam, English and Manglish support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Farmers don't always speak in one language.&lt;/p&gt;

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

&lt;p&gt;"&lt;em&gt;Ente rubber crop-il leaves yellow aakunnundu.&lt;/em&gt;"&lt;/p&gt;

&lt;p&gt;The agent can recognize Malayalam/Manglish conversations and adapt the TTS voice accordingly.&lt;/p&gt;

&lt;p&gt;This made the conversation feel more natural for Indian users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Murf Falcon for fast voice responses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used Murf Falcon for TTS because latency is very important in voice conversations.&lt;/p&gt;

&lt;p&gt;A slow response makes a voice agent feel like a chatbot that is reading messages aloud.&lt;/p&gt;

&lt;p&gt;With a faster TTS response, the conversation feels much more natural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory with consent&lt;/strong&gt;&lt;br&gt;
Farm &amp;amp; Field can remember useful information about returning farmers, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name&lt;/li&gt;
&lt;li&gt;District&lt;/li&gt;
&lt;li&gt;Crops&lt;/li&gt;
&lt;li&gt;Land size&lt;/li&gt;
&lt;li&gt;Irrigation type&lt;/li&gt;
&lt;li&gt;Language preference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But the agent asks for permission before saving information.&lt;/p&gt;

&lt;p&gt;This was important because memory should be useful without automatically storing everything a user says.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools instead of guessing&lt;/strong&gt;&lt;br&gt;
The agent doesn't rely on the LLM to guess live information.&lt;/p&gt;

&lt;p&gt;For example, when a farmer asks:&lt;/p&gt;

&lt;p&gt;"What is today's rubber price?"&lt;/p&gt;

&lt;p&gt;the agent uses the market-price tool.&lt;/p&gt;

&lt;p&gt;The same approach is used for weather information.&lt;/p&gt;

&lt;p&gt;This makes the system more reliable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human escalation&lt;/strong&gt;&lt;br&gt;
The agent can recognize situations where AI should not be the final answer.&lt;/p&gt;

&lt;p&gt;I implemented escalation for cases such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Important market data being unavailable&lt;/li&gt;
&lt;li&gt;Serious or spreading crop problems&lt;/li&gt;
&lt;li&gt;Unknown pests or major crop damage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The farmer gives consent before a human-help request is created.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specialist agent&lt;/strong&gt;&lt;br&gt;
I created a separate Crop Problem Specialist for crop disease and pest-related conversations.&lt;/p&gt;

&lt;p&gt;The main agent can hand the conversation to the specialist without making the farmer repeat everything.&lt;/p&gt;

&lt;p&gt;The specialist also has a different voice, making the handoff clear to the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outbound calls&lt;/strong&gt;&lt;br&gt;
Farm &amp;amp; Field can initiate calls for specific alerts, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Weather warnings&lt;/li&gt;
&lt;li&gt;Market price alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used LiveKit SIP for the outbound calling workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call analytics&lt;/strong&gt;&lt;br&gt;
The system also tracks call information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call duration&lt;/li&gt;
&lt;li&gt;Call outcome&lt;/li&gt;
&lt;li&gt;Start and end time&lt;/li&gt;
&lt;li&gt;Notes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helped me understand what happened during conversations instead of treating every call as an isolated interaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to build your own
&lt;/h2&gt;

&lt;p&gt;1.The four core pieces you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An STT provider (Deepgram, etc.)&lt;/li&gt;
&lt;li&gt;An LLM (Gemini, OpenAI, etc.)&lt;/li&gt;
&lt;li&gt;A TTS provider — I'd recommend Murf Falcon for latency&lt;/li&gt;
&lt;li&gt;A real-time transport layer (LiveKit is the easiest path)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.Setting up and running the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fork the Murf LiveKit Starter repository&lt;/li&gt;
&lt;li&gt;Follow its README for uv sync (backend) and pnpm install (frontend)&lt;/li&gt;
&lt;li&gt;Run the backend with uv run python src/agent.py dev and the frontend with pnpm dev&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.Where API keys go — and where they must NOT go:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy .env.example to .env.local in both backend/ and frontend/ — never commit .env.local, it's already gitignored&lt;/li&gt;
&lt;li&gt;You'll need: a LiveKit Cloud project (URL, API key, secret), a Murf API key, a Deepgram API key, and an LLM provider key&lt;/li&gt;
&lt;li&gt;Never paste real keys into chat, screenshots, or your repo — treat them like passwords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;4.Connecting and testing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With both the backend and frontend running, open localhost:3000, click the start button, allow microphone access, and talk&lt;/li&gt;
&lt;li&gt;Watch the backend terminal for a "registered worker" log line as confirmation the agent is live&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.The code:&lt;br&gt;
My repository: &lt;a href="https://github.com/safdarsidhik/murf-livekit-starter/tree/main" rel="noopener noreferrer"&gt;https://github.com/safdarsidhik/murf-livekit-starter/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd improve next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add support for more Indian regional languages and improve Malayalam/Manglish detection&lt;/li&gt;
&lt;li&gt;Connect the market-price tool to more reliable and up-to-date agricultural data sources&lt;/li&gt;
&lt;li&gt;Add image-based crop disease detection to help identify visible crop problems&lt;/li&gt;
&lt;li&gt;Improve the human escalation workflow so farmers can connect with agricultural experts more easily&lt;/li&gt;
&lt;li&gt;Add more advanced outbound calling for weather, crop, and market alerts&lt;/li&gt;
&lt;li&gt;Improve the call analytics dashboard with more detailed conversation insights&lt;/li&gt;
&lt;li&gt;Test Farm &amp;amp; Field with real farmers and use their feedback to improve the experience&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;: &lt;a href="https://github.com/rohitkumar31/murf-livekit-starter" rel="noopener noreferrer"&gt;https://github.com/safdarsidhik/murf-livekit-starter/tree/main&lt;/a&gt;&lt;br&gt;
Built with &lt;strong&gt;Murf Falcon&lt;/strong&gt; — the fastest TTS API I used across this build&lt;br&gt;
Part of 10 Days of Voice Agents — &lt;strong&gt;VoiceForBharat Edition by Murf AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building your own voice agent for an underserved use case, happy to answer questions — drop a comment.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>buildinpublic</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
