Skip to main content

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, phone
  • appointment_time (ISO timestamp, in the patient's local tz)
  • provider_name
  • appointment_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

  1. Build → Assistants → Add assistant. Pick gpt-4o.

  2. 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."

  3. Pick a calm, neutral voice from the Voices library. Avoid anything that sounds salesy.

Step 3 — Build the outcome intent set

  1. 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.
  2. 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

  1. Outreach → Campaigns → New campaign.
  2. Pick the contact tag from Step 1.
  3. Pick the assistant from Step 2.
  4. 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.
  5. 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.

  1. Automation → Workflows → Add workflow. Trigger: conversation closed with intent cancelled.

  2. Add send_sms to {{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."

  3. Optionally add a second send_sms to your front desk's group number summarizing the day's outcomes — helpful for the morning huddle.

Step 7 — Test on a small batch

  1. For the first run, tag and import only 5–10 contacts (real or test numbers belonging to your team).
  2. Listen to every call in Engagements → Conversations.
  3. Check intent classifications — adjust the intent definitions if the agent is misclassifying edge cases (e.g., "I might be late" is confirmed, not cancelled).
  4. Once you're happy, expand to the full nightly list.

What to do next

  • Backfill freed slots automatically — when a cancelled or rescheduled intent 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 confirmed rate (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.