Healthcare appointment reminders
Every evening, dial tomorrow's appointment list with an AI agent that confirms attendance, reschedules anyone who can't make it, and marks cancellations. Cancelled slots are released back into a Calendar Pool so other patients can grab them. Saves the front desk hours of phone tag and cuts no-show rates dramatically.
This is a healthcare-specific application of the outbound campaigns pattern. The flow is similar; the prompt and intents are tuned for clinical context.
What you'll build
- A nightly contact list of tomorrow's appointments (CSV export from your EHR or a Postgres query).
- A voice assistant scripted for confirmation calls.
- An intent library that classifies each call's outcome.
- A calendar pool that already holds your provider calendars (re-use from the phone receptionist).
- A workflow that releases freed slots and texts cancellation acknowledgements.
Step 1 — Get tomorrow's appointments into Insighto
Two patterns work, depending on your EHR:
A. Daily CSV export — Most EHRs (and many practice management
systems) can be scheduled to drop a CSV of tomorrow's appointments
to email or SFTP each evening. Import it into
Outreach → Contacts with the tag
reminders-{{date}}.
B. Live database pull — If you have direct database access, use the Postgres tool to query tomorrow's appointments at campaign launch time. Cleaner, no CSV step.
Required fields per contact:
first_name,phoneappointment_time(ISO timestamp, in the patient's local tz)provider_nameappointment_type(e.g. cleaning, follow-up, intake)
If you're already using the ModMed integration, the appointment data is available without a separate export step.
Step 2 — Build the confirmation assistant
-
Build → Assistants → Add assistant. Pick
gpt-4o. -
System prompt — calm, clinical, time-respectful:
You're calling to confirm tomorrow's appointment for
{{contact.first_name}}at Greenview Dental:{{contact.appointment_type}}with{{contact.provider_name}}at{{contact.appointment_time}}.Greet warmly. Confirm the appointment.
- If they say yes → thank them, confirm pre-visit instructions ("please arrive 10 minutes early"), end the call.
- If they want to reschedule → offer 2-3 alternative slots from the calendar pool. Book the first one they accept. Release the original slot.
- If they cancel → acknowledge politely, ask if they'd like to rebook later. Don't pressure.
Keep calls under 90 seconds. Never give clinical advice. If asked a clinical question, say "the front desk will note that for the provider — they'll address it at your visit."
-
Pick a calm, neutral voice from the Voices library. Avoid anything that sounds salesy.
Step 3 — Build the outcome intent set
- Build → Library → Intents → Add
intent. Create:
confirmed— patient confirmed they'll attend.rescheduled— patient moved to a new slot.cancelled— patient won't attend, no rebook.no_answer— call went to voicemail or didn't connect.requested_callback— wants to talk to the office about specifics.
- Attach to the assistant.
Step 4 — Calendar integration
For a single-provider clinic, connect one Google Calendar on the assistant — the agent will read availability from it to offer reschedule slots, and any cancelled slot is automatically freed when the original event is removed.
For a multi-provider clinic, use a Calendar Pool instead so reschedules can fall onto whichever provider has the next free slot.
Step 5 — Schedule the nightly campaign
- Outreach → Campaigns → New campaign.
- Pick the contact tag from Step 1.
- Pick the assistant from Step 2.
- Configure pacing:
- Concurrent calls — start with 2–3 to be cautious.
- Calling window — 5pm–8pm in each patient's local time zone. Avoid early-morning or late-night calls.
- Retries — 1 retry, 90 minutes apart, for
no_answer.
- Schedule it to run nightly via your daily CSV import / Postgres pull, or kick it off manually from the dashboard.
Step 6 — Follow-up workflow for cancellations
When someone cancels, acknowledge by SMS so the patient has a written record and an easy way to rebook later.
-
Automation → Workflows → Add workflow. Trigger: conversation closed with intent
cancelled. -
Add
send_smsto{{contact.phone}}:"Hi
{{contact.first_name}}, your{{contact.appointment_time}}appointment with Greenview Dental is cancelled. Whenever you're ready to rebook, give us a call or visit https://greenview.example/book." -
Optionally add a second
send_smsto your front desk's group number summarizing the day's outcomes — helpful for the morning huddle.
Step 7 — Test on a small batch
- For the first run, tag and import only 5–10 contacts (real or test numbers belonging to your team).
- Listen to every call in Engagements → Conversations.
- Check intent classifications — adjust the intent definitions if
the agent is misclassifying edge cases (e.g., "I might be late" is
confirmed, notcancelled). - Once you're happy, expand to the full nightly list.
What to do next
- Backfill freed slots automatically — when a
cancelledorrescheduledintent fires, run a workflow that texts patients on your wait list with the now-open slot. First reply gets it. - Track no-show rate over time — slice the conversations
dashboard by intent to see how
confirmedrate (and actual attendance) changes month over month. - Add an inbound rebook line — pair this with the 24/7 receptionist so patients who reply or call back can self-serve a new slot without waiting for the front desk.