Skip to content
ChatfuelSDK

Flow Builder

The canvas for the part of a conversation you want scripted exactly — twenty-six kinds of block, an editor for every one of them, tested against the live bot.

Typed cards on a canvas, not a config file

Every block is its own type with its own fields, so a WhatsApp list opens a list editor and a template opens a template picker. No JSON anywhere — and the same surface ships as a skill your coding agent reads.

A flow per platform

A flow belongs to WhatsApp, Instagram, Facebook, TikTok or the site widget, and the palette offers that platform’s blocks and no others.

Messages, in every shape

Text, images, video, audio, documents, list messages, approved templates and buttons — each one a card you fill in.

Buttons are the branches

Drag from a button to the block it should lead to. Drop the edge on empty canvas and the block is created already wired.

It waits for the answer

A content block holds the flow there until the contact replies, so what comes next can read what they said.

Logic between the messages

Branch on a segment, set or clear a contact property, post JSON to your own endpoint, summarise the chat, jump into another flow.

Hand it over, either way

An AI-agent block answers inside the flow; a hand-off block moves the conversation to a person in the inbox.

Twenty-four dedicated editors

Every element type the API has setters for is fully editable. Validation is state rather than failure: a fresh card starts with errors, each mutation hands them back recomputed, and the block shows how many are left.

A test is a real conversation

Start test mints a preview conversation and runs the flow from its starting point. Sends travel the production pipeline, so WhatsApp behaves like WhatsApp, and a reload rejoins the same session.

Move ten blocks, send one request

Marquee-select, drag the group, and it goes out as a single bulk position update. Undo runs fifty steps deep and works by sending the opposite request, because the API has no revert.

Entry points on the same canvas

Four of the twenty-six families start a flow instead of continuing one: the site-chat entry point, a triggered message, a one-time WhatsApp broadcast and a scheduled send. Enabling one is refused while its elements are invalid.

Flow, block, element

A flow is blocks, a block is elements, and an edge leaves a block or one of its buttons. Everything is strongly typed, so a card knows its own fields and the inspector knows which ones it has.

01

A flow

One scripted conversation on its own canvas, belonging to one platform. It runs from the block you mark as its starting point, and other flows can redirect into it.

02

A block

A card on the canvas at server-stored coordinates. Sixteen kinds, each with one “next” edge out of it, plus an outlet on every button, list row and condition.

03

An element

The plugin card inside a block — the message, the condition, the webhook call. Twenty-nine kinds, stacked in a block where the platform allows it, reordered and deleted from the inspector.

Twenty-six kinds of block

All of them ship with the module. A flow has one platform, so its palette shows that platform’s families plus the seven that belong to no platform; four of the twenty-six start a flow rather than continue one.

NameWhat the block doesIncluded
Widget
Widget text + buttonsA message in the site chat with buttons under it.
Widget imageA picture in the site chat.
Human agent (widget)Hands the conversation to a person.
Widget entry pointStarts this flow when someone opens the site chat.
WhatsApp
WhatsApp textA text message, with contact attributes written into it.
WhatsApp imageAn image with an optional caption.
WhatsApp videoA video with a file name and an optional caption.
WhatsApp audioAn audio file.
WhatsApp documentA document with a file name and an optional caption.
WhatsApp text + buttonsHeader, body and footer text with reply buttons that continue the flow.
WhatsApp text + URLThe same message, with a button that opens a link instead.
WhatsApp listA menu of rows the customer picks one of.
WhatsApp templateA Meta-approved template, picked from the catalogue and filled in.
Human agent (WhatsApp)Hands the conversation to a person.
Triggered messageStarts the flow when its trigger fires, for the contacts in its segment.
One-time broadcastSends this flow once to a segment, behind a confirm dialog.
Scheduled messageSends this flow on a schedule — weekdays, certain dates, or every few days.
InstagramThe one Instagram family in the API.
Human agent (Instagram)Hands the conversation to a person.
TikTokThe one TikTok family in the API.
Human agent (TikTok)Hands the conversation to a person.
ActionsOn every flow, whatever its platform.
ConditionBranches on a segment of contact filters, with one outlet for the contacts that match.
Set contact propertyWrites a value to one of the contact’s attributes.
Clear contact propertyEmpties one of the contact’s attributes.
Send JSONCalls an HTTP endpoint, with headers, a payload and rules for parsing the reply.
Summarize chatHas the AI read the conversation and store what you asked it to look for.
Redirect to flowContinues in another flow.
AI
AI agentHands the conversation to an AI agent, started from one of six templates.

The canvas from the keyboard

One binding list, bound to the editor element rather than the window, so a host page’s own ⌘K stays the host’s.

NameWhat it does
Global
⌘KThe command palette: every canvas action, and every block in the flow by name.
/Find a block by name.
?The shortcut sheet, which a test keeps in step with the bindings.
TOpen or collapse the test chat. Collapsing keeps the conversation running.
FFit the flow on screen, or just the blocks you have selected.
Tools
1 or VThe select tool.
2 or HPan. Holding space pans in any tool.
3Connect: click a block, then the block it should lead to.
4Open the block palette. Pick one, then click the canvas where it should go.
EnterPlace the picked block at the centre.
Select
⌘ASelect every block.
EscClear the selection, a picked block, or a half-made connection.
Edit
Delete or BackspaceDelete the selection. A block is confirmed first; a connection goes at once.
⌘Z, ⇧⌘ZUndo and redo, fifty steps deep.

What it holds

The numbers the editor is built around, read out of the module rather than estimated.

Undo history50 steps
Cached flow snapshot1,000,000 characters
Flows kept prefetched8
How long a prefetch stays fresh30 seconds
Auto-layout column step320 px
Auto-layout row step220 px
Attribute names fetched per request100
Image upload4 MB
Video, audio or document upload15 MB

FAQs

No. Every block type has its own fields and its own editor — a list editor for a WhatsApp list, a template picker for a template, a segment builder for a condition. There is no JSON config anywhere in this API.

One command, and the canvas is in your app

npx @chatfuel/wizard