Action needs several pieces of information before it can complete.
→Collect each value in its own step as a slot; the assistant prompts for any not yet provided and skips ones already supplied.
Why: Step-based slot filling handles out-of-order and multi-value inputs without manual branching.
Reference↗
A value must persist after the current action ends.
→Store it in a session variable, not a step/action variable. Action variables are scoped to the action; session variables live for the whole conversation.
Why: Choosing the wrong scope is a classic bug: the value vanishes when the action completes or fails to share across actions.
A step asks the user to pick from a known, fixed set.
→Use an "options" response type with defined choices instead of free text, and map each option to a value.
Why: Options constrain input, eliminate parsing ambiguity, and render as buttons on supported channels.
A collected value (email, date, amount) may be malformed.
→Add a validation condition on the step; if invalid, keep the user on the step with a corrective prompt.
Why: Validating at capture time avoids passing bad data to extensions and downstream steps.
Later steps should run only for certain users or values.
→Set step conditions on variables already collected so steps are skipped when their condition is false.
Why: Conditions express branching without duplicating actions; the editor evaluates them top-down.
Multiple actions need the same sub-flow (e.g. verify identity).
→Factor the shared logic into a subaction and call it from each parent action.
Why: Subactions keep verification logic DRY and consistent; duplicating steps drifts out of sync.
User asks an unrelated question mid-flow ("what are your hours?").
→Allow digression so the assistant answers the side question, then returns to the interrupted action.
Why: Blocking digressions forces a rigid script that frustrates users with legitimate side requests.
Need to compute or transform a value inside a step.
→Use the built-in expression language (e.g. string and math functions on variables) in the step or response.
Why: Lightweight transforms belong in expressions; reaching for a webhook for trivial math is overkill.
A follow-up action needs a value the user gave earlier.
→Reference the existing session variable rather than re-prompting.
Why: Re-asking for known data feels broken; carrying context forward is a hallmark of a good flow.
A flow should stop or jump to another action under a condition.
→Use "end the action" or a "go to a step in another action" transition to control flow explicitly.
Why: Explicit transitions prevent unexpected fall-through to the next step after a terminal condition.