Cliqtel
  • 产品 ▾
    基础设施
    虚拟号码覆盖 70 多个国家的本地、移动和免费号码 SIP 中继适用于任何 PBX 的运营商级 SIP
    通信
    消息双向 SMS 与 WhatsApp 模板 云电话系统可视化呼叫流程、IVR、队列、CRM 弹屏 联络中心高级路由与 AI——抢先体验
    合作伙伴
    Cliqtel Connect面向 MSP 的白标平台
  • 解决方案
  • 价格
  • 文档
  • 关于
🇬🇧 EN 🇳🇱 NL 🇩🇪 DE 🇫🇷 FR 🇪🇸 ES 🇧🇷 PT 🇸🇦 AR 🇨🇳 ZH 🇯🇵 JA 🇮🇳 HI
登录 立即开始
Cliqtel
产品 虚拟号码覆盖 70 多个国家的本地、移动和免费号码 SIP 中继适用于任何 PBX 的运营商级 SIP 消息双向 SMS 与 WhatsApp 模板 云电话系统可视化呼叫流程、IVR、队列、CRM 弹屏 联络中心高级路由与 AI——抢先体验 Cliqtel Connect面向 MSP 的白标平台
覆盖范围 集成 价格 文档与帮助 关于
语言
EN NL DE FR ES PT AR ZH JA HI
登录 免费开始
← 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://cliqtel.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 Cliqtel · cliqtel.com
关于我们 博客 合作伙伴 覆盖范围 API 文档 运行状态 隐私 条款 Cookie 帮助 搜索
cliqtel.com 由 Cliqtel B.V. 运营,注册地为荷兰泽斯特 · KVK 42033793 · VAT NL869402468B01 · SBI 62.09

我们使用必要的 Cookie 以确保 Cliqtel 正常运行。在您同意的情况下,我们也会使用分析类 Cookie 以改进我们的服务。Cookie 政策