Introduction to Flows

A flow visually represents conditional branch logic that is applied to contacts upon entry. Once a contact enters a flow, they interact directly with its nodes. Nodes consist of actions and split actions, which define the flow’s length—ranging from a single node to an extended sequence.

Actions

An action signifies an operation performed within the flow. Essentially, these are commands that enable you to:

These actions are executed immediately in top-to-bottom order.

Split Actions

These serve as pivot points within a flow, dividing it into new branches. They are conditional statements that direct contacts based on evaluations of:

Anatomy of a Wait for Response Split Action

Split actions include five inputs that form a powerful conditional structure:

 

A – The type of RuleSet to create:

  • Wait for Response: Awaits an incoming message and evaluates it against response rules. An optional timer can trigger a reminder after inactivity or create a pause.

  • Call a Webhook: Calls a URL with flow context (available variables including contact responses and info). Returns are stored for reference via @webhook. Includes ‘Successful’ and ‘Failed’ categories for error handling.

  • Call Zapier: Adds a flow event corresponding to a Zapier trigger. Responses are sent to Zapier for integration with 500+ apps—no coding required. See the guide to begin.

  • Transfer Airtime: Transfers airtime to prepaid phones across 400+ networks in 100 countries.

  • Enter a Flow: Starts the active contact in a child flow, then returns to the parent. New conditions: Completed and Expired. Use @parent.[field] for parent variables and @child.[field] for child flow variables. Learn more about variables here.

  • Split by contact field: Applies response rules to a value in a contact field (e.g., Name, Phone), referenced as @contact.[variable-name] (e.g., @contact.state).

  • Split by expression: Evaluates the result of an expression (e.g., @(REMOVE_FIRST_WORD(input.text))), which may include variables, functions, or both.

  • Split by flow result: Applies rules to values separated by a delimiter (e.g., space, plus, period). See the guide for details.

  • Split randomly: Creates evenly distributed buckets for random branching (e.g., A/B testing). Refer to the A/B testing guide.

B – The operand (a variable or expression) against which response rules are evaluated. In a Wait for Response action, this is typically @input.text (the incoming message).

C – The response rules that assess the operand. Rules are processed left to right; the first match applies, and subsequent rules are skipped.

D – The timeout duration after which a non-responsive contact is routed via a No response category. This can connect to a reminder message or remain unconnected to exit the flow. Learn more about timeouts here.

E – The value(s) response rules match against the operand. For example, a Split Action might match Nigerian northern state names. Using has any of these words, a response containing “Adamawa” would place the contact in the “Northern States” category. The last rule must be a catch-all (e.g., “Other”) to ensure every response is categorized.

F – The category where contacts are placed if the operand matches a rule. Categories are pathways to new nodes, directing the contact onward. A category passage is recorded as a response in analytics.

G – The name of the flow variable created and populated by the Wait for Response action. In the example, the result is saved to @results.question_1_response.

Flow Membership

Flows are states contacts enter and exit. Upon entry, a contact becomes an active flow member until exit. The journey from entry to exit—including all intermediate activity—constitutes a run. Runs and their details are displayed in flow results and can be managed via the Flow Run API endpoint.

Active members are indicated by a blue icon on the top left of each node:

Click the icon to send a follow-up message.

Entering a Flow

Contacts can enter flows via:

  • Manual placement using the “Start” button in the flow editor. Options include:

    • Have not started in this flow in the last 90 days to exclude recent participants.

    • Are not currently in a flow to avoid interrupting active flows. Note: Removing a contact from a flow prevents re-entry.

    • Have sent a message in the last [period] to target active contacts (adjustable timeframe).

  • Triggering by a campaign event.

  • Sending a keyword.

  • Calling your channel’s phone number.

  • A missed call from the contact.

  • Sending an unhandled message to your channel.

Exiting a Flow

Contacts exit flows when:

  • They pass through the final node.

  • They reach an unconnected node.

  • They pass through an Enter another Flow action.

  • They expire due to inactivity (configurable in the flow editor’s ☰ Edit menu).

New flows default to a 3-day expiration, adjustable via dropdown.

Flow Membership Rules

Contacts may interact with only one flow at a time. While active in a flow, their responses are handled exclusively by that flow until exit or expiration.