VoiceForBharat 2026

The Agent That Doesn't Wait for the Phone to Ring

Most voice agents sit in a browser tab, hoping someone clicks "Start talking." Ours picks up the phone and calls the farmer first. Here's how we built Kisan Sahayak in 10 days.

Ankit Jain · August 2026 · 12 min read

The Passive Voice Agent Problem

Every voice AI demo follows the same pattern: open a browser, click a button, talk to the agent. The agent waits. You initiate. If you don't call, nothing happens.

That's fine for customer support widgets. It's useless for a farmer standing in a field at 6 AM, wondering if today is the day to spray his cotton crop.

Agriculture is time-sensitive. A weather alert at noon is worthless if the spraying window was morning. The agent needs to call the farmer, not wait for them to find a URL, open a browser, and figure out microphone permissions.

So on Day 9, we built the outbound calling feature. Kisan Sahayak now places proactive phone calls to registered farmers with weather alerts and crop advisories. But I'm getting ahead of myself.


What Kisan Sahayak Actually Is

Kisan Sahayak (किसान सहायक) is a voice AI helpline for Indian farmers. It speaks Hindi, understands code-mixed speech (Hindi + English + regional dialects), and handles the full spectrum of farm advisory:

Key constraint: The agent must work on a phone call, in Hindi, for a farmer with a cracked screen and patchy 4G. No app install. No browser. Just a phone call.

The Stack, Honest Edition

Layer Tool Why
TTS Murf Falcon 55ms latency, Indian voices that sound like a neighbor, not a robot
STT Deepgram Nova-3 Multi-language mode handles Hindi-English code-switching
LLM Gemini 3.5 Flash Fast enough for real-time, smart enough for farm advisory
Transport LiveKit WebRTC for browsers, SIP for phone calls, rooms for agent handoffs
VAD Silero + Multilingual Turn Detector Detects when the farmer stops speaking, even mid-sentence
Memory SQLite One table per caller. Minimal. Private. Farmer-controlled.
Frontend Next.js + LiveKit Agents UI Five queue variants, analytics dashboard, escalation page

The pipeline is simple to draw and hard to make work:

Farmer speaks (Hindi)
       ↓
Deepgram Nova-3 (multi-language STT)
       ↓
Gemini 3.5 Flash (with 2000-word system prompt)
       ↓
Murf Falcon TTS (Aman voice, 55ms latency)
       ↓
LiveKit streams audio back to farmer

Four components. Each one a potential point of failure. Each one required tuning that no tutorial tells you about.


· · ·

The 10-Day Build Log

Here's what happened each day, documented in real-time on LinkedIn:

DAY 1 July 2026
Setting up the voice pipeline — Deepgram STT → Gemini LLM → Murf Falcon TTS. Getting the first Hindi response with 55ms latency.
DAY 2 July 2026
The system prompt is the product. Writing guardrails: no mandi prices, no pesticide dosages, no government impersonation.
DAY 3 July 2026
Building caller memory with SQLite. The agent recognizes returning farmers and greets them by name — with permission.
DAY 4 July 2026
Hindi code-switching. Farmers mix English, dialects, and jargon. Deepgram multi-language + prompt engineering for natural code-mixing.
DAY 5 July 2026
Live weather tool. District-level forecasts via Open-Meteo. The prompt rule: never add numbers the tool didn't return.
DAY 6 July 2026
Frontend build. Five queue variants, analytics dashboard, escalation page. Next.js + LiveKit Agents UI.
DAY 7 August 2026
Human escalation with consent. The agent asks permission before creating a help request. Reference IDs. Honest timelines.
DAY 8 August 2026
Call analytics + crop specialist handoff. Different voice, different personality, same conversation. The farmer never repeats themselves.
DAY 9 August 2026
Outbound phone calls via SIP. Proactive weather alerts. Voicemail detection. Opt-out on every call. The scariest feature to build.
DAY 10 August 2026
This blog post. Writing about everything. Sharing the code, the architecture, the hard parts.

The Three Things Nobody Tells You

1. The Prompt Is the Product

We spent more time on the system prompt than on any other piece of code. The prompt is 2000+ words. It defines the agent's identity, knowledge boundaries, tool usage rules, language behavior, and safety guardrails.

