Skip to main content

Flows

Overview

A flow represents a single end-to-end onboarding or engagement flow users will experience in your product such as Marketers trial onboarding , Invited users creating first project onboarding, or Admin onboarding.

Flows are composed of connected blocks that contain the targeting and logic rules.

Lifecycle for users

A flow can be in the following states for each user.

StateDescription
Not qualifiedThe user does not meet the entry condition and will not enter the flow. This is the default state.
QualifiedThe user meets the entry condition and is qualified to start the flow. The flow has not started yet because none of the blocks are active.
StartedUser has started the flow. At least one step block is active.
CompletedUser has completed the flow by hitting a finish block.
ExitedUser was manually exited from the flow without completing it (e.g. clicking a “Hide onboarding” link).
info

The not qualified and qualified states are conceptual states and are not exposed via SDK.

You can see or reset the state of each user per flow on the users page.

Transitioning state

While it is most common to transition state at the block level, Dopt also offers the ability to transition state at the flow level. You can programmatically get and set flow state by accessing the flow via SDK. Learn more →

This is useful for building out experiences that might involve working with the overall state of a flow such as bringing a user back to the beginning of a product tour when they click a restart button.

IntentDescription
ResetReset the flow to the original unstarted state by setting all flow states to false and all block states to active: false and completed: false.
ExitExit the flow by setting the flow state to exited: true and completed: false and all block states to active: false.
CompleteComplete the flow by setting the flow state to completed: true and exited: false and all block states to active: false.

Status

Flows can have a status of either enabled or disabled for a particular environment. Setting the status of a flow effectively allows you to turn a flow on or off depending on your needs.

  • Enabled - Users who match the targeting rules are able to enter the flow and users who are progressing in the flow are able to continue progressing within the flow
  • Disabled - Users will be prevented from entering the flow (even if they match the targeting rules). Users who are progressing in the flow will not be able to continue progressing until the flow is enabled again.

Flow status can be set from flows page or the targeting tab in the flow builder. Setting the flow status affects all versions of a flow for a particular environment.

info

When you create a new flow, its status will default to enabled on the development environment and disabled on the production environment.

Versioning

Flows can be versioned to keep a snapshot of the flow at a particular moment so you can continue to iterate on new changes without worrying about breaking any experiences that rely on how your flow looked like before.

A version is associated with a version tag and an optional commit message which can help with describing the changes made in the version. Versions cannot be modified further once created.

When creating a flow version, you can specify how users will transition when they encounter this version. Dopt currently supports two transition methods:

  • Restart flow - Restarts users who have started (but not completed) the flow to the beginning of the new flow version
  • Exit flow - Exits users who have started (but not completed) the flow so they will not see the new version

How to create a flow version →

Archiving

There may be cases where you may not want to keep a flow around. In these instances, Dopt offers the ability to archive a flow.

When a flow is archived, its configuration, versions, and associated user states are also removed. You will not be able to reuse the archived flow's identifier in a new flow. If you request an archived flow via SDK, it will return false for all states. Likewise, if you request a block via SDK that is part of an archived flow, it will return false for all states.

How to archive a flow →

danger

Archiving a flow effectively deletes the flow. This action cannot be undone so make sure you are comfortable with losing the ability to access this flow and the user state relating to this flow before proceeding.