Skip to main content
This page covers the runtime rules of an Engagement Funnel: who is allowed in, what gets pre-filled, how layers are skipped, and how the funnel decides which layer to show next.

Authentication & access control

Funnels protect access at two levels. Funnel availability. A funnel can be gated behind an availability window or date range. When access is denied, the contact is routed to the funnel’s fatalistic layer. Availability supports either a reusable publishing window or an explicit start/end range. Per-layer authentication. Each layer can require an authenticated contact:
FieldMeaning
requires_authThe layer requires an authenticated contact.
unauthenticated_target_layerWhere to send an unauthenticated contact.
authenticated_target_layerWhere to send an already authenticated contact (e.g. to skip a login layer).
At navigation time, the funnel checks whether the contact has an authenticated session and redirects accordingly. On WhatsApp the contact is authenticated implicitly (the channel proves the phone number), so the redirect targets aren’t required there.

Skip conditions

Skip conditions let a layer be bypassed automatically when its data is already known (typically after autofill). Each condition reads a value from the session by its slug and compares it; all conditions on a layer must pass for it to be skipped.
OperatorPasses when
not_empty / emptyThe value is / isn’t present.
== / !=Loose equality / inequality.
> >= < <=Numeric comparison.
contains / not_containsSubstring match.
must_be_true / must_be_falseThe value normalizes to a boolean.
input_typeThe value’s detected type matches (text/number/boolean/file/media/location).

Allow skip

allow_skip is the master switch. A layer is skipped only when allow_skip is on, auto_fill is on, and its skip conditions all pass. A layer the contact already skipped is shown again if they navigate back, so a previously skipped answer can be edited.

Layer jump & jump conditions

Navigation between layers is driven by navigation buttons. A button either goes to the previous layer or jumps to a layer. A jump can carry ordered conditions grouped by target: the funnel walks the targets in order and goes to the first target whose conditions all pass, falling back to the button’s default target if none match. A condition can compare:
  • Session data — a session field against a fixed value or another session field, using the operators above.
  • Contact match — whether the current contact matches a query (for example, belongs to a given segment or has a given attribute).

Autofill

Autofill pre-populates inputs so the contact doesn’t re-enter known data. It’s enabled per layer (auto_fill) and configured per input with a source:
SourcePulls from
AttributeA contact attribute (e.g. identifiers.email).
Previous sessionThe value from the contact’s most recent completed session.
Initial dataA value supplied as the funnel’s initial data when it started.
If allow_overwrite is off and the field already has a value, autofill leaves it alone. Autofilled values are validated against the input’s rules; a value that fails validation is dropped.

Subfunnels

A subfunnel layer delegates to another funnel and maps data in and back out:
  • Entering — the target funnel must exist, have a published version and a result layer, and not create a loop. Values are mapped from the parent session into the child’s initial data and pre-validated against the child’s start layer.
  • Exiting — when the child completes, selected values are copied back into the parent session, and the parent jumps to the subfunnel layer’s default target.

Action layers

An action layer runs one or more server-side actions and then forwards automatically — it’s never shown to the contact. Available actions:
ActionPurpose
API callCall an external API with custom headers and parameters.
AuthRun an authentication flow — login, register, register a lead (no password), send an OTP / magic link, or verify a contact.
CheckpointFire an event automation with the session data collected so far.
EndpointCall an internal endpoint and map the response into the session.
HandoffTransfer the conversation to another template and funnel.
Reverse handoffClose the current conversation and reactivate the parent.
Close sessionClose another funnel’s active session for the contact.
Sensitive fields (passwords, OTPs, tokens) are never stored in the session — they’re read from the live submit at execution time.
A checkpoint is how a funnel sends partial data mid-flow: place a checkpoint action at any point to fire an automation with what’s been collected so far. A result layer does the same on completion — triggering an automation that can send the data onward, send an email or webhook, or deliver a rendered, personalized message.

Engagement Funnels

Back to the funnel overview.

Funnel components

The components these rules act on.

Events & Automation

What checkpoints and result layers trigger.