Here's a fragment:

GUARDRAILS:
Hard refusals. Never do any of the following:
- Never quote a current market/mandi price as a fact.
  If asked for bhava say only: "Batch price roz badalta hai,
  yahan se main vishwas ke saath nahi bata sakta."
- Never give a pesticide dosage in grams/millilitres per litre.
  Say: "Sahi quantity ke liye packet ke label par dekh lijiye."
- Never name a drug, prescribe medicine, or diagnose illness.
- Never confirm an order, a government payout, a loan,
  or an insurance claim.

Every guardrail was added after the agent broke it in testing. The prompt is a living document — it captures every failure mode we discovered.

2. Agent Handoff Is the Hardest Problem

When a farmer reports a pest problem, the main agent hands off to a crop specialist. The specialist has a different voice (Sunaina instead of Aman), a different personality, and a focused prompt.

The farmer should not notice the handoff except for the voice change. They should not repeat their name, district, or what they already said.

@function_tool
async def transfer_to_crop_specialist(self, ctx: RunContext):
    specialist = CropProblemSpecialist(
        chat_ctx=self.chat_ctx.copy(exclude_instructions=True)
    )
    return specialist, "I will connect you to our crop specialist."

copy(exclude_instructions=True) is the key line. The conversation history transfers. The specialist picks up mid-conversation. The farmer's experience is seamless.

3. Outbound Calling Changes the Product Category

A voice agent that waits for calls is a tool. A voice agent that calls farmers with weather alerts is a service.

The outbound agent uses LiveKit SIP with a Linphone trunk. Every call follows a strict opening:

1. Greet by name (if known from memory)
2. Say WHO you are and WHY you're calling
3. State the reason: weather alert, pest advisory
4. Tell them how to stop: "calls band karo" keh dijiye
5. Deliver the advisory or ask if they want it now

The opt-out is non-negotiable. Every call includes it. If a farmer says "calls band karo," the agent confirms and ends. No follow-up. No "are you sure?" The farmer's choice is final.


· · ·

The Numbers

55ms Model latency
130ms Time-to-first-audio
$0.01 Per 1000 chars
150+ Voices available
99.38% Pronunciation accuracy
10 days To production

How to Build Your Own

Prerequisites

Setup

git clone https://github.com/murf-ai/murf-livekit-starter.git
cd murf-livekit-starter

# Backend
cd backend
cp .env.example .env.local
uv sync
uv run python src/agent.py download-files
uv run python src/agent.py dev

# Frontend
cd frontend
cp .env.example .env.local
pnpm install
pnpm dev

Open http://localhost:3000. Click "Start talking." The agent responds in Hindi with Murf Falcon.

API Keys

Copy .env.example to .env.local in both backend/ and frontend/. Fill in your keys. Never commit .env.local — the .gitignore already excludes it.

Change What It Does

Edit the SYSTEM_PROMPT in backend/src/agent.py. Change the prompt, change the agent. Customer support, language tutor, receptionist — same pipeline, different instructions.

Change the Voice

Edit the murf.TTS(voice="...") call. Browse voices at Murf Voice Library. For Indian English: Aman (male), Sunaina (female), Pooja (female), Samar (male).


What We'd Improve Next

  1. Real-time translation — Hindi farmer talks to English-speaking agriculture expert, agent translates both ways
  2. Voice biometrics — identify callers without asking for names, just voice
  3. Multi-turn crop diagnosis — ask follow-up questions about leaf patterns, soil conditions, spread rate
  4. PM-KISAN integration — help farmers check scheme eligibility during the call
  5. WhatsApp follow-up — send weather summary and advisory text after the call ends

The Repo

github.com/murf-ai/murf-livekit-starter

The starter template works out of the box. Clone, configure, run. The same pipeline powers Kisan Sahayak and can power your agent in an afternoon.


Acknowledgments

Built during 10 Days of Voice Agents — VoiceForBharat Edition by Murf AI.

The challenge wasn't just about building a voice agent. It was about building one that works for the person who needs it most — a farmer who's never heard of AI, doesn't care about technology, and just wants help with their crops.

55ms latency. Hindi that sounds natural. Outbound calls that respect the farmer's time. That's Kisan Sahayak.

#VoiceForBharat