<?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: Nipun Goel</title>
    <description>The latest articles on DEV Community by Nipun Goel (@nipun_goel_720eefc9d5f127).</description>
    <link>https://dev.to/nipun_goel_720eefc9d5f127</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%2F4078089%2F32a12aef-65dc-4408-8ad5-6fd440ee0eac.jpg</url>
      <title>DEV Community: Nipun Goel</title>
      <link>https://dev.to/nipun_goel_720eefc9d5f127</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nipun_goel_720eefc9d5f127"/>
    <language>en</language>
    <item>
      <title>Building FinSaathi: A Voice-First Financial Assistant for Bharat 🇮🇳 10 Days of Voice Agents — VoiceForBharat Edition</title>
      <dc:creator>Nipun Goel</dc:creator>
      <pubDate>Fri, 14 Aug 2026 18:21:12 +0000</pubDate>
      <link>https://dev.to/nipun_goel_720eefc9d5f127/building-finsaathi-a-voice-first-financial-assistant-for-bharat-10-days-of-voice-agents--2f94</link>
      <guid>https://dev.to/nipun_goel_720eefc9d5f127/building-finsaathi-a-voice-first-financial-assistant-for-bharat-10-days-of-voice-agents--2f94</guid>
      <description>&lt;p&gt;Over the last 10 days, I built FinSaathi, a voice-first AI assistant for the Financial Services track of the VoiceForBharat challenge.&lt;br&gt;
The goal was simple: build an assistant that can talk naturally with users, understand financial and government-scheme related queries, remember relevant information, use tools, and know when a human or specialist should take over.&lt;br&gt;
What started as a basic voice agent gradually became a complete system with memory, tools, outbound calling, human escalation, call analytics, and specialist-agent handoffs.&lt;br&gt;
💡 The Problem&lt;br&gt;
Financial and government-scheme processes can involve eligibility requirements, documents, deadlines, and complicated terminology.&lt;br&gt;
For users who are more comfortable speaking than typing, voice can make these interactions much more natural.&lt;br&gt;
For example, a user can simply ask:&lt;br&gt;
"PMJJBY ke liye main eligible hoon?"&lt;br&gt;
Instead of navigating through multiple forms, FinSaathi can understand the request, collect the required information, perform an eligibility check, and explain the result conversationally.&lt;br&gt;
The goal is not to replace banks or human support, but to provide a conversational first layer of assistance and escalate situations when human help is required.&lt;br&gt;
🏗️ Architecture&lt;br&gt;
                         USER&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                      LiveKit&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                    Speech-to-Text&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                     LLM / Agent&lt;br&gt;
                           │&lt;br&gt;
              ┌────────────┼────────────┐&lt;br&gt;
              ▼            ▼            ▼&lt;br&gt;
           Memory        Tools      Escalation&lt;br&gt;
              │            │            │&lt;br&gt;
              └────────────┼────────────┘&lt;br&gt;
                           ▼&lt;br&gt;
                       SQLite DB&lt;br&gt;
                           │&lt;br&gt;
                    ┌──────┴──────┐&lt;br&gt;
                    ▼             ▼&lt;br&gt;
             Human Support    Analytics&lt;br&gt;
                Dashboard     Dashboard&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                       Murf Falcon&lt;br&gt;
                           │&lt;br&gt;
                           ▼&lt;br&gt;
                          USER&lt;br&gt;
Technology Stack&lt;br&gt;
Component&lt;br&gt;
Technology&lt;br&gt;
Frontend&lt;br&gt;
Next.js / React&lt;br&gt;
AI Agent&lt;br&gt;
LiveKit Agents&lt;br&gt;
Real-time Transport&lt;br&gt;
LiveKit&lt;br&gt;
Text-to-Speech&lt;br&gt;
Murf Falcon&lt;br&gt;
Backend&lt;br&gt;
Python&lt;br&gt;
API&lt;br&gt;
FastAPI&lt;br&gt;
Database&lt;br&gt;
SQLite&lt;br&gt;
Calling&lt;br&gt;
SIP / LiveKit&lt;br&gt;
🎙️ Key Features&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Indian Voice &amp;amp; Natural Conversations
FinSaathi uses Murf Falcon for text-to-speech and supports natural Hindi/Hinglish conversations.
The goal was to make the interaction feel more like talking to an assistant rather than interacting with a traditional chatbot.&lt;/li&gt;
&lt;li&gt;Safety Guardrails
Financial conversations require strong safety boundaries.
For example, when a user reports an unauthorized transaction, FinSaathi warns them not to share:
OTP
PIN
Password
CVV
Card details
The agent also clearly explains when it does not have direct access to a user's bank account or transaction system.&lt;/li&gt;
&lt;li&gt;User Memory
FinSaathi stores relevant user information in a SQLite database so it can be reused in future conversations.
The database logic is separated into its own layer:
Agent
↓
database.py
↓
SQLite
↓
users table
This made it easier to extend the project without mixing database operations throughout the agent code.&lt;/li&gt;
&lt;li&gt;Government Scheme Eligibility
FinSaathi can use tools to perform government-scheme eligibility checks.
User asks about scheme
    ↓
Collect required information
    ↓
Eligibility tool
    ↓
Eligible / Not Eligible
    ↓
Database
    ↓
User receives result
The eligibility result can also be used to determine whether the user's intended task was successfully completed.&lt;/li&gt;
&lt;li&gt;Outbound Calling
FinSaathi can proactively contact eligible users using outbound calling.
Database
↓
Check deadlines / eligible users
↓
Outbound calling logic
↓
SIP / LiveKit
↓
AI Agent
↓
User
Setting up and debugging the SIP and LiveKit calling flow was one of the most challenging parts of the project.&lt;/li&gt;
&lt;li&gt;Human Escalation
FinSaathi can recognize situations where human support is more appropriate.
For example, for an unauthorized transaction, the agent can ask:
"Agar aap chahein, toh main aapki situation ke liye ek human support request create kar sakti hoon."
After the user gives consent, the system creates an escalation and generates a unique reference ID.
Example:
FS-A5323F
The request is stored with information such as:
Reason: possible_fraud
Urgency: HIGH
Status: OPEN
Preferred Follow-up: phone
The human-support dashboard then allows the request to move through:
OPEN
↓
IN_PROGRESS
↓
RESOLVED&lt;/li&gt;
&lt;li&gt;Call Analytics
FinSaathi also records the outcome of conversations.
For this project, a successful interaction means that the user's intended task was completed, such as completing an eligibility check or receiving the required information.
The dashboard displays:
Total Calls
Successful Calls
Failed Calls
These values come from actual browser or SIP interactions rather than hardcoded numbers.
Actual Call
↓
Determine Outcome
↓
call_analytics
↓
FastAPI
↓
Analytics Dashboard
A failed call does not necessarily mean a technical failure. For example, if a user leaves before completing an eligibility check, the interaction can be recorded as unsuccessful.&lt;/li&gt;
&lt;li&gt;Specialist Agent Handoff
Instead of making one agent responsible for every type of question, FinSaathi can hand government-scheme related conversations to a Government Scheme Specialist.
            Main Agent
                │
      Government scheme?
                │
               YES
                ↓
    Government Scheme Specialist
                │
                ↓
   Eligibility / Documents /
   Benefits / Scheme Information
This makes the architecture more modular and allows additional specialist agents to be added in the future.
🧩 Challenges I Faced
The project definitely did not work perfectly on the first attempt.
One of the biggest challenges was real-time calling and LiveKit/SIP integration.
During testing, I encountered errors such as:
WinError 64
ConnectionResetError
DuplexClosed
I also faced an outbound-call issue where the AI would start speaking but the call could terminate before the conversation continued.
Debugging this required checking:
LiveKit worker lifecycle
SIP configuration
Network connections
Agent processes
Call state
Real-time transport
This taught me that building a voice agent is not only about the LLM. The real-time infrastructure around the agent matters just as much.
Another important lesson was separating responsibilities between the agent, database, API, and frontend.
For example:
Agent → database.py → SQLite
while the human-support dashboard uses:
Frontend → FastAPI → database.py → SQLite
This separation made the system easier to extend and debug.🚀 What I Learned
Before this challenge, I thought building a voice agent was mainly:
Speech → AI → Speech
After these 10 days, I realized that a useful voice agent needs much more:
Voice
+
LLM
+
Memory
+
Tools
+
Safety
+
Real-time communication
+
Database
+
Human escalation
+
Analytics
+
Specialist handoffs
The biggest lesson for me was:
A useful voice agent isn't just an AI that can talk. It's a system that can understand, act, remember, measure its performance, and know when a human or specialist should take over.
Building FinSaathi during the 10 Days of Voice Agents — VoiceForBharat Edition gave me hands-on experience with all of these pieces.&lt;/li&gt;
&lt;/ol&gt;

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