Flow builder

The visual canvas end to end: every node and block type, connecting, validating, publishing, templates, sharing and the keyboard shortcuts.

12 min readOpen in HyperDM

Sidebar: Automate → Flow builder. The visual canvas. Use it when a conversation needs branches, waits, conditions, media or an AI hand-off — anything the simple automation builder form can't express.

Needs the manage_automations capability — owner, admin and agent.

The flow builder opens outside the app shell. No sidebar, no header, no feedback chip — the canvas takes the whole window. Use your browser's back button, or the builder's own exit, to return.

Start a flow

Opening /flow with nothing loaded offers three ways in:

  1. Start from a template — pick a recipe, or import a flow file. You review it before saving.
  2. Create with AI — describe what you want and have the graph drafted.
  3. Start from scratch (badged Advanced) — a blank canvas with just a trigger, for when you want full control.

Templates can be searched, filtered By trigger, or browsed by category.

The flow canvas with an AI Step in the path
The flow canvas with an AI Step in the path

The canvas

  • Scroll to pan. Ctrl/⌘ + scroll to zoom. Drag empty canvas to pan.
  • Double-click empty canvas to add a step right there.
  • Drag a port onto another step to connect them — or click the port, then the step. Click empty space to cancel.
  • Alt + drag a step to duplicate it (or the whole selection).
  • Auto-arrange and Reset zoom & position buttons tidy the layout.
  • Download the whole flow as a PNG for sharing a screenshot.

Node types

Added from the Add step panel on the left.

NodeDoes
TriggerStarts the flow (implicit — every flow has exactly one)
MessageText, media, buttons
Follow gateOnly continue if they follow you
ActionTags, fields, requests
ConditionSend people different ways
RandomizerRandomly split your audience (A/B)
Smart delayWait, then continue
AI StepHand this turn to the agent
Start flowJump to another flow

AI Step and Randomizer are the two advanced nodes — they need Growth or above.

Message blocks

A Message node holds one or more blocks:

Text, Image, Voice message, Video, Document (PDF), Card, Gallery, List, Dynamic, Data collection.

Voice, video and PDF blocks pick from your Media librarypaid plans only. Image blocks take a pasted URL.

Instagram accepts PDF and nothing else as a document attachment, which is why there is a "Document (PDF)" option and no generic "File".

TikTok DMs can't carry voice messages, video or documents — only text, images and link cards. A flow set to TikTok containing a media block is flagged as a problem while you edit, not after a failed send.

Buttons

Each button has a type:

TypeConfigStatus
Open URLhttps://…Live — note a URL tap leaves the DM, so it ends that path of the conversation
Go to steppick a stepLive
Copy codeCODELive — tapping it makes the bot send the code as a message to copy
Call number+1…Coming soon — a tap just advances the flow; can't be newly picked
Buy producta product idComing soon — a tap just advances the flow; use the Send product action instead

Constraints the builder enforces: don't mix buttons and quick replies in one message; labels are capped at 20 characters; Instagram allows up to 3 buttons or 11 quick replies per message; and an image plus buttons in one step sends only the buttons — put the image in its own step above.

A step that waits on a tap can carry a no-response timeout (in hours): a Follow gate starts with 24h (set 0 to disable), a Message step's is opt-in. When it expires the flow follows the Timeout branch if you wired one, otherwise it simply ends there.

Data collection reply types

text, email, phone, number, multiple_choice, first_name, last_name, url, file, image, location, date, datetime.

Once a flow contains a Data collection block, a ⤓ Responses button appears in the header: it lists every collected answer for the saved flow and exports them as CSV. Answers also save onto the contact field the block names.

Action types

ActionConfig
Add tag / Remove tagtag
Set fieldfield = value
Increment field (+/-)lead_score = 10
Clear fieldfield
Set opt-in / Set opt-out
Send productproduct id
Subscribe / Unsubscribe from sequencesequence
Assign conversationteammate
Pause automations30m / 1h / 3h / 6h / 12h / 1d / forever

Six more action types show in the picker marked coming soon — External request, Log conversion, Mark conversation open / closed, Notify assignees, and Send Meta CAPI event. They can't be newly configured, and at runtime they are skipped with a note while the rest of the flow runs.

Pause automations is terminal. The conversation is being handed to a human or put to sleep, so nothing runs after it. The builder warns you if you try to attach a step below one, and the button that adds it says so on hover.

Condition operators

equals, not equals, contains, greater than, less than, is set, is empty, before, after.

Channels and triggers

Instagram is the live channel. WhatsApp joins once it's enabled for your workspace; Messenger, TikTok and SMS show in the channel picker but are disabled "coming soon", and a flow can't be saved onto a coming-soon channel.

ChannelTriggers in the picker
InstagramComment-to-DM, DM keyword, Story reply, Story mention, Live comment, New follower†, Ref link / QR, Shopify checkout not completed*, Manual
WhatsAppDM keyword, Opt-in widget, Manual
MessengerComment-to-DM, DM keyword, Manual
TikTokDM keyword, Manual
SMSKeyword, Manual

\* Flag-gated — Ref link / QR, Live comment and Shopify checkout not completed appear only where the deployment can actually route them (all three Instagram-only). A trigger you could pick but the webhook would never deliver is a flow that sits "live" and permanently silent, so these are hidden until armed.

Coming soon, pickable: New follower (waiting on Instagram follow access) can be selected and pre-built — the builder shows an amber ⏳ notice, and the flow saves and can go live but will not start until access lands.

Shopify checkout not completed

Runs once when someone opens Shopify checkout from a HyperDM product link and stops making progress. It only works for people already talking to you on Instagram, while Instagram's reply window is still open.

What you set

  • Wait after checkout activity — 5 to 180 minutes, 30 by default. The timer restarts if Shopify reports more checkout activity. If the reply window will close before your wait is up, HyperDM does not send: we never shorten your wait to squeeze a message in.
  • Products — all eligible Shopify products, or a list you choose. A product is eligible when it's synced from your connected store, active, and has a direct checkout link. Products with size or colour choices open their product page instead, so they can't carry the checkout reference through and aren't offered yet.

Readiness shows four rows: Instagram connected, Shopify app connected, checkout webhooks active, at least one eligible product. "Waiting for Shopify" on the third row means Shopify hasn't approved checkout access for the app yet — there's nothing for you to fix.

What it will never do

  • Message anyone who already ordered. An order — even a pending or manual-payment one — stops the follow-up.
  • Message anyone twice. One per checkout, and at most one checkout nudge per person per 24 hours across all your products and flows.
  • Message anyone after the reply window closes. There's no way to send a promotional reminder on Instagram outside that window, so the follow-up is dropped rather than saved for later.
  • Message someone who replied in the meantime, opted out, or whose conversation you took over.
  • Reach anyone who never messaged you. This isn't a way to contact store visitors.

⚠️ Links can be forwarded. If someone shares your product link, the checkout is matched to the link you sent, not to a verified buyer — so the follow-up may reach the person who received it rather than whoever opened checkout. Your funnel numbers say link/session attribution for the same reason.

Suggested message. Lead with help, not a discount: sizing, stock and shipping are what actually stop a checkout, and opening with money reads as pressure. {{checkout_product_name}} names what they were looking at and {{checkout_url}} takes them back to their own checkout. The Checkout nudge recipe in the Vault is set up this way.

TikTok has no comment trigger and never will. No TikTok API at any access tier turns a comment into a DM, so listing it as "coming soon" would be a promise that can't be kept.

Check it before you publish

Design checks

A panel lists problems with the flow as you build, in two tiers. Red issues disable Set live: an unwired trigger, an unwired button/quick-reply or Follow-gate branch, a randomizer branch going nowhere, missing or still-processing media, an unswapped template placeholder, or a step wired after a Pause automations. Grey notes advise without blocking. Most carry a Fix it → link to the offending step, and a dangling branch offers a one-click "End the flow here" remedy.

On a comment trigger, the first private reply may hold one text or one image block only — buttons and quick replies are fine (the tap opens the 24-hour window), but a second block, an attachment, or a data-collection ask in that first step is a go-live blocker. Put the richer content in the step after the tap.

Simulator

Click the preview toggle to open a phone preview beside the canvas. It plays your flow — nothing is sent. It walks the graph, shows each message as the customer would see it, and lets you tap buttons to follow a branch.

Drop-offs

Toggle Drop-offs to shade steps by how many people are lost there. Each step also shows its own entered / completed counters once the flow has real traffic.

Finish setup

When a flow arrives from a template or the community gallery it comes with placeholders. Finish setup collects every one of them into a checklist — "pick or record a voice message", "choose a product", "choose the flow to jump to" — so you can swap the template's placeholders for your own before going live.

Save and publish

  • Save — writes the flow. The header says You have unsaved changes or All changes saved.
  • Set live — saves and publishes.
  • Set draft — returns a live flow to draft.

Free is capped at 5 flows. Every paid plan is unlimited. The canvas itself is free — the cap is on how many flows you keep.

Share a flow

  1. Save the flow first — Share works on the saved version.
  2. Click the share button in the header.
  3. Fill in Title, Description, and Shared by.
  4. Optionally tick Also submit to the community gallery and pick a Category. It goes live there once automatic checks pass.
  5. Click Create link.

A share is a frozen snapshot: later edits don't change what installers get. Voice notes, videos, documents, products and jump-to-flow targets don't travel — the dialog counts what won't come along, and installers see placeholders to fill via Finish setup.

You get a link anyone can install the flow from. It installs on their canvas as a draft — they review it, swap in their own links, and decide whether it ever goes live.

Manage what you've shared at Settings → Shared flows.

Keyboard shortcuts

Press ? on the canvas for the cheat-sheet.

Editing

KeysDoes
Ctrl/⌘ + ZUndo
Ctrl/⌘ + Shift + Z, or Ctrl/⌘ + YRedo
Ctrl/⌘ + CCopy the selected steps
Ctrl/⌘ + VPaste them back, wiring and all
Delete / BackspaceDelete the selected steps

Selecting

KeysDoes
Ctrl/⌘ + ASelect every step (the trigger stays put)
Shift + clickAdd or remove one step from the selection
Shift + dragRubber-band a rectangle of steps
EscClear the selection, or cancel connecting

Canvas

InputDoes
scrollPan around
Ctrl/⌘ + scrollZoom
drag empty canvasPan
double-clickAdd a step there
Alt + dragDuplicate a step or selection
drag a portConnect it to a step

The Fields tab

Beside Add step there is a Fields tab listing System fields, Custom user fields and Bot fields — the merge tags you can drop into any message. You can create a custom field here without leaving the canvas.

Flows vs automations

Every automation can be converted: use Open as flow on its row in Automations. Your automation keeps running and you get an editable visual copy — but automations win keyword conflicts, so once your converted flow is live, pause the original automation or it will keep answering that keyword and the flow never runs.

Go the other way — from canvas to form — with the Switch to the simple, form-based builder button in the header.

Common questions

Why can't I add an AI Step or a Randomizer? Both are advanced nodes and need Growth or above. See plans-and-billing.md.

Why is a media block flagged? Either your plan doesn't include media (paid plans only), the asset isn't finished processing, or the flow's channel can't carry it (TikTok).

Nothing runs after my Pause automations step. Correct, and deliberate — the step is terminal. Put anything that must happen before it.

Where did my sidebar go? The flow builder lives outside the app shell. Use the back button.

Can I get my flow back after deleting it? Yes — Recently deleted at the bottom of the Automations page, for 30 days.

Try HyperDM for free

50 free conversations a month, no card. Connect Instagram and follow the guide you just read.

Get startedNO CARD · LIVE IN 10 MINUTES · CANCEL ANYTIME