EMI Reminder & Recovery
Early-bucket EMI reminder calls that capture a Promise-to-Pay and auto call back to confirm it was kept.
Last updated 2026-07-12
Screenshots




About EMI Reminder & Recovery
EMI Reminder & Recovery
Respectful, multilingual Bucket-0/1 EMI reminders that capture a tracked Promise-to-Pay — then auto-call back a day later to confirm it was kept.
Built on the Telenow App Platform as a pure declarative app: the data model, the agent tools, the LMS webhook, the reminder + follow-up workflows, the vernacular agent, and the RBI fair-practice playbook all run on-platform. No external server.
The problem (and the number)
Early-bucket collections is a phone-and-trust game, and the phone is turning against lenders: RPC (right-party-contact) drops ~80% on numbers that get spam-tagged by carriers and call-screening apps — exactly what happens when a borrower's phone lights up with repeated, robotic "pay now" calls. Miss the early window and the RBI 15-day bureau clock starts ticking toward a credit-bureau report, turning a ₹8,000 slip into a bureau ding the borrower will fight for months.
The fix is not more calls — it's a calm, human, once call that reaches the borrower in their own language, states the EMI plainly, and secures a specific Promise-to-Pay — then a single, gentle confirmation call so the promise actually converts to cash. EMI Reminder & Recovery does exactly that, automatically, within RBI fair-practice conduct.
How it works
Loan Management System ──(EMI due / bucketed webhook)──► loan_account object (status: due)
│ │
│ fires object.loan_account.created
▼ ▼
dedupe on phone remind_due workflow
└─ outbound-call {{settings.reminder_agent_id}}
→ dials {{trigger.data.phone}}
→ passes borrower, emi_amount, due_date, product, dpd
│
▼
EMI Reminder Agent (Sarvam, multilingual)
find_account → state EMI → capture_ptp / offer payment link
→ mark_promised | mark_paid | mark_broken | record_payment
│
capture_ptp creates a promise_to_pay ─────┐
▼
fires object.promise_to_pay.created
│
▼
ptp_followup workflow
├─ delay 1 day
└─ outbound-call {{settings.reminder_agent_id}}
→ "did you manage to pay?" → mark_promise_kept + mark_paid + record_payment
Everything the agent does on the call updates the same rows you see on the dashboard — and the console's Call now button dials through the same agent and tools.
Agent tools (used mid-call — all declarative)
| Tool | Does | Handler |
|---|---|---|
find_account | Look up the borrower's loan account by phone (EMI, due date, DPD, product) | object.query loan_account |
capture_ptp | Record a tracked Promise-to-Pay (date + amount) — arms the follow-up call | object.create promise_to_pay |
mark_promised | Borrower committed to a date — set account promised | object.update loan_account (match phone → promised) |
mark_paid | Borrower confirms the EMI is paid — set account paid | object.update loan_account (match phone → paid) |
mark_broken | A prior promise lapsed and no new date given — set broken | object.update loan_account (match phone → broken) |
record_payment | Log the actual payment against the account | object.create payment |
mark_promise_kept | On the follow-up call, close the tracked promise once the borrower confirms they paid — the monetized outcome | object.update promise_to_pay (match phone → kept: true) |
The bundled EMI Reminder Agent is a multi-context flow: a deterministic find_account tool node (looks the borrower up in this app's data) → a conversation node that states the EMI and captures the promise. STT/TTS default to Sarvam (anushka) for Tier-2/3 vernacular borrowers.
Dashboard pages
- EMI Reminder & Recovery (dashboard) — KPI tiles (accounts, RPC rate, PTP conversion, promise-kept rate, recovered ₹), a Promise-to-Pay funnel (in collections → reached → promised → kept → paid), a status mix, and a DPD-bucket breakdown. Also powers the platform
dashboard_widgetslot in a compact form. - Accounts — grouped by DPD bucket (0 / 1–30 / 31–60 / 60+), with status filters, search, and Call now to trigger a reminder call for any account (passes the account's context variables to the agent).
- Promises — Open vs Kept promises, a Call to run the confirmation call, and Mark kept (records the payment and settles the account to paid).
- Setup — a configuration checklist, a one-click Create reminder agent button, and the post-install wiring steps.
Knowledge base
collections-playbook ships four real scripts the agent answers from: RBI fair-practice tone rules, the Promise-to-Pay (PTP) script, the payment-link explanation, and dispute handling (incl. the RBI 15-day bureau clock).
Install & post-install wiring
- Install EMI Reminder & Recovery into your org.
- Open Setup → Create reminder agent (builds the bundled multilingual Sarvam agent, auto-wired to the tools + playbook).
- Copy the new agent's ID into the app's Reminder agent ID setting (
reminder_agent_id) soremind_dueandptp_followupcan dial. - (Optional) Set WhatsApp channel ID (
wa_channel) to send the secure payment link, and adjust the Permitted calling window (call_window_note, default08:00-19:00 IST). - Point your LMS's EMI due / account bucketed webhook at the inbound hook
lms_webhook(dedupes on phone; the URL carries a per-install?token=). New accounts now flow in and auto-dial.
Settings
| Key | Type | Notes |
|---|---|---|
reminder_agent_id | text (required) | The agent the workflows + "Call now" dial. |
wa_channel | text | WhatsApp channel for the secure payment link. |
call_window_note | text | RBI fair-practice calling window (default 08:00-19:00 IST). |
Bulk dialing your backlog
The real-time path (webhook → workflow → call) covers newly-bucketed accounts. To sweep an existing early-bucket backlog, use the app-key campaign API:
POST /api/app-campaigns
{ "agentId": "<reminder agent id>",
"targetQuery": { "status": "due", "dpd": { "$lte": 30 } }, // over the `loan_account` object
"result": { ... write-back ... } }
Monetization
EMI Reminder & Recovery is billed on outcomes, not seats: a small fee per kept Promise-to-Pay (promise_to_pay.kept = true). A kept PTP is a dated commitment that converted to cash — the single event that actually recovers the EMI — so the fee only ever fires when the merchant has already been paid. Broken promises and reminder calls that don't convert cost nothing, keeping incentives aligned with real recovery.
Ready-made agents it ships
A respectful, multilingual (Sarvam) collections reminder agent for Bucket-0/1 EMI accounts. It looks the borrower up, states the EMI due, and either captures a tracked Promise-to-Pay or offers a secure payment link — always within RBI fair-practice tone.
What your agents can do with it
Look up the borrower's loan account by their phone number to read the EMI amount, due date, product and days-past-due before speaking.
Record a Promise-to-Pay when the borrower commits to a date and amount. This creates a tracked promise that PromiseLoop will auto-call back to confirm.
Mark the borrower's loan account as PROMISED once they have committed to a promise-to-pay. Use together with capture_ptp.
Mark the borrower's loan account as PAID when they confirm the EMI has been paid or complete payment on the call.
Mark the borrower's loan account as BROKEN when a previously made promise-to-pay has lapsed and they decline to commit to a new date.
Log a payment against the borrower's account when they confirm they have paid (fully or partially). Use alongside mark_paid.
Mark the borrower's open Promise-to-Pay as KEPT when, on the follow-up call, they confirm they have paid the amount they promised. This closes the tracked promise and is the outcome PromiseLoop is built around — always use it together with mark_paid and record_payment when a promise is fulfilled.
Data it manages
Permissions it requests
Apps run inside your workspace under least-privilege scopes you can see up front. This app asks for:
objects:loan_accountobjects:promise_to_payobjects:paymentagents:readcalls:initiatecalls:readai:llmwhatsapp:sendcampaigns:readuser:profileWhat's new in v1.1.0
Changelog
1.1.0 — 2026-07-12
- Renamed to EMI Reminder & Recovery (business-friendly) with a marketplace icon.
- Added real UI screenshots (dashboard + key pages).
- Added
mark_promise_keptso the follow-up call can close a kept Promise-to-Pay (the monetized outcome). - Verified end-to-end loop closure: trigger → workflow → call → agent tools → write-back → dashboard.
1.0.0
- Initial release.
- Data model:
loan_accountobject (borrower, phone, EMI amount, due date, DPD, product, status due/promised/paid/broken, created_at) withdue/bucket1/promised/brokensaved views;promise_to_payobject (phone, promised date, amount, kept, created_at) withpending/keptviews;paymentobject (phone, amount, paid_at) for recovered-amount tracking. - Agent tools (declarative):
find_account,capture_ptp,mark_promised,mark_paid,mark_broken,record_payment,mark_promise_kept(closes the tracked promise on the follow-up call — the monetized outcome). - Bundled agent: EMI Reminder Agent — a Sarvam multilingual multi-context flow (deterministic
find_accountlookup → state EMI → capture Promise-to-Pay / offer payment link) auto-wired to the tools and the RBI fair-practice collections playbook. - Knowledge base:
collections-playbook— RBI fair-practice tone rules, the Promise-to-Pay script, the payment-link explanation, and dispute handling (incl. the RBI 15-day bureau clock). - Automation:
lms_webhookinbound webhook (dedupe on phone) maps LMS payloads into loan accounts;remind_dueworkflow (outbound reminder call on new account);ptp_followupworkflow (delay 1 day → outbound call to confirm the promise was kept). - Dashboard UI: KPI tiles (accounts, RPC rate, PTP conversion, promise-kept rate, recovered ₹), a Promise-to-Pay funnel, status mix, and DPD-bucket breakdown; also renders into the
dashboard_widgetslot in compact form. - Accounts page: grouped by DPD bucket (0 / 1–30 / 31–60 / 60+), status filters, search, and per-account Call now (passes account context variables to the agent).
- Promises page: Open vs Kept tabs, a confirmation Call, and Mark kept (records the payment and settles the account to paid).
- Setup page: configuration checklist + one-click Create reminder agent and post-install wiring steps.
- Self-seed: a fresh install auto-loads six realistic demo accounts across DPD buckets, two promises, and a payment (removable) so the dashboard is populated on first open.
Publisher
Marketplace publisher · app reviewed by Telenow before listing.
Your data, your keys
Secrets, carrier credentials and API keys stored AES-GCM encrypted; TLS in transit; HMAC-signed webhooks.
Strict per-organization data isolation with role-based access for every member.
Every mutating action is logged and filterable, with CSV export for your records.
In-app DLT / regulatory flows, TCPA calling windows, and org-wide Do-Not-Call enforcement.
Install EMI Reminder & Recovery
Sign up free and get ₹300.00 in credit — no card required. Connect your number, pick a template, and go live in minutes.
