Case 03 · Scheduling and reminders over WhatsApp

Fewer patients skipping appointments without notice

Showly books appointments over WhatsApp for small clinics, reminds patients before each visit, and alerts the front desk when someone hasn't confirmed, in time to fill the slot. It's ready and looking for its first pilot clinic.

NestJS · Next.js · PostgreSQL · WhatsApp
24 h and 3 h
reminders before each appointment
1,590
automated tests

The client’s problem

At a small clinic, every patient who doesn’t show up without calling is an hour of work lost for good. Most clinics run their schedule by hand over WhatsApp: the receptionist confirms patients one by one, forgets a few, and finds out about the no-show once the slot has already gone by.

Showly’s goal is to let the clinic know ahead of time who isn’t coming, so it can offer that slot to another patient.

How it works

  1. Book. The patient messages the clinic on WhatsApp. The assistant understands they want an appointment and sends a link with their details already filled in, where they pick a day and time on a calendar.
  2. Remind. 24 hours and 3 hours before, the patient gets a reminder and replies “YES” to confirm or “CANCEL” to free up the slot. Each clinic can adjust those times.
  3. Alert. If the patient still hasn’t confirmed 6 hours before the appointment, it’s marked “at risk” and the front desk gets an alert to call them or give the slot to someone else.
  4. Recover. If the patient misses the appointment, two hours later they get a link to reschedule, always within business hours.

The assistant also answers each clinic’s common questions (hours, prices, directions) using information the clinic enters itself, and it understands voice messages. Each clinic’s data is kept separate with its own time zone, and every Monday it gets a summary of the week.

The tough call and why

Booking through a link instead of a chat. The first version booked everything through the chat and got confused easily. If it offered a list of times and the patient replied “the 15th”, it read that as option number 15. We tried understanding dates in natural language and matching approximate answers, and both approaches kept failing in real cases. Now the chat only figures out what the patient wants and sends a link to the calendar, which doesn’t make mistakes. The chat itself only accepts two exact replies: “YES” and “CANCEL”.

WhatsApp without Meta’s official API. The official API charges per conversation and requires a business verification that a small clinic doesn’t have. We chose an unofficial connection, accepting the risk of getting blocked, and isolated it in a single part of the system so it can be swapped for the official one without touching anything else.

What broke along the way

  • “Yes, but I can’t make it” confirmed the appointment. The system saw the “yes” and marked the appointment as confirmed. For a product meant to prevent no-shows, that was the worst possible bug. Now an ambiguous reply is treated as ambiguous.
  • Duplicate appointments. WhatsApp resends messages when it doesn’t get a quick response, and the system was processing them twice. Messages now go into a queue, get answered right away, and each one is processed only once.
  • Duplicate patients because of phone number formatting. The same number with and without the ”+” was saved as two different people. We standardized the format in one place.
  • Reminders for appointments that had already happened, and an 11:45 p.m. appointment that vanished from the list because of a time zone bug.

Results

  • The system is finished and deployed, with 1,590 automated tests.
  • The next step is a pilot with a first real clinic. The goal is to cut no-shows by 30% in the first 60 days; that hasn’t been measured yet because the pilot hasn’t started.

If you run a clinic and want to join the pilot, get in touch.