10–12 min read
Flows
Updated on: 18/12/2025
Set up clean splits (and keep routing predictable)
Use this checklist as a fast path to build reliable branching.
- Understand what a split does (and what it can evaluate)
- Pick the right split type for your goal
- Configure the operand (what you’re testing)
- Add response rules and categories (with an “Other” fallback)
- Handle “No response” with timeouts when needed
You’re ready to branch contacts safely, debug faster, and scale your flows with fewer surprises.
Step-by-Step Process
- A split (also called a Split Action) routes a contact based on a condition.
-
You can split based on inputs such as:
- An incoming message or recording
- A webhook response
- An airtime transfer result
- A contact’s behavior in a subflow
- A contact field value (@contact.*)
- A flow result (@results.*)
- An expression result
- Random distribution (A/B testing)
- Group membership
[CAPTURE: Flow editor showing a split node branching into multiple categories.]
-
In the split configuration, you’ll first select the split type. Common options include:
- Wait for Response — Use this to collect a contact reply (usually @input.text), validate it with response rules, save it as a named result (@results.*), and optionally route “No response” after a timeout.
- Call a Webhook — Use this to send flow context to an external URL, branch on Successful vs Failed, and reference returned JSON using @webhook (when supported).
- Transfer Airtime — Use this to send airtime to a contact and route based on transfer outcomes (success/failure paths).
- Enter a Flow — Use this to start the contact in a child flow, route based on Completed vs Expired, and reference variables across flows using @parent.* and @child.*.
- Split by Contact Field — Use this to evaluate values like @contact.state or @contact.age and route contacts based on stored profile data.
- Split by Expression — Use this to evaluate a computed value (e.g., functions, text parsing, transformations) and route based on the result.
- Split by Flow Result — Use this to evaluate values collected earlier in the flow (@results.*) and optionally split a result using a delimiter-based structure when needed.
- Split Randomly — Use this to distribute contacts evenly across branches (A/B testing, sampling).
[CAPTURE: Wait for Response split selected, showing operand and response rules.]
[CAPTURE: Call a Webhook split showing categories “Successful” and “Failed”.]
[CAPTURE: Transfer Airtime split showing outcome branches.]
[CAPTURE: Enter a Flow split showing “Completed” and “Expired” branches.]
[CAPTURE: Split by Contact Field selected with operand referencing @contact..]
[CAPTURE: Split by Expression node showing an expression operand and rule categories.]
[CAPTURE: Split by Flow Result referencing @results. with categories.]
[CAPTURE: Split Randomly showing multiple evenly distributed branches.]
-
The operand is the value your rules evaluate. Typical operands include:
- Incoming reply: @input.text
- Contact field: @contact.<field_name>
- Flow result: @results.<result_name>
- Expression output: @(…)
- Webhook output: @webhook.<key> (if available)
[CAPTURE: Split node showing the operand field with a variable dropdown/autocomplete.]
- Add your response rules (examples: has any of the words, has a number between, has a date).
- Assign each rule to a category (branch).
- Ensure the final rule is a catch-all (usually Other).
-
Keep this behavior in mind:
- Rules are evaluated in order.
- The first match wins.
- Contacts always route somewhere because Other catches anything not matched.
[CAPTURE: Split configuration showing multiple rules mapped to categories like “Yes”, “No”, and “Other”.]
- Some split types (especially Wait for Response) allow a timeout.
- Set the time window (e.g., 5 minutes).
- Configure the No response category.
-
Connect it to one of these options:
- A reminder message and loop back
- A “continue later” message
- An exit path
[CAPTURE: Wait for Response split showing a timeout and “No response” branch.]
Common Issues & Quick Fixes
My split always routes to “Other”
Problem: Responses never match your expected categories.
Fix:
- Confirm the operand is correct (e.g., @input.text for replies).
- Add synonyms/spelling variants to “has any of the words”.
- Check workspace date format when validating dates.
- Move broad rules lower and keep Other last.
My branches look duplicated or confusing
Problem: You see fewer category branches than rules, or categories look merged.
Fix:
- Check if multiple rules share the same category name.
- Rename categories clearly (e.g., “Yes”, “No”, “Invalid input”).
- Keep categories action-oriented (what happens next), not just rule names.
My split depends on a field that no longer exists
Problem: The node turns red or shows a missing dependency warning.
Fix:
- Recreate the missing field/group, or update the node to reference a valid resource.
- Use the Flow Issues panel to locate every affected node quickly.
