Changelog

Thumbnail image for changelog item

Segment and Heap integrations

We’re excited to announce new integrations to send events from Dopt to Segment and Heap.

These integrations enable you to do deeper analysis on Dopt flows in your tool of choice without having to instrument any events in the client. For example, you could create an end to end funnel of your Dopt flows in combination with your other product usage data.

Once set up, these integrations will send three events downstream:

  • flow_state_change - e.g. user X finished “Getting started checklist” flow.
  • block_state_change - e.g. user X finished “Welcome tour step 4” block.
  • path_transition - e.g. user X took collaboration path from “Use case quiz” block.

This release lays the foundation for all downstream integrations, so we’ll be releasing integrations with Amplitude and Mixpanel soon!

Check out the docs for more details.


Thumbnail image for changelog item

Measure flow performance with analytics

We’re excited to launch flow analytics directly in Dopt. With analytics, Dopt now has a set of built-in metrics that help you track, understand, and optimize the performance of your flows. These flow insights can help you understand user engagement, learn which flows are working, and pinpoint flows that may need improvement.

Flow analytics page

With flow analytics, you gain visibility into how many users have started, finished, or stopped a flow. You can see these metrics aggregated across all flow versions and individually for each flow version, enabling you to compare the performance of changes across flow versions. You can also choose a time frame to view your metrics, such as the last 7 days.

These analytics work out of the box and don’t require any custom setup or integrations.

Because Dopt experiences are developed in code, your current instrumentation approaches for CDPs and analytics work along side our out of the box analytics. We’ll also be releasing first party, server side integrations with product analytics and CDPs in a few weeks, so stay tuned!

Other improvements & fixes

  • You can now edit webhook and true / false block properties for committed versions
  • In the React SDK, we do a better job of closing socket connections that aren’t used, resulting in less network traffic in your app
  • Improved the latency and throughput of the blocks API to handle requests from SDKs much more quickly
  • Many usability updates to the canvas that make it easier to create flows
  • Fixed a bug when trying to create a flow with a duplicate ID. We also now give an error message.
  • Fixed a bug so the version dropdown now updates after you commit
  • Fixed a bug so saving true / false blocks will now work as expected

Thumbnail image for changelog item

Flow logic and branching

Today we’re super excited to release a set of new features and SDK functionality that enable you to easily build flows with custom branching and logic:

  • True / false branch blocks enable branching based on user properties like role and company properties like plan or the number of employees.
  • Named paths enable you to transition users down specific paths. You can transition users down paths based on things like user actions (clicked “next” or “skip” button), user-collected data (like a question during sign-up), system states (e.g. success, complete, failed), or anything else.
  • Back paths enable you to define paths that go back in a flow.
  • Gate blocks enable you to pause flow progression until all incoming paths have been transitioned, which is useful for creating experiences like waiting until all checklist items are complete before progressing to the next step.
  • Updated SDKs and APIs give you access to the block states and flow transitions to make building your user flows even easier. Our SDKs are headless and power your UI components.

You can read more about these features on our blog and our docs.


Thumbnail image for changelog item

Pricing

We released pricing for Dopt. We’re charging based on monthly tracked users (MTUs). MTUs are the number of unique users that our blocks SDKs have been initialized with in a given month (i.e. users that might qualify for a flow, even if they don’t end up qualifying for any). If you’re sending Dopt all of your users, MTUs will typically map to the number of monthly unique active users in your product.

Pricing tiers

We picked MTUs because it’s a metric that’s simple and easy to understand and predict. It also maps to the value your organization will gain from using Dopt to more rapidly build experiences that help onboard and educate your users.

You can see our pricing page for more details.

Editing block identifiers

We’ve added the ability to edit block identifiers which now makes encoding semantics into the identifier possible. When a block is created, we will automatically generate an identifier for you. Block identifiers can be edited in the uncommitted version by using the Rename action from the panel menu (or just click the identifier in the panel). We’ve also made it easier to see which block maps to an identifier by displaying the identifier on the canvas.

Block identifier

Block identifiers must be unique to a flow so we’ve updated how you access blocks via SDK which should now use a format of $flowId.$blockId. So if you had a flow with an identifier new-user-tour and a block inside of that flow with an identifier welcome-intro, then you would access that block using new-user-tour.welcome-intro.

Don’t worry, we’ve also kept the previous method intact as well which we’re now calling uid. Accessing a block using its uid does not require the flow identifier to be prefixed. uids are generated for you, cannot be changed, and are unique across all of your flows. They’ll look something like V1StGXR8_Z5jdHi6B-myT. You can grab a block’s uid using the Copy UID action from the panel menu. Typically, you will use the uid when accessing a block directly from the API.

Other improvements

  • Improved the usability of the copy to clipboard action
  • Implemented caching of common entities for performance improvements to our public APIs