A/B Test
The A/B Test node deterministically buckets each session into one of several named splits and routes the flow down the matching port. Use it to compare two message copy variants, two onboarding flows, or any change where you want measurable signal before committing.
Configuring the node
- Drop the A/B Test node from the Logic category onto the canvas.
- Open the configuration drawer and add one row per split:
- Key — short identifier (e.g.
variant_a,control). This is the port name on the canvas; wire each split’s port to the downstream branch you want to test. - Admin label — optional human-readable name shown only in the drawer and in analytics.
- Percentage — integer 0–100. The drawer enforces that all percentages sum to exactly 100; the total + green check appear at the bottom of the splits list. Recipes that don’t sum to 100 won’t publish.
- Key — short identifier (e.g.
Output ports
One output port per configured split, with the port name equal to the split’s key. Wire each port on the canvas to the branch that split should run.
How bucketing works
Bucketing is deterministic per session: a SHA-256 hash of
(session_id, node_key) produces a number 0–99, mapped across the
cumulative percentages. The decision is stored once when the session first
hits the node, so a session that re-enters the A/B Test (e.g. inside a
Jump loop) sees the same split every time. There’s
no separate stickiness toggle — every split is sticky by construction.
When to use it
- Compare two greeting messages and measure the lift on engagement.
- Run a riskier flow change against a small holdout (e.g. 90% control, 10% experiment).
- Split traffic across three follow-up messages and see which converts best on a downstream Question.
When not to use it
- The split should depend on a property of the user (tier, region, language) — use Condition instead. A/B Test is uniform random within the configured percentages; it doesn’t look at contact attributes.
- You need different splits per cohort over time — re-deploy the recipe with new percentages when you want to roll out a winner; the node doesn’t have a runtime override surface.
Notes
- Analytics surface the split assignment as an event on each session, so you can break down downstream KPIs (containment, transfer rate, CSAT) by split in the analytics dashboards.
- Split assignment writes to
bot_ab_assignments— the same session visiting the same A/B Test node a second time reads the existing row rather than re-bucketing.