Introduction to Conditional Branching (Split Actions)

Splits are the decision points in your flow. They evaluate an input (like a message, a contact field, or a webhook response) and route contacts into different paths. When you use splits consistently, your flows become easier to read, easier to troubleshoot, and far more reliable at scale.

Set up clean splits (and keep routing predictable)

Use this checklist as a fast path to build reliable branching.

  1. Understand what a split does (and what it can evaluate)
  2. Pick the right split type for your goal
  3. Configure the operand (what you’re testing)
  4. Add response rules and categories (with an “Other” fallback)
  5. 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

1
Understand what a split does

  1. A split (also called a Split Action) routes a contact based on a condition.
  2. 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.]

⚙️
Technical Detail: Splits evaluate an operand (the value you test) using response rules, and route the contact into the first matching category.

2
Pick the right split type for your goal

  1. 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.]

💡
Tip: Name your results clearly (e.g., consent, district, birthdate). It makes later splits easier and reduces mistakes.

3
Configure the operand (what you’re testing)

  1. 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.]

⚠️
Warning: If your operand references something that no longer exists (deleted field/group/etc.), your node can turn red and behave unexpectedly. Fix missing dependencies before publishing.

4
Add response rules and categories

  1. Add your response rules (examples: has any of the words, has a number between, has a date).
  2. Assign each rule to a category (branch).
  3. Ensure the final rule is a catch-all (usually Other).
  4. 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”.]

⚙️
Technical Detail: If multiple rules share the same category name, the flow editor can display them as a single category branch, even though several rule tests are grouped under it.

5
(Optional) Handle “No response” with timeouts

  1. Some split types (especially Wait for Response) allow a timeout.
  2. Set the time window (e.g., 5 minutes).
  3. Configure the No response category.
  4. 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.]

💡
Tip: If you loop reminders, cap the loop using a node visit counter (so you don’t message uninterested contacts forever).

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.