If you asked me 10 days ago if I could build an AI voice agent that not only talks in real-time but can also dial your phone, check inventory, save your preferences to a database, and transfer your call to a specialized department, I’d probably say "maybe in a few months."
But thanks to the 10 Days of Voice Agents challenge by Murf AI, I built exactly that. Here is the story of how "Bol-Khata" came to life, the roadblocks I hit, and how you can build one too.
The Problem: Why Bol-Khata?
I chose the Local Commerce track. In India, street vendors, local kirana store owners, and small suppliers operate at lightning speed. They don't have the time or patience to navigate complex UI dashboards to manage inventory or track orders. They need something as simple as a phone call.
Enter Bol-Khata (Voice Ledger). A proactive AI voice agent that vendors can simply talk to. It remembers their past orders, tells them live stock prices, makes outbound calls to remind them of low stock, and automatically logs complaints.
The Tech Stack
To make voice AI feel instantaneous, you need a solid pipeline:
- - Speech-to-Text (STT): Deepgram (fast and handles Indian accents beautifully).
- - Brain (LLM): Llama-3.3 running on Groq (for near-zero latency).
- - Text-to-Speech (TTS): Murf Falcon — genuinely the fastest TTS API I've used, which is critical because any delay ruins the illusion of talking to a human.
- - Transport: LiveKit (to handle the WebRTC audio streaming).
The Coolest Features I Built
Over the 10 days, this project evolved from a basic "echo bot" to a complex architecture:
Permanent Memory: The agent connects to a local SQLite database. If a vendor says, "Hi, it's Mehran," the agent looks them up, remembers their usual 10 kg potato order, and skips the onboarding.
SIP Outbound Calling: Instead of just chatting on a web browser, the agent uses LiveKit SIP Trunks to actually dial a user's mobile phone (via Linphone) to deliver proactive restock nudges.
Multi-Agent Handoff: Anisha is the main agent. But if a vendor gets angry about rotten vegetables and demands a refund, Anisha says, "I will connect you to our returns specialist," and seamlessly transfers the context and audio session to Samar (the specialized agent).
Real-time Analytics Dashboard: Built a live Flask web dashboard that tracks total calls and success rates dynamically as the agent completes tasks.
The Hard Parts (It Wasn't All Magic)
Building this wasn't a smooth ride. I spent hours banging my head against a few massive roadblocks:
The 0-Second SIP Drop:
When I first tried outbound calling, my mobile phone would ring, but the call would instantly drop at 0 seconds. LiveKit logs showed a SIP response 488. After deep diving, I realized the free Linphone proxy was rejecting the connection due to an SRTP/UDP mismatch. I had to manually enforce TLS and strict codec matching (Opus/PCMA) in the LiveKit dashboard to finally get the voice flowing.The Amnesia Bug:
Initially, when I told the agent to "save my details," it would happily reply, "Saved!" But if I restarted the server, it forgot me. Why? The LLM was saving the data in its temporary context window (RAM) instead of triggering my SQLite Python tool. I had to write a strict "God Prompt" forbidding the agent from confirming a save until it received a 200 OK from the actual backend database function.The Tool Schema Crash:
On Day 8, my LLM started crashing with a 400 Invalid JSON schema error. It turns out the Groq API strictly requires at least one parameter for any function tool. My mark_call_successful() tool had zero parameters. Passing a dummy parameter fixed a bug that cost me 3 hours of sleep!
Build Your Own Voice Agent
Want to build your own? It’s easier than you think.
- Clone the repo: Grab the Murf LiveKit starter template.
(Check out my full code here:[](https://github.com/CodeWithMehru/murf-livekit-starter)Set up credentials: Create a .env.local file and drop in your API keys (LiveKit, Groq, Deepgram, and Murf). Never commit this file to GitHub!Run the backend:uv run python src/agent.py devRun the frontend:npm run devOpen your localhost, allow microphone access, and just say "Hello!"
What's Next?
This challenge proved that voice is the ultimate UI. My next goal for Bol-Khata is to integrate a WhatsApp API webhook, so when the agent takes an order on the call, the vendor immediately gets a WhatsApp receipt.
Building with the fastest TTS API, Murf Falcon, showed me that latency is no longer an excuse. The future of Bharat is voice-first!
Top comments (0)