Systems & InfrastructureAutomationsCRM Architecture
Appointment booking and reminders, built in GoHighLevel
A reminder nobody replies to tells the clinic nothing. This asks the day before whether they are still coming, reads the answer, and if there is no answer at all it puts a call on the setter's list while the slot can still be filled.
Read the workflow as text
- Appointment created, status new (born pending)
- Event type is "normal"
- Contact Mode is any of "contact"
- Appointment status is "new"
- 1Wait 1 second1 second
- 2Tag off: chase01:live (they booked)chase01:live
- 3A reschedule?
- 4Rescheduled: re-register, re-run reminders
- 5Clinic email: a booking was movedMoved: {{contact.name}}
- 6Go to: Reset the outcome chase (a reschedule starts it again against the new time)
- 7A fresh booking
- 8THE GATE: flip to CONFIRMED (first step, always)Appointment status: confirmed
- 9Compare datescompare dates
- 10Write days to bookDays To Book
- 11Find the cardFinds the card
- 12Opportunity Found
- 13Mid-course card? (never regress a Continuing Treatment card)
- 14Continuing Treatment: keep the stage
- 15Remove from every chase and setter rail: 01, 01.5, 02, 03, 03.5, 05, 10, 10.5, 12, 12.5, 33Removes from a workflow
- 16Go to: Reset the outcome chase (a reschedule starts it again against the new time)
- 17Early stage: write Booked
- 18Stage to Booked, status OPEN (backward allowed: a No Show or Lost card may re-book)Updates the card
- 19Remove from every chase and setter rail: 01, 01.5, 02, 03, 03.5, 05, 10, 10.5, 12, 12.5, 33Removes from a workflow
- 20Reset the outcome chase (a reschedule starts it again against the new time)Removes from a workflow
- 21Add to Workflow 09.5 Appointment Outcome Chase
- 22Clear follow_up_on and follow_up_reasonFollow Up On, Follow Up Reason
- 23Which channel is this contact on?
- 24Text message rail
- 25Confirmation, the moment the gate flips itSMSYou're all booked, {{contact.first_name}}. {{appointment.start_time}}, here at {{custom_values.business_name}}, {{custom_values.business_address}}. We're looking forward to seeing you. If anything changes, just message me here.
- 26Wait: until 1 day before the appointment (skip if past)
- 27Day beforeSMSHi {{contact.first_name}}, looking forward to seeing you tomorrow at {{appointment.only_start_time}}. Are we still good?
- 28Wait for their reply (6 h)6 hours
- 29wait
- 30Did they actually confirm?
- 31Default Branch
- 32Wait: until 2 hours before (skip if past)
- 33Same day: see you soonSMSHi {{contact.first_name}}, we are all set for you at {{appointment.only_start_time}} today. See you soon.
- 34Yes
- 35Thanks for confirmingSMSPerfect, thank you {{contact.first_name}}. You are all set for tomorrow at {{appointment.only_start_time}} and we are looking forward to seeing you.
- 36Go to: Wait: until 2 hours before (skip if past)
- 37Not Yes
- 38Not a yes: offer another timeSMSNo problem at all {{contact.first_name}}, thanks for letting us know. Shall we find you another time for {{custom_values.offer_treatment}}? Reply with a day that suits and I'll sort it.
- 39Cancel the appointment (hands to Cancellation Recovery)Appointment status: cancelled
- 40timeout
- 41System note: UnconfirmedUnconfirmed
- 42In-app ping: no reply to the day-before askCall {{contact.first_name}}, appointment tomorrow, no reply
- 43Add taskConfirm Appointment – {{contact.name}}
- 44Go to: Wait: until 2 hours before (skip if past)
- 45WhatsApp rail
- 46Confirmation, the moment the gate flips itWhatsAppYou're all booked, {{contact.first_name}}. {{appointment.start_time}}, here at {{custom_values.business_name}}, {{custom_values.business_address}}. We're looking forward to seeing you. If anything changes, just message me here.
- 47Wait: until 1 day before the appointment (skip if past)
- 48Day beforeWhatsAppHi {{contact.first_name}}, looking forward to seeing you tomorrow at {{appointment.only_start_time}}. Are we still good?
- 49Wait StepWaits for a whatsapp reply, 6 h timeout
- 50Timeout
- 51System note: UnconfirmedUnconfirmed
- 52In-app ping: no reply to the day-before askCall {{contact.first_name}}, appointment tomorrow, no reply
- 53Add taskConfirm Appointment – {{contact.name}}
- 54Go to: Wait: until 2 hours before (skip if past)
- 55Customer Responded
- 56AI decision maker
- 57Default Branch
- 58Wait: until 2 hours before (skip if past)
- 59Same day: see you soonWhatsAppHi {{contact.first_name}}, we are all set for you at {{appointment.only_start_time}} today. See you soon.
- 60Yes
- 61Thanks for confirmingWhatsAppPerfect, thank you {{contact.first_name}}. You are all set for tomorrow at {{appointment.only_start_time}} and we are looking forward to seeing you.
- 62Go to: Wait: until 2 hours before (skip if past)
- 63Not Yes
- 64Not a yes: offer another timeWhatsAppNo problem at all {{contact.first_name}}, thanks for letting us know. Shall we find you another time for {{custom_values.offer_treatment}}? Reply with a day that suits and I'll sort it.
- 65Cancel the appointment (hands to Cancellation Recovery)Appointment status: cancelled
- 66Opportunity Not Found
- 67No card yet (direct booker): create at BookedCreates a card
- 68Go to: Remove from every chase and setter rail: 01, 01.5, 02, 03, 03.5, 05, 10, 10.5, 12, 12.5, 33
The problem
Every clinic sends reminders and every clinic still gets no shows, because a reminder that only announces the time cannot tell you anything. The one piece of information worth having, whether this person is actually coming, arrives on the day when the chair is already empty and there is nobody left to put in it.
What shipped
- The day before message asks whether they are coming, and the reply is read
- Silence puts a call on the setter's list, a day before the slot is lost
- A cannot make it cancels properly and starts the win back the same day
What happens
A booking is confirmed and the clinic is told. Nothing here treats a booking as real until one thing has confirmed it, which is what stops anybody being told they are booked into a slot that was never held.
The day before, they are asked whether they are still coming. Yes carries on. A cannot make it cancels the slot properly and hands them straight to the win back, so the clinic finds out while the day can still be refilled.
No answer is the case everyone else ignores. It puts a call on the setter's list that day, because a slot you know about the day before is a slot you can still fill.
Want one built for you?
Get on a call with me and let's talk it through.