How flows start
A flow only does anything when a FlowState row exists for a conversation. There are
five ways to create one.
1. Keyword rule
/dashboard/keywords → rule with action start_flow → pick the flow. Any inbound
text matching the rule’s keyword starts the flow on that conversation.
Most common trigger. Examples:
"book"→ start the Booking flow"refund"→ start the Refund flow + assign to billing team"hi" / "hello" / "start"→ start the Welcome flow
2. Automation event
/dashboard/automations → rule with action start_flow triggered on a platform event:
new_contact— a brand-new contact’s first messagetag_added— a specific tag was appliedbooking_created— a booking was confirmedbooking_cancelled— a booking was cancelled (great for “sorry to see you go” follow-ups)- … and more
3. Manual start from the inbox
Inbox composer → Start flow button → pick from published flows. Useful for “customer typed something we don’t have a keyword for, but I want to drop them into the FAQ flow.”
4. Drip campaign step
/dashboard/drips → step with action start_flow. Drip enrols a contact, schedules
steps; when a step’s deadline hits, the flow starts. The drip step is the “trigger”
even though it’s actually a deferred action.
5. Public booking flow
When a customer completes a hosted booking page (/book/[agency]/[client]/[service]),
the platform creates a Conversation if none existed, then optionally starts a
configured post-booking flow. Use this to send “thanks for booking” follow-ups
through the same flow you’d use from chat.
What prevents double-start
The runtime won’t start a second flow on a conversation that already has an ACTIVE / WAITING flow run. Either let the current run complete, or expire the existing FlowState row manually (inbox → conversation detail → expire flow state).