Skip to content

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.

100%
Drag to move it. Pinch to zoom.
Appointment booking and reminders, built in GoHighLevel, as it is built.
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"
  1. 1Wait 1 second1 second
  2. 2Tag off: chase01:live (they booked)chase01:live
  3. 3A reschedule?
  4. 4Rescheduled: re-register, re-run reminders
  5. 5Clinic email: a booking was movedMoved: {{contact.name}}
  6. 6Go to: Reset the outcome chase (a reschedule starts it again against the new time)
  7. 7A fresh booking
  8. 8THE GATE: flip to CONFIRMED (first step, always)Appointment status: confirmed
  9. 9Compare datescompare dates
  10. 10Write days to bookDays To Book
  11. 11Find the cardFinds the card
  12. 12Opportunity Found
  13. 13Mid-course card? (never regress a Continuing Treatment card)
  14. 14Continuing Treatment: keep the stage
  15. 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
  16. 16Go to: Reset the outcome chase (a reschedule starts it again against the new time)
  17. 17Early stage: write Booked
  18. 18Stage to Booked, status OPEN (backward allowed: a No Show or Lost card may re-book)Updates the card
  19. 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
  20. 20Reset the outcome chase (a reschedule starts it again against the new time)Removes from a workflow
  21. 21Add to Workflow 09.5 Appointment Outcome Chase
  22. 22Clear follow_up_on and follow_up_reasonFollow Up On, Follow Up Reason
  23. 23Which channel is this contact on?
  24. 24Text message rail
  25. 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.
  26. 26Wait: until 1 day before the appointment (skip if past)
  27. 27Day beforeSMSHi {{contact.first_name}}, looking forward to seeing you tomorrow at {{appointment.only_start_time}}. Are we still good?
  28. 28Wait for their reply (6 h)6 hours
  29. 29wait
  30. 30Did they actually confirm?
  31. 31Default Branch
  32. 32Wait: until 2 hours before (skip if past)
  33. 33Same day: see you soonSMSHi {{contact.first_name}}, we are all set for you at {{appointment.only_start_time}} today. See you soon.
  34. 34Yes
  35. 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.
  36. 36Go to: Wait: until 2 hours before (skip if past)
  37. 37Not Yes
  38. 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.
  39. 39Cancel the appointment (hands to Cancellation Recovery)Appointment status: cancelled
  40. 40timeout
  41. 41System note: UnconfirmedUnconfirmed
  42. 42In-app ping: no reply to the day-before askCall {{contact.first_name}}, appointment tomorrow, no reply
  43. 43Add taskConfirm Appointment – {{contact.name}}
  44. 44Go to: Wait: until 2 hours before (skip if past)
  45. 45WhatsApp rail
  46. 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.
  47. 47Wait: until 1 day before the appointment (skip if past)
  48. 48Day beforeWhatsAppHi {{contact.first_name}}, looking forward to seeing you tomorrow at {{appointment.only_start_time}}. Are we still good?
  49. 49Wait StepWaits for a whatsapp reply, 6 h timeout
  50. 50Timeout
  51. 51System note: UnconfirmedUnconfirmed
  52. 52In-app ping: no reply to the day-before askCall {{contact.first_name}}, appointment tomorrow, no reply
  53. 53Add taskConfirm Appointment – {{contact.name}}
  54. 54Go to: Wait: until 2 hours before (skip if past)
  55. 55Customer Responded
  56. 56AI decision maker
  57. 57Default Branch
  58. 58Wait: until 2 hours before (skip if past)
  59. 59Same day: see you soonWhatsAppHi {{contact.first_name}}, we are all set for you at {{appointment.only_start_time}} today. See you soon.
  60. 60Yes
  61. 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.
  62. 62Go to: Wait: until 2 hours before (skip if past)
  63. 63Not Yes
  64. 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.
  65. 65Cancel the appointment (hands to Cancellation Recovery)Appointment status: cancelled
  66. 66Opportunity Not Found
  67. 67No card yet (direct booker): create at BookedCreates a card
  68. 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.

Book a free call