Quick overview
A cancelled or missed appointment leaves an empty slot, and I built this to fill it from your waitlist. It spots the freed slot in Google Calendar, offers it to one person at a time over WhatsApp, and books the first YES after a second calendar check.
How it works
- Every ten minutes I read the next 72 hours of your calendar and record each freed slot once. A slot counts as freed when its appointment is deleted, moved, or marked cancelled or no-show.
- I filter your waitlist by service, day and time window, rank who is left by priority and time spent waiting, then send the top person one WhatsApp template offer with a short code and hold the slot.
- A YES books the slot after a second calendar check. A NO or an expired hold passes the slot to the next person. A late YES is still accepted if nobody else holds or has taken the slot, and otherwise hears it is taken and keeps its place. STOP takes the person off the list.
- With the default settings I do not offer a slot freed less than 90 minutes before it starts, and no hold runs past 45 minutes before the start.
- Preview mode is the default, so every offer comes to your inbox until you switch sending on.
- A second workflow in the download emails a morning digest of what was freed and filled, with the fill rate. It stays quiet on a day with nothing to report.
Setup
- Import both workflows and build a Google Sheet with five tabs from my sample CSVs:
Waitlist Slots Offers Messages Errors.
- In Meta's WhatsApp Manager, create one Utility template named
slot_offer in English (UK), with the offer wording in my README.
- In workflow 1's Your Settings, replace each placeholder, including the sheet URL, calendar ID, verify token and webhook_secret. Workflow 2 needs the sheet URL and your email.
- Select your Google and WhatsApp credentials on each node that asks for one. Set your timezone in the workflow settings and in Your Settings, then activate both workflows.
- In your Meta app, point the WhatsApp webhook at the production URL of the WhatsApp Handshake node with ?key= and your webhook_secret, and enter your verify token.
- Subscribe the webhook to the
messages field, then follow Preview mode first in my README before you set send_mode to send.
Requirements
- I built the main workflow for n8n 1.114.0 or later, because its WhatsApp node needs that version, and the digest needs 1.59.0 or later. You also need Google Calendar, Sheets and Gmail, plus a WhatsApp Business Cloud API account with one approved template.
Customization
- I keep the cancelled markers, hold time, minimum notice, daily offer cap and the one-booking-at-a-time switch in Your Settings.
Additional info
Failed calendar, sheet, Gmail and WhatsApp steps in my main workflow become a row in the Errors tab and an email. A failure inside a code step shows only in the n8n executions list, and the digest workflow writes no Errors row.
Two YES replies that arrive in separate webhook calls at the same instant can both be booked, because my calendar check is a check and not a lock. A deleted event is only spotted once the workflow has been active and has run before the deletion.
Neither workflow has been run in n8n at all, live or simulated. The code steps passed 77 offline checks and both workflows pass n8n's validator, so start in preview mode.
Price: $29 plus local sales tax or VAT where it applies.
Support: [email protected]