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
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.
|Not qualified||The user does not meet the entry condition and will not enter the flow. This is the default state.|
|Qualified||The 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.|
|Started||User has started the flow. At least one step block is active.|
|Finished||User has finished the flow by hitting a finish block.|
|Stopped||User was manually exited from the flow without completing it (e.g. clicking a “Hide onboarding” link).|
The not qualified and qualified states are conceptual states and are not exposed.
You can see or reset the state of each user per flow on the users page.
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.
|Reset||Reset the flow to the original unstarted state by setting all flow states to |
|Stop||Stop the flow by setting the flow state to |
|Finish||Finish the flow by setting the flow state to |
All flows have a unique identifier that is specified when the flow is created. This is the key that you will use to reference the flow when configuring which flow version to request via SDK. Flow identifiers cannot be changed after the flow is created.
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.
When you create a new flow, its status will default to enabled on the development environment and disabled on the production environment.
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
You can also access your uncommitted changes prior to creating a new version with the
0 version tag. This can be useful while actively developing your flow so you don’t have to commit to see the changes while developing.
How to create a flow version →
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.
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.