DIDfarm
  • Numbers
  • Trunks
  • Messaging
  • Connect
  • Pricing
  • Coverage
  • Help
🇬🇧 EN 🇳🇱 NL 🇩🇪 DE 🇫🇷 FR 🇪🇸 ES 🇧🇷 PT 🇸🇦 AR 🇨🇳 ZH 🇯🇵 JA 🇮🇳 HI
Sign in Get a Number
← Help Center
On this page
Overview Reminder Flow 1 — Create Template 2 — Send Reminder 3 — Handle Replies Quick Reply Buttons Scheduling Logic Best Practices FAQ

Appointment Reminders via WhatsApp

Messaging · 10 min read Reminders WhatsApp 2-way
What this guide covers: How to send automated appointment reminders via WhatsApp with quick reply buttons for confirm/reschedule. Includes template setup, scheduling logic, inbound reply handling, and cancellation flows.

Overview

No-shows cost healthcare, hospitality, and professional services an estimated 20-30% of revenue. WhatsApp reminders dramatically reduce no-shows because:

  • 98% open rate — vs. 20% for email reminders
  • Quick reply buttons — patients tap "Confirm" or "Reschedule" with one tap
  • 2-way conversation — patients can ask questions or request changes in the same thread
  • Read receipts — you know the patient saw the reminder

Reminder Flow

  1. Appointment booked → schedule 2 reminders (24h before + 2h before)
  2. 24h reminder sent → patient receives WhatsApp with Confirm/Reschedule buttons
  3. Patient replies → your webhook receives the response
  4. Auto-update booking → mark confirmed, or open reschedule flow
  5. 2h reminder sent → final reminder with location/time details

Step 1 — Create a Reminder Template

1Create a utility template with quick reply buttons

In Meta Business Manager → Message Templates, create a utility template:

TEMPLATE: APPOINTMENT_REMINDER
Hi 1,

This is a reminder for your appointment:

Date: 2
Time: 3
Location: 4
Provider: 5

Please confirm or reschedule below.

Add two quick reply buttons:

  • Button 1: Confirm
  • Button 2: Reschedule
Quick reply buttons appear as tappable pills below the message. When the patient taps one, their reply is sent as a standard text message that your webhook receives. The payload includes a button.text field with the button label.

Step 2 — Send the Reminder

2Send the template with appointment details
NODE.JS
async function sendReminder(appointment) {
  const response = await fetch('https://didfarm.com/api/v1/whatsapp/messages', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      account_id: 1,
      to: appointment.patientPhone,
      type: 'template',
      template: {
        name: 'appointment_reminder',
        language: { code: 'en' },
        components: [{
          type: 'body',
          parameters: [
            { type: 'text', text: appointment.patientName },
            { type: 'text', text: appointment.date },
            { type: 'text', text: appointment.time },
            { type: 'text', text: appointment.location },
            { type: 'text', text: appointment.providerName },
          ]
        }]
      }
    }),
  });

  return response.json();
}

Step 3 — Handle Replies

3Process quick reply button taps via webhook
NODE.JS — WEBHOOK HANDLER
app.post('/webhooks/whatsapp-inbound', (req, res) => {
  const { from, body, button } = req.body;

  // Quick reply buttons send the button text
  const reply = (button?.text || body || '').toLowerCase().trim();

  switch (reply) {
    case 'confirm':
      markAppointmentConfirmed(from);
      // Send confirmation in the open 24h session (no template needed)
      sendFreeformReply(from, 'Your appointment is confirmed. See you then!');
      break;

    case 'reschedule':
      markAppointmentPendingReschedule(from);
      sendFreeformReply(from,
        'No problem. Please reply with your preferred date and time, ' +
        'or call us at +31 20 123 4567.'
      );
      break;

    default:
      // Free-text reply within 24h session window
      forwardToStaff(from, body);
      sendFreeformReply(from,
        'Thanks for your message. Our team will get back to you shortly.'
      );
  }

  res.sendStatus(200);
});
24-hour window: After the patient replies, a 24-hour session window opens. During this window, you can send free-form text replies without needing a template. After the window closes, you must use an approved template to re-initiate contact.

Quick Reply Buttons

Quick reply buttons are the most effective way to get patient confirmations. Key benefits:

  • One-tap response — no typing required
  • Higher response rate — 60-70% of patients respond to button prompts vs. 20-30% for text-only
  • Structured data — you receive the exact button text, making automated processing reliable
  • Maximum 3 buttons per template (e.g., Confirm / Reschedule / Cancel)

Scheduling Logic

Use your application's job scheduler to send reminders at the right time.

PSEUDO-CODE — REMINDER SCHEDULING
// When appointment is booked
function onAppointmentBooked(appointment) {
  const appointmentTime = new Date(appointment.datetime);

  // Schedule 24-hour reminder
  scheduler.schedule({
    job: 'send-reminder',
    data: { appointmentId: appointment.id, type: '24h' },
    runAt: new Date(appointmentTime - 24 * 60 * 60 * 1000),
  });

  // Schedule 2-hour reminder
  scheduler.schedule({
    job: 'send-reminder',
    data: { appointmentId: appointment.id, type: '2h' },
    runAt: new Date(appointmentTime - 2 * 60 * 60 * 1000),
  });
}

// Job handler
async function handleSendReminder({ appointmentId, type }) {
  const appt = await getAppointment(appointmentId);

  // Skip if already cancelled or rescheduled
  if (appt.status !== 'scheduled') return;

  await sendReminder(appt);
}
Timezone tip: Always schedule reminders based on the patient's local timezone, not your server timezone. A 24-hour reminder for a 9 AM appointment in Berlin should be sent at 9 AM Berlin time the day before.

Best Practices

  • Send two reminders: 24 hours and 2 hours before the appointment
  • Include location, date, time, and provider name in every reminder
  • Use quick reply buttons (Confirm / Reschedule) for highest response rates
  • Respect quiet hours — don't send reminders between 9 PM and 8 AM local time
  • Skip confirmed — if the patient confirmed after the 24h reminder, don't send the 2h reminder
  • Add a "Cancel" button if your business allows last-minute cancellations
  • Track read receipts — if a reminder is read but not confirmed, flag it for staff follow-up
  • Keep an SMS fallback for patients who don't have WhatsApp

FAQ

What if the patient doesn't respond?

If no response after the 24h reminder, the 2h reminder still sends. If still no response, flag the appointment for manual follow-up (phone call). Consider sending an SMS fallback if WhatsApp delivery failed.

Can patients reschedule via WhatsApp?

Yes. When they tap "Reschedule", the 24-hour session window opens. You can send free-form messages asking for their preferred time, or direct them to an online booking link. Your webhook handler processes the conversation.

How many reminders can I send per appointment?

There's no hard limit, but each template message outside the 24-hour window costs a conversation fee. The standard pattern is 2 reminders (24h + 2h). More than that can feel spammy.

Start reducing no-shows

Connect your WhatsApp account and create your first reminder template.

WhatsApp Setup Guide →
© 2026 DIDfarm · didfarm.com
About Blog Partners Coverage API Docs Status Privacy Terms Cookies Help

We use essential cookies to make DIDfarm work. With your consent, we also use analytics cookies to improve our service. Cookie Policy