Inspiration

Uttar Pradesh is India's most populous state, and much of its rural healthcare reaches families through ASHA workers. An ASHA (Accredited Social Health Activist) is a woman from the village who works under the National Health Mission. She helps with deliveries, vaccinations, home visits and family planning. Most ASHAs do not get a fixed salary. They are paid per-activity incentives, so every payment depends on a record somewhere in the government system.

That record passes through several hands. As we understand it, the ASHA submits a paper voucher, the ANM approves it, the MOIC approves it on the portal, and then the BAM makes the payment (exact dates still to be confirmed with a block office). The ASHA sees none of this. If a payment is late, she often loses a full day travelling to the block office just to ask one question: "Has my incentive been paid, and if not, why?" If she disagrees, she has no receipt to prove she complained.

The problem is not that the government has no system. The problem is that the people at the bottom of it cannot use it. A frontline worker earning a small incentive should not have to depend on someone else to read her own payment record. We wanted a middle layer between the government record and the worker: it does not replace the system, it makes it readable, transparent and easy to use in her own language.

What it does

ASHA Sahayak is a voice-first assistant on WhatsApp. It works in two steps.

  1. The block officer uploads the data. On a token-protected dashboard, the officer uploads two CSV files: the ASHA registry (ASHA ID and phone number) and the payment status (month, head, claimed and approved amount, and the stage: ANM, MOIC, BAM or paid).
  2. The ASHA asks, and the bot answers from that same data. She sends a Hindi voice note or text. The system transcribes it with Sarvam, finds the activity, month and amount, checks it against the rate card and the officer's record, and replies in Hindi with text and a voice note.

Why WhatsApp and not a new app? A new app means downloading it, creating an account, learning menus and remembering a password. For many ASHAs that is itself a barrier. WhatsApp is already on her phone, and she already sends voice notes. She does not have to learn anything new, so the tool meets her where she already is.

Example (all data synthetic):

  1. The officer uploads registry.csv and status.csv on the dashboard.
  2. The ASHA sends her ASHA ID once, and her phone number is linked to it.
  3. She sends a voice note: "vaccination, January, 3 count, 250 rupees".
  4. The bot transcribes it and calculates the expected amount from the sample rate card (Rs 100 x 3 = Rs 300).
  5. It looks up her own row in the officer's record and replies, for example, that the approved amount is Rs 300 and the status is "waiting for MOIC approval". It shows a Rs 50 difference from what she reported, and gives a receipt ID.
  6. It drafts a complaint and asks, "yes or no". Nothing is filed until she says yes.
  7. The officer sees the confirmed complaint on the dashboard and records a reason code.

Every fact carries an evidence state (verified, derived, reported, unknown or conflicting). If there is no evidence, the assistant says so instead of guessing an amount or a date. It also reports only the stage the record is in and does not call a payment "delayed" unless the data supports it.

How we built it

Pipeline: WhatsApp voice note -> ffmpeg (16 kHz mono) -> Sarvam Saaras v3 speech-to-text (Hindi) -> rules engine for intent, date and activity extraction -> payment reconciliation against a rate card and the officer's status record -> FactSet with evidence states -> template reply -> output validator -> Sarvam Bulbul v3 text-to-speech voice reply.

The core design rule is "No evidence, no claim". An LLM is never allowed to decide money, dates or status. The replies come from templates, and an output validator blocks any rupee amount, date or status that the evidence does not support.

Stack: Python, Fast API, SQLite, rapid fuzz, pandas, the WhatsApp Cloud API (signed webhook, idempotent message IDs), a hash-chained ledger for receipts, an officer dashboard with combined CSV upload and validation, and a Render deployment. Phone numbers in the registry are stored as salted hashes, and a sender can only see the record of the ASHA ID bound to her number. The repo has 152 automated tests. Much of the code was written with AI coding assistants, and we reviewed and tested it ourselves.

Links

Challenges we ran into

  • No real ASHA payment data was available, so the prototype runs on synthetic sample data and a sample rate card. It is not an official Uttar Pradesh rate card.
  • Our WhatsApp Business account was banned, so we could not test live WhatsApp replies end to end. The browser chat demo uses the same reply to logic.
  • Hindi/Awadhi speech accuracy has not been tested with real ASHAs yet.
  • Making the assistant refuse to guess took more design work than making it answer dates like "last Tuesday" and unclear activity names must be confirmed, not assumed.
  • Privacy had to be designed in the bot must never show one ASHA's payment status to another person, so a phone number is linked to one ASHA ID, and we found and fixed gaps where that link was missing.
  • The payment stages and their deadlines are our understanding of the process and still need to be confirmed with a block office.
  • Audio handling was fragile, for example a missing system library broke ffmpeg conversion until we fixed it.

Accomplishments that we're proud of

  • A working voice-in, voice-out loop in Hindi in which replies are built only from evidence, with an output validator that blocks any unsupported amount, date or status.
  • A complete officer-to-ASHA loop: the officer uploads the record, the ASHA asks in her own voice, and the answer comes from that same record.
  • Two-step grievance confirmation with receipt IDs and a tamper-evident ledger, so an ASHA finally has proof that she complained.
  • 152 automated tests, and a public open-source repo and deployed demo.
  • A rough cost estimate of about Rs 2.6 per ASHA per month for the API usage (an estimate based on list prices, to be validated in a pilot).

What we learned

  • For public-service tools, trust matters more than fluency: a wrong payment answer is worse than "I don't have evidence for that".
  • The best tool for a frontline worker is the one she does not have to learn. Meeting her inside WhatsApp matters more than any new interface.
  • Keeping the LLM out of decisions and using rules and templates makes the system easier to test and audit.
  • Voice-first design changes everything: short confirmations, spoken numbers and Hindi-first wording matter more than screens.
  • Without real data, honest labelling of what is synthetic and what is verified is part of the product.

What's next for ASHA Sahayak: Voice-First Incentive Transparency

  • Pilot with real ASHAs and a block office to test Hindi/Awadhi speech accuracy and wording, and to confirm the real payment stages and spoken names of payment heads.
  • Replace the sample rate card with the real Uttar Pradesh incentive schedule and connect real payment records.
  • Restore a verified WhatsApp Business number and add IVR for basic phones.
  • Add Bhashini as an alternative speech provider and PostgreSQL for scale.
  • Give officers a clearer view of complaint trends, so recurring payment gaps can be fixed at the source.

Built With

Share this project:

Updates

Submission history