Journey Builder
The journey builder is a visual editor for designing the structure of a journey. It uses a drag-and-drop canvas where each node represents a step and connections define the execution order.
Builder Interface
The builder consists of three areas:
- Node palette (left) -- Drag step types onto the canvas.
- Visual canvas (center) -- Arrange and connect steps. Supports zoom, pan, and auto-layout.
- Properties panel (right) -- Configure the selected step's settings.
Node Types
Each node in a journey graph serves a specific role:
| Node Type | Description |
|---|---|
| TRIGGER | Entry point of the journey. Defines when and how users enter (URL match, custom event, element click, or manual). See "Configuring Triggers". |
| CONTENT | Renders a content item (tooltip, beacon, announcement, survey, task list) or launches an existing flow. The journey advances when it finishes. |
| WAIT | Pauses the journey for a fixed duration or until a specific calendar date. |
| WAIT_FOR_EVENT | Pauses until the user performs a specific action. Supports a timeout for users who never perform the action. |
| CONDITION | Branches into two or more paths based on user traits or past actions. |
| SPLIT | Distributes users across two or more branches by percentage for A/B experimentation within a journey. |
| GOAL_CHECK | Evaluates whether the user has achieved a goal. Routes to a success or fallback path accordingly. |
| EXIT | Ends the journey. Every path must terminate at an EXIT node. Multiple EXIT nodes represent different outcomes. |
Configuring Triggers
A TRIGGER node's config carries two fields: triggerType (one of the values below) and triggerConfig (the matching payload, validated as a discriminated union).
triggerType | Fires when | triggerConfig shape |
|---|---|---|
URL_MATCH | The user lands on a URL matching the pattern. | { "matchType": "exact"|"contains"|"startsWith"|"endsWith"|"regex", "pattern": string } |
CUSTOM_EVENT | A track() call with the configured event name fires. | { "eventName": string } |
ELEMENT_CLICK | The user clicks an element matching the CSS selector. | { "selector": string } |
MANUAL | The journey is enrolled programmatically via the SDK/API. | {} |
Configuring CONTENT Nodes
A CONTENT node references the artifact it renders via contentId. To launch an existing flow from a journey, set config.contentType: "flow" (or another content type slug like "tooltip", "announcement") so the runtime knows which collection to look the ID up in.
Configuring Wait Delays
WAIT steps accept the following delay options:
- Fixed duration -- Pause for a set number of hours or days (e.g., wait 3 days before the next step).
- Until date -- Pause until a specific calendar date and time.
- Until event -- Pause until the user performs a specific action (e.g., logs in again, visits a page).
Configuring Wait For Event
WAIT_FOR_EVENT nodes pause the journey until the user performs a specific action:
- Event name — The custom event name to wait for (e.g.,
"user:feature_used"). - Timeout — Maximum number of minutes to wait. If the event is not received in time, the user continues down the timeout branch.
Every WAIT_FOR_EVENT node has two outgoing connections: event received and timed out.
Configuring Splits
SPLIT nodes distribute users across branches by percentage:
- Define two or more outgoing connections from the SPLIT node.
- Assign a percentage weight to each connection (weights must sum to 100).
- Assignment is deterministic: a user always takes the same branch across sessions.
Use SPLIT to run A/B tests within a journey — for example, showing different onboarding flows to 50% of new users each.
Configuring Goal Checks
GOAL_CHECK nodes evaluate whether a user has achieved a defined goal:
| Goal Type | Fires When |
|---|---|
event | The user has tracked a specific custom event |
page_visit | The user has visited a specific URL pattern |
attribute_match | A user trait matches a condition (e.g., plan === "enterprise") |
flow_completed | The user has completed a specific flow |
Configure an optional deadline (in days from enrollment). Users who miss the deadline route to the fallback branch.
Condition Branching
CONDITION steps evaluate a rule and route the user down one of two or more paths:
- User trait conditions -- Branch based on attributes like role, plan, signup date, or custom properties (e.g., if role equals "admin", take path A; otherwise, take path B).
- Action conditions -- Branch based on whether the user has performed a specific action (e.g., completed a flow, visited a page, clicked a button).
- Default branch -- Every condition step requires a default (else) branch for users who do not match any defined rule.
Step Ordering and Connections
- Hover over a step node to reveal its connection handle.
- Drag from the handle to another step to create a connection.
- Label connections to describe the transition (e.g., "Flow Completed", "Score >= 8").
- Reorder steps by dragging them on the canvas. The builder validates that no steps are orphaned and no infinite loops exist.
Testing Journeys
Before activating a journey, use the built-in test mode:
- Click Test Journey in the builder toolbar.
- Select a test user or enter a user ID.
- Step through the journey manually, verifying that each step renders correctly and transitions fire as expected.
- Review the test log for any configuration warnings or errors.