Skip to Content
📚 Documentation is in active development — pages marked TODO will fill out over the next few weeks.
BookingsUsing bookings in flows

Using bookings in flows

The bookings feature ships with three flow blocks. See Booking blocks for per-block config; this page shows them composed.

Example flow: book a service from WhatsApp

[Trigger] ┌─────────────────────┐ │ Reply buttons │ "Hi! What would you like to do?" │ - Book a haircut │ ──┐ │ - Cancel a booking │ │ │ - Talk to a human │ │ └─────────────────────┘ │ ┌───────────────┴─────────────┐ │ │ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ offer_slots │ │ cancel_booking_ │ │ serviceId: 42 │ │ picker │ │ gcalAccountId: 7 │ │ │ └──────┬──────────────┘ └─────────┬───────────┘ │ slot tap │ booking tap ▼ ▼ ┌─────────────────────┐ ┌─────────────────────┐ │ confirm_booking │ │ Text │ │ + Text confirmation │ │ "Cancelled — slot │ └─────────────────────┘ │ is free again." │ └─────────────────────┘

Step-by-step

  1. Trigger — keyword "book" → start_flow this one
  2. Reply buttons — the customer’s intent
  3. offer_slots (Book branch):
    • serviceId from the catalog
    • gcalAccountId from connected Google Calendars
    • Sends an interactive list of slots
    • Customer picks → confirm_booking block creates the row + Google event
  4. cancel_booking_picker (Cancel branch):
    • Lists customer’s upcoming CONFIRMED bookings
    • Customer picks one → cancel runs end-to-end (delete event, flip status, fire booking_cancelled event)

What the bus fires

  • booking_created — every successful confirm. Drips listening to this enrol the customer for “1-hour reminder” + “thanks for booking” follow-ups.
  • booking_cancelled — drips clean up their enrollments automatically; reminder flows stop firing.
  • booking_no_show — manual flip from the dashboard; can trigger a re-engagement flow.

Tips

  • Keep the service id literal when you have ONE service; use {{run.selectedServiceId}}
    • a list-picker step for multi-service flows.
  • Combine offer_slots with a wait block + reminder text for “we’ll text you 1 hour before” patterns.
  • Wire the offer_slots’ empty-text to a fallback flow that lets the customer leave their name + phone so the operator can call back.
Last updated on