Appointment Reminder & Rebooking
Confirm appointments by call and automatically rebook a cancellation from your waitlist before the slot goes cold.
Last updated 2026-07-12
Screenshots




About Appointment Reminder & Rebooking
Appointment Reminder & Rebooking
Confirm every appointment by phone and auto-rebook a cancellation from your waitlist — before the slot goes cold.
Built on the Telenow App Platform as a pure declarative app: the data model, the agent tools, the scheduler webhook, the reminder + backfill workflows, the two multilingual agents, and the clinic playbook knowledge base all run on-platform. No external server.
The problem (and the number)
No-shows cost U.S. healthcare an estimated ~$150B a year, and every empty chair is worth $200+ in lost clinician time — plus care denied to someone who is waiting. The single biggest lever is a live confirmation call: appointments confirmed by phone no-show around 3%, versus about 39% for unconfirmed ones. And when a patient does cancel, the slot is only recovered if you reach the next person on the waitlist fast — before it goes cold.
Appointment Reminder & Rebooking does both automatically, in the patient's own language.
How it works
Scheduler / PMS ──(appointment created webhook)──► appointment object (status: booked)
│ │
│ fires object.appointment.created
▼ ▼
dedupe on phone confirm_reminder workflow
├─ short delay
└─ outbound-call {{settings.confirm_agent_id}}
→ dials {{trigger.data.phone}}
→ find_appointment → confirm / reschedule / cancel
│
on cancel or reschedule ► create_opening ◄───┘
│
fires object.slot_opening.created
▼
backfill_slot workflow
└─ outbound-call {{settings.waitlist_agent_id}}
→ dials {{trigger.data.offer_phone}} (next on waitlist)
→ offer_waitlist → fill_slot ✅ recovered slot
The cancel → slot_opening → backfill loop
This is the heart of Appointment Reminder & Rebooking. A cancellation is not a dead end — it is a fresh slot to sell:
- A patient cancels (on the confirmation call, or via the Cancel & backfill button on the Appointments page). The appointment is marked
cancelled. - A
slot_openingrow is created for that provider + time, pointed at the highest-priority waiting patient (offer_phone). The UI picks the top waitlist entry that prefers the same provider; the confirmation agent can also open the slot mid-call withcreate_opening. - Creating the opening fires
object.slot_opening.created, which runs thebackfill_slotworkflow: the Waitlist Backfill Agent callsoffer_phoneand offers the freed slot. - If the patient accepts, the agent calls
fill_slot— the opening flips tofilledand shows up on the dashboard as a recovered slot worth ~$200.
Everything the agents do on a call updates the same rows you see on the dashboard — and the dashboard's Call now / Call to offer buttons dial through the same agents and tools.
Agent tools (used mid-call — all declarative)
| Tool | Does | Handler |
|---|---|---|
find_appointment | Look up the caller's appointment by phone | object.query appointment |
confirm_appt | Patient will attend — lock it in | object.update appointment (match phone → status confirmed) |
reschedule_appt | Patient wants a different time — release the slot | object.update appointment (match phone → status rescheduled) |
cancel_appt | Patient can't come — release the slot | object.update appointment (match phone → status cancelled) |
create_opening | Open the freed slot for backfill | object.create slot_opening |
find_waitlist | Look up the waitlist patient by phone | object.query waitlist_entry |
offer_waitlist | Waitlist patient has been offered the slot | object.update waitlist_entry (match phone → status offered) |
fill_slot | Waitlist patient accepted — recovered slot | object.update slot_opening (match offer_phone → status filled) |
book_waitlist | Waitlist patient booked — off the queue | object.update waitlist_entry (match phone → status filled) |
Bundled agents
- Appointment Confirmation Agent (
confirm-agent) — a multilingual multi-context flow: a deterministicfind_appointmentlookup node (looks the caller up in this app's data) → a conversation node that confirms, reschedules, or cancels, and opens the freed slot for backfill on a cancellation. - Waitlist Backfill Agent (
waitlist-agent) — looks up the waitlist entry, offers the freed slot, and books the patient in withfill_slot.
Both auto-attach this app's tools and the clinic-playbook knowledge base. STT/TTS default to Deepgram + ElevenLabs; switch to Sarvam for vernacular Indian clinics in the agent builder.
Dashboard pages
- Appointment Reminder & Rebooking (dashboard) — KPI tiles (projected no-show rate, confirmed, recovered slots, est. recovered revenue, waitlist waiting), an appointment-status mix bar, an upcoming-appointments table, and a "backfill loop" panel. Also powers the platform
dashboard_widgetslot in a compact form. - Appointments — filter by status, search, and per-row Call now (confirmation call), Confirm, and Cancel & backfill (releases the slot and offers it to the waitlist).
- Waitlist — the priority queue with open-slot counts and a Call to offer button that dials the waitlist agent.
- Setup — a configuration checklist, one-click Create confirmation agent / Create waitlist agent, and the post-install wiring steps.
Knowledge base
clinic-playbook ships four real scripts the agents answer from: appointment confirmation script, handling a reschedule, cancellation / late-arrival / no-show policy, and waitlist backfill offer script.
Install & post-install wiring
- Install Appointment Reminder & Rebooking into your org.
- Open Setup → Create confirmation agent and Create waitlist agent (builds the bundled agents, auto-wired to the tools + KB).
- Copy each new agent's ID into the app's settings: Confirmation agent ID (
confirm_agent_id, required) and Waitlist agent ID (waitlist_agent_id, optional) soconfirm_reminderandbackfill_slotcan dial. - (Optional) Set Reminder window (hours) (
reminder_hours, default 48) — how long before the appointment your reminder campaign dials. - Point your scheduler / practice-management system's appointment created webhook at the inbound hook
scheduler_webhook. New appointments now flow in (deduped on phone) and auto-dial to confirm.
Settings
| Key | Type | Notes |
|---|---|---|
confirm_agent_id | text (required) | The agent the reminder workflow + "Call now" dial. |
waitlist_agent_id | text | The agent the backfill workflow + "Call to offer" dial (falls back to the confirmation agent). |
reminder_hours | number | Hours before the appointment the reminder campaign dials (default 48). |
Bulk dialing your day
The real-time path (webhook → workflow → call) covers new appointments. To remind a whole day's list at once, use the app-key campaign API:
POST /api/app-campaigns
{ "agentId": "<confirm agent id>",
"targetQuery": { "status": "booked" }, // over the `appointment` object
"result": { ... write-back ... } }
It dials every unconfirmed patient the configured reminder_hours before their slot.
Monetization
Appointment Reminder & Rebooking is billed on outcomes, not seats:
- Per confirmed slot — a small fee for each appointment the agent confirms by phone, since each avoided a likely no-show (39% → 3%).
- Per recovered slot — a higher fee for each cancellation that gets backfilled from the waitlist (
fill_slot), because that slot — worth ~$200 — would otherwise have gone empty.
Confirmations kept and slots recovered are surfaced on the dashboard as dollars saved, so the ROI is obvious every day.
Ready-made agents it ships
A multilingual agent that calls patients to confirm their upcoming appointment, reschedule it, or cancel it — and on a cancellation opens the freed slot so it can be backfilled from the waitlist.
Calls the next patient on the waitlist when a slot opens up, offers them the freed appointment time, and books them in — turning a cancellation into a kept slot.
What your agents can do with it
Look up the caller's appointment by their phone number so you can read back the date, time, and provider before confirming.
Look up the waitlist patient's entry by their phone number so you can greet them and offer the freed slot with their preferred provider.
Mark the caller's appointment as CONFIRMED once they say they will attend at the scheduled time.
Mark the caller's appointment as CANCELLED when they can no longer attend. Optionally capture the reason. After cancelling, call create_opening so the freed slot can be backfilled from the waitlist.
Mark the caller's appointment as RESCHEDULED when they want a different day or time (they are keeping their care, just moving it). After marking it rescheduled, call create_opening so the freed original slot can be backfilled from the waitlist while the office arranges a new time.
Open the freed slot for backfill after a cancellation or reschedule. Records the provider and slot time so the waitlist backfill workflow can offer it to the next patient.
Mark a waitlist patient as OFFERED once you have called to offer them a freed slot.
Mark the freed slot as FILLED once a waitlist patient accepts it. This closes the backfill loop and counts as a recovered slot.
Mark the waitlist patient as FILLED once they accept the freed slot and you have booked them in — so they are taken off the waiting queue and never offered another slot by mistake. Call this together with fill_slot when a waitlist patient says yes.
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:appointmentobjects:waitlist_entryobjects:slot_openingagents:readcalls:initiatecalls:readai:llmcampaigns:readuser:profileWhat's new in v1.1.0
Changelog
1.1.0 — 2026-07-12
- Renamed to Appointment Reminder & Rebooking (business-friendly) with a marketplace icon.
- Added real UI screenshots (dashboard + key pages).
- Added
reschedule_apptandbook_waitlist; removed the unreachablecompletedstatus. - Verified end-to-end loop closure: trigger → workflow → call → agent tools → write-back → dashboard.
1.0.0
- Initial release.
- Data model:
appointment(patient, phone, slot_start, provider, reason, status) withupcoming/unconfirmed/cancelledsaved views;waitlist_entry(patient, phone, preferred_provider, priority, status) withwaiting/offeredviews;slot_opening(provider, slot_start, offer_phone, status, created_at) withopen/filledviews. - Agent tools (declarative):
find_appointment,confirm_appt,cancel_appt,create_opening,offer_waitlist,fill_slot. - Bundled agents: Appointment Confirmation Agent — a multilingual multi-context flow (deterministic
find_appointmentlookup → confirm / reschedule / cancel, opening the freed slot for backfill); Waitlist Backfill Agent — looks up the waitlist entry, offers the freed slot, and fills it. Both auto-wired to the tools and the clinic playbook. - Knowledge base:
clinic-playbook— appointment confirmation script, handling a reschedule, cancellation / late-arrival / no-show policy, and the waitlist backfill offer script. - Automation:
scheduler_webhookinbound hook (dedupe on phone);confirm_reminderworkflow (short delay → outbound confirmation call);backfill_slotworkflow (fires on a new slot opening → outbound call to the next waitlist patient). - The cancel → slot_opening → backfill loop: a cancellation creates a
slot_openingpointed at the highest-priority waiting patient, which auto-dials the waitlist agent to rebook the slot. - Dashboard UI: KPI tiles (projected no-show rate, confirmed, recovered slots, est. recovered revenue, waitlist waiting), appointment-status mix, upcoming appointments, and a backfill-loop panel; also renders into the
dashboard_widgetslot in compact form. - Appointments page: status filters, search, and per-appointment Call now, Confirm, and Cancel & backfill (releases the slot and offers it to the waitlist).
- Waitlist page: priority queue with open-slot counts and per-entry Call to offer.
- Setup page: configuration checklist + one-click Create confirmation agent / Create waitlist agent and post-install wiring steps.
- Self-seed: a fresh install auto-loads six realistic demo appointments, three waitlist entries, and one recovered slot (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 Appointment Reminder & Rebooking
Sign up free and get ₹300.00 in credit — no card required. Connect your number, pick a template, and go live in minutes.
