Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.autoplay.ai/llms.txt

Use this file to discover all available pages before exploring further.

Autoplay streams structured UI actions from your users’ browser sessions in real time. This tutorial wires that stream to Userflow so that when the right moment arrives — a user stuck on a page, a first-time feature visit, a repeated error — your backend detects it and fires the correct Userflow flow immediately. This tutorial builds on How to trigger a User Tour. Complete that guide first — it covers the proxy route, EventSource connection, and payload structure. This page covers only what is specific to Userflow.

1. Install Userflow

Add the snippet to your app and initialize it with your token from Settings → Environments.
<script>
  window.userflowJs=window.userflowJs||[];
  (function(){
    var s=document.createElement('script');
    s.async=true;
    s.src='https://js.userflow.com/userflow.js';
    document.head.appendChild(s);
  })();
</script>
Then initialize the SDK with your environment token:
userflow.init('YOUR_USERFLOW_TOKEN');

2. Identify the user

Call this once the user is authenticated. Use the same userId you send to PostHog so Autoplay can match sessions correctly.
userflow.identify(userId, {
  name: user.displayName,
  email: user.email,
  signed_up_at: user.createdAt, // ISO 8601
});

3. Create a flow in Userflow

  1. In the Userflow dashboard go to Flows → New flow and build your tour.
  2. Use the visual builder to add steps — tooltips, modals, hotspots, or checklists — and attach each step to an element on your page.
  3. Set any targeting rules you need (page URL, user segment, etc.), then publish the flow.
  4. Note the Flow ID shown in the URL bar when editing the flow (/flows/<flow_id>).

4. Trigger the flow

In your onmessage handler from Step 4 of the base guide, add the Userflow trigger call:
events.onmessage = (event) => {
  const payload = JSON.parse(event.data);

  if (payload.type !== "usertour_trigger") return;

  const mySessionId = posthog?.get_session_id?.() ?? null;
  if (!mySessionId || payload.session_id !== mySessionId) return;

  userflow.start(payload.flow_id);
};
The flow_id in the payload maps to the Flow ID of your Userflow flow, visible in the URL when editing the flow in the Userflow dashboard.