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
- Trigger — keyword
"book"→ start_flow this one - Reply buttons — the customer’s intent
offer_slots(Book branch):- serviceId from the catalog
- gcalAccountId from connected Google Calendars
- Sends an interactive list of slots
- Customer picks →
confirm_bookingblock creates the row + Google event
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_cancelledevent)
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_slotswith awaitblock + 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