Chatbot Flows
A flow is the conversation plan your chatbot follows when it talks to a user. The Flow Editor is a visual canvas where you build that plan by adding messages, connecting them together, and adding logic to branch the conversation based on what the user does.
A flow is made of two things: messages (the boxes on the canvas, often called nodes) and connections (the arrows between them). When a user opens a chat, the flow runs from the Start Message and follows the arrows. Some messages just send text; others ask a question with quick-reply buttons, hand the conversation to a human agent, run custom logic, or branch based on the user's country, language, or the time of day.
You can keep more than one flow open at once. Each flow opens in its own resizable window — drag the title bar to move it, drag the corners to resize it, or click the maximise icon to fill the screen. Keyboard shortcuts apply to whichever flow window is currently in focus.
Managing Flows
Find, create, copy, export, and delete flows from the Flows menu.
View All Flows
View and search through all available chatbot flows in your organization.
Steps:
- Click Flows in the main menu.
- Click All Flows to see a list of all flows.
- Use the Search field to filter flows by name or ID.
- Each flow card displays the flow name, ID number, and type.
- You can Copy, Edit, Export, or Delete a flow directly from its card.
Create a New Flow
Create a new standard flow or import an existing flow from a JSON file.
Steps:
- Click Flows in the main menu.
- Click Create Flow.
- Choose Create New for a standard flow, or Import to upload an exported flow.
- Enter a unique Flow Name.
- Click Create New Flow (or Import New Flow if importing).
- Flow names must be unique within your organization.
- When importing, drag and drop a JSON flow file into the import area.
Copy a Flow
Create a duplicate of an existing flow with a new name.
Steps:
- Navigate to All Flows.
- Find the flow you want to copy and click Copy.
- Enter a new name for the copied flow and confirm.
Export a Flow
Export a flow as a JSON file for backup or to import into another organization.
Steps:
- Navigate to All Flows.
- Find the flow you want to export and click Export.
- The flow downloads as a JSON file.
Delete a Flow
Permanently remove a flow from your organization.
Steps:
- Navigate to All Flows.
- Find the flow you want to delete and click Delete.
- Confirm the deletion when prompted.
Opening the Flow Editor
The Flow Editor opens in a resizable window. The flow is drawn on a large scrollable canvas; the toolbar across the top contains every action available to you.
Open a Flow for Editing
Open the visual Flow Editor to design or modify a flow.
Steps:
- Navigate to All Flows.
- Click Edit on the flow you want to modify.
- The Flow Editor opens, displaying every message in the flow.
- The Start Message (the very first message in any flow) is special — it always exists, cannot be deleted, and is where every new conversation begins.
- You can leave the Start Message empty: the flow will simply move on to the next connected message without sending anything.
- You can open several flows side-by-side — drag a window's title bar to move it or its corners to resize it.
- Clicking Edit on a flow you already have open brings that window to the front instead of opening a second copy of the same flow.
Navigating the Canvas
The canvas is much larger than the visible window. Pan and zoom to move around, and use the toolbar's view buttons to quickly fit, focus, or auto-arrange your flow.
Pan and Zoom
Move around the canvas and change the zoom level.
Steps:
- Click and drag any empty area of the canvas to pan.
- Scroll up or down with your mouse wheel (or trackpad) to zoom in and out under the cursor.
Focus All / Center on a Message
Quickly fit the whole flow on screen, or jump to a specific message.
Steps:
- Click the Focus All button (apps icon) to zoom out so every message is visible.
- Select a single message and click the Center on selection button (aperture icon) to focus and zoom on it.
Auto Layout
Automatically arrange every message into a tidy tree.
Steps:
- Click the Auto Layout button (git-network icon) in the toolbar.
- The flow is rearranged into a hierarchical tree starting from the Start Message.
- The canvas zooms to fit so you can see the result.
- If only some messages are selected, the group action toolbar above the selection includes an Auto Layout icon that arranges just those messages.
Show or Hide the Grid
Show a background grid and choose its spacing.
Steps:
- Click the Toggle Grid button (grid icon) to show or hide grid markers on the canvas. The shortcut is G.
- Click the small dropdown arrow next to the grid button to choose a spacing: 10, 20, 40 (default), 80, or 160 pixels.
Snap to Grid
Make messages snap to the grid when you drag them.
Steps:
- Click the Snap to Grid button (magnet icon) to toggle snapping on or off. The shortcut is S.
- When snapping is on, every dragged message — and every newly placed message — aligns to the nearest grid intersection.
- You can have Snap to Grid on without showing the grid lines, and vice-versa.
Selecting Messages and Connections
Most actions in the editor — edit, delete, copy, connect — start by selecting something. The Flow Editor supports single selection, additive multi-selection, and a persistent box-select mode.
Select a Single Message or Connection
Click anything on the canvas to select it.
Steps:
- Click a message to select it. A small action toolbar appears above the selected message with Edit, Connect, and Delete icons.
- Click a connection arrow to select it. A delete icon appears at the middle of the arrow.
- Click any empty area of the canvas, or press Esc, to deselect.
Select Multiple Messages
Select a group of messages so you can move, copy, delete, or auto-layout them together.
Steps:
- Hold Shift and drag a box across the canvas to select every message inside it. Shift-drag is additive — messages already selected stay selected.
- Or click the Box Select button (crop icon) in the toolbar to turn on persistent box-select mode. The cursor becomes a crosshair and any canvas drag draws a selection box. Click the button again, or press Esc, to leave box-select mode.
- Press Ctrl+A (or ⌘+A on Mac) to select every message in the flow.
Connecting, Editing, and Deleting
Once you've selected a message or connection, you can edit it, connect it to another message, copy it, or delete it. Most actions are reachable from the small action toolbar that appears above a selected message, from keyboard shortcuts, or from both.
Connect Messages
Draw an arrow from one message to another to define the conversation flow.
Steps:
- Click a message to select it. A blue half-circle connect handle appears on its right edge, and a Connect icon (merge icon) appears in the action toolbar above it.
- Drag from the connect handle (or from the Connect icon) onto the target message. A preview line follows your cursor.
- Release over the target message to create the connection.
- Press Esc at any time during the drag to cancel.
- A message can have up to 6 outgoing connections.
- Some message types have stricter rules — Route to Agent and Switch cannot have outgoing connections, and Logic Blocks can only have one. See the per-type sections below.
Edit a Message
Open a message's edit dialog to change its content.
Steps:
- Double-click the message, or select it and click the Edit icon (pencil) in the action toolbar.
- Change the fields in the edit dialog.
- Click Save Changes to apply, or Cancel to discard.
Delete a Message or Connection
Remove a message, a connection, or a group of selected messages.
Steps:
- To delete a single message: select it and click the Delete icon (red trash) in the action toolbar, or press Delete / Backspace.
- To delete a connection: click the arrow, then click the Delete icon that appears at the middle of the arrow.
- To delete several messages at once: select them (see Select Multiple Messages) and either press Delete / Backspace or click the Delete icon in the group action toolbar.
Undo and Redo
Step backwards or forwards through recent changes.
Steps:
- Click the Undo button (undo arrow) in the toolbar, or press Ctrl+Z (⌘+Z on Mac).
- Click the Redo button (redo arrow), or press Ctrl+Y / Ctrl+Shift+Z (⌘+Y / ⌘+Shift+Z on Mac).
Copy and Paste Messages
Copy one or more messages and paste them elsewhere — even into a different flow.
Steps:
- Select one or more messages.
- Press Ctrl+C (⌘+C on Mac), or click the Copy icon in the group action toolbar when multiple messages are selected.
- A badge appears on the Paste button (clipboard icon) showing how many messages are on your clipboard.
- Press Ctrl+V (⌘+V on Mac), or click the Paste button, to paste them into the current flow. Outgoing connections between copied messages are preserved.
- The clipboard is shared across every Flow Editor window in this browser, so you can copy from one flow and paste into another.
- To empty the clipboard, click the small dropdown arrow next to the Paste button and choose Clear Clipboard.
- The Start Message is never copied, even if it is part of your selection.
Keyboard Shortcuts
Keyboard shortcuts apply to whichever Flow Editor window is currently in focus. They're suppressed while you're typing in a text field, so they never collide with the field's own shortcuts.
Shortcut Reference
Every keyboard shortcut supported by the Flow Editor.
| Shortcut | Action |
|---|---|
| Esc | Cancel an in-progress connection drag, leave Box Select mode, or clear the current selection |
| Delete / Backspace | Delete the selected message(s) — the Start Message is protected |
| G | Toggle grid display |
| S | Toggle Snap to Grid |
| Ctrl+Z / ⌘+Z | Undo |
| Ctrl+Y / Ctrl+Shift+Z | Redo (same with ⌘ on Mac) |
| Ctrl+A / ⌘+A | Select every message in the flow |
| Ctrl+C / ⌘+C | Copy selected messages (only intercepted when messages are selected — otherwise normal browser text-copy) |
| Ctrl+V / ⌘+V | Paste from the Flow Editor clipboard |
| Shift + drag | Box-select; adds to the existing selection |
Message Types
Every button in the message-creation section of the toolbar adds a different type of message to your flow. Click a type's icon, then click on the canvas to place it. Double-click the new message to fill in its content.
Each type has its own colour-coded header so you can recognise it at a glance: blue for messages, teal for User Details, violet for Web Link and Image, amber for Route to Agent, green and purple for Logic Blocks, red for Routes, indigo for Switch, and black with a sparkle for AI Agent.
This section covers the simpler types. The more involved ones — Route to Agent, Logic Blocks, and Switch — each have their own section further down.
Add a Text Message
Send plain text to the user, optionally with quick-reply buttons.
Steps:
- Click the Text Message button (text icon) in the toolbar.
- Click on the canvas to place the message.
- Double-click the message to open its edit dialog.
- Enter your message in the Message Text field.
- If the message has 2 or more outgoing connections, fill in a label for each Button field that appears.
- Click Save Changes.
| Field | Description |
|---|---|
| Message Text | The text sent to the user. |
| Use Quick Reply Buttons | Toggle that appears once the message has 2 or more outgoing connections. On = show responses as quick-reply chips; off = show them as numbered choices in the message body. |
| Button 1–5 Text | The label shown on each response button. One field appears per outgoing connection. |
- The Start Message is allowed to be empty — the flow will skip past it.
- Need help drafting? See Using the AI Writing Assistant below.
- Different chat platforms have different length limits — see Platform Length Warnings below.
Add a Keyword
A jump-in point that fires when the user types a specific word.
Steps:
- Click the Keyword button (menu icon) in the toolbar.
- Click on the canvas to place the keyword node.
- Double-click to edit and enter the keyword.
- Connect the keyword to the message that should run when that keyword is typed.
| Field | Description |
|---|---|
| Keyword | The word or phrase that triggers this branch when the user types it. |
Add a Web Link
Send a message with a tappable button that opens a URL.
Steps:
- Click the Web Link button (link icon) in the toolbar.
- Click on the canvas to place the message.
- Double-click to open the edit dialog.
- Fill in the message text, the URL, and the button label.
| Field | Description |
|---|---|
| Link Message Text | The text shown above the link button. |
| URL to link to | The full web address, including https://. |
| Button Text | The label shown on the link button. |
Add an Image
Send a picture.
Steps:
- Click the Image button (image icon) in the toolbar.
- Click on the canvas to place the image node.
- Double-click to open the edit dialog.
- Drag and drop an image file into the upload area.
Add a User Details Request
Ask the user for their email address or phone number, validate the answer, and continue if it's valid.
Steps:
- Click the User Details button (contact icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to open the edit dialog.
- Choose whether to request Email address or Phone number.
- Fill in the prompt and the validation-error message.
- Decide how many failed attempts are allowed before the flow moves on without an answer.
| Field | Description |
|---|---|
| Request Type | Email address or phone number. |
| Message Text | The prompt shown to the user. |
| Validation Error Message | What to send if the user's answer doesn't look like a valid email or phone number. |
| # of attempts before skipping | How many invalid replies are tolerated before the flow continues anyway. 0 = unlimited. |
Add a Logic Input Block
Like a Logic Block, but waits for the next message from the user before it runs.
Steps:
- Click the Logic Input button (code-download icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to open the code editor.
- Write JavaScript that processes the user's reply.
- Click Save Changes.
- Use Logic Input when you need to capture and validate free-form text from the user (e.g. an order number, a postcode) — full reference in Logic Blocks.
Add a Route
Define a named entry point that other parts of the flow can jump to.
Steps:
- Click the Route button (funnel icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to give it a name and optional description.
- Connect the Route to the first message in the branch it represents.
| Field | Description |
|---|---|
| Route | A unique name for this route (case-insensitive). |
| Route Description | Optional. Explain what this route is for — shown on the canvas to help yourself and other builders. |
- Routes are how Switch nodes, Logic Blocks, and the Flow Confusion setting send the conversation to a specific point in the flow.
- Use Routes to keep reusable conversation segments (a main menu, an opt-out, a "talk to sales" branch) in one place.
Add an AI Agent
Hand the conversation to an AI Agent that answers questions from a Knowledge Base.
Steps:
- Click the AI Agent button (sparkle icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to configure which AI Agent runs, and what should happen if the user asks for a human.
| Field | Description |
|---|---|
| AI Agent | Which AI Agent handles this conversation. Set up agents in the AI Agents section. |
| Agent Routing | What happens when the user asks to speak to a human: route to the default BU, route to a specific BU, or jump to a Route inside this flow. |
| Business Unit | Shown when Agent Routing is set to a specific BU. |
| Route | Shown when Agent Routing is set to a flow Route — pick which Route to jump to. |
| Routing to Agent Message | Optional message sent just before the hand-off to a human. |
| AI Initial Greeting | Optional. Sent to the user the very first time they reach this block. If they re-enter the block later it is not re-sent. Leave empty if the messages before this block already serve as a greeting. |
- See AI Agents for how to build an agent, and AI Knowledge Base for the content it draws from.
Routing to a Human Agent
The Route to Agent node hands the conversation off to a human. It is a terminal node — it ends the automated part of the conversation and cannot have any outgoing connections. Three routing modes determine which agent receives the chat.
Add a Route to Agent
Add a hand-off point that transfers the conversation to a human agent.
Steps:
- Click the Route to Agent button (chat-bubbles icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to choose a routing mode and configure it.
Default Routing
The simplest option: the chat is offered to any available agent across all Business Units. Choose Use default routing in the edit dialog. No further configuration is needed.
Route to a Specific Business Unit
Send the chat only to agents in one Business Unit. Choose Route to a specific Business Unit, then pick the team from the Business Unit dropdown. Use this when a particular branch of your flow should always reach a specific team (e.g. "Talk to Sales" only goes to the Sales BU).
Route by Country
Route the chat based on the user's detected country. Choose Route by country, then add one or more country rules: each rule pairs a list of countries (selected as chips) with a Business Unit. If no rule matches, the chat is sent to the Fallback BU.
The country is detected from the chat platform — usually from the user's phone number country code, or from IP geolocation on web channels. Not all channels provide country information; users without a detected country always fall through to the Fallback BU.
Each country may only appear in one rule. When you add a country to a rule, it becomes unavailable in the other rules' chip pickers.
Logic Blocks
Logic Blocks run custom JavaScript inside the flow — useful for decisions, data transformation, and calls to external services. There are two API versions; pick one when you write the block.
Add a Logic Block
Run custom JavaScript to make decisions, transform data, or call external services.
Steps:
- Click the Logic Block button (code icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to open the code editor.
- Write your JavaScript and choose the API version.
- Click Save Changes.
- See the Logic Blocks guide for every function you can call and worked examples.
API Version 1.0
The original Logic Block API. Keeps existing Logic Blocks running unchanged. Choose this only when migrating or extending older flows.
API Version 2.0
The recommended version for new Logic Blocks. Cleaner async API and richer helpers. Pick 2.0 for any new code unless you have a specific reason to stay on 1.0.
Switch Nodes
A Switch sends the conversation to a named Route based on something about the user, the chat, or the time. It is a terminal node — it doesn't have outgoing connections to other messages; instead each rule names a Route to jump to.
Every Switch has a Fallback Route — the Route used when no rule matches.
Add a Switch
Branch the conversation to a named Route based on the user's country, language, the channel, or the time.
Steps:
- Click the Switch button (shuffle icon) in the toolbar.
- Click on the canvas to place the node.
- Double-click to choose what the Switch branches on, then configure the rules.
- Choose a Fallback Route for users who don't match any rule.
Switch by Country
Branch on the user's detected country. Add one rule per Route: each rule has a list of countries (selected as chips) and a Route. The country is derived from the phone number country code where available, or from IP geolocation on web channels. Users with no detected country fall through to the Fallback Route.
Switch by Language
Branch on the language the user's chat platform reports for them. Add one rule per Route, each with one or more language codes.
Switch by Channel
Branch on the chat platform the message arrived from — WhatsApp, Messenger, Web Widget, and so on. Use this to send platform-specific content (e.g. WhatsApp-only templates).
Switch by Business Hours
Branch based on the organisation's configured working hours. This mode has just two dropdowns: a Route to take when you are in hours, and a Fallback Route for when you are out of hours.
Switch by Day of Week
Branch on the current day of the week, evaluated in the organisation's timezone. Add a rule for each day or group of days you want to handle.
Switch by Date Range
Branch on the current date in the organisation's timezone. Each rule is a date range (both end dates are included) and a Route. Rules are checked top-to-bottom, so drag them to reorder if ranges overlap — first match wins.
Switch by Time of Day
Branch on the current time in the organisation's timezone. Each rule is a start time, an end time, and a Route. Use 24-hour HH:MM. A start time later than the end time means the range crosses midnight — for example, 22:00–06:00 covers overnight. Rules are checked top-to-bottom; drag to reorder.
Composing Text Messages
The Text Message edit dialog has two extra features you'll use most often: the AI Writing Assistant, and the per-platform length warnings.
Use the AI Writing Assistant
Generate or refine message wording with an AI prompt, then drop it straight into the message.
Steps:
- Open a Text Message for editing.
- Click the AI Writing Assistant button next to the Message Text field.
- Describe what you want, or ask the assistant to rephrase or shorten what you already have.
- Apply the result — the Message Text field updates and length warnings refresh automatically.
Platform Length Warnings
As you type into a Message Text field or a Button label field, the editor compares the length against the limits of every supported chat platform. If you exceed one, a warning appears below the field listing the platforms that would reject the message.
| Platform | Message limit | Button label limit |
|---|---|---|
| 4096 | 20 | |
| Web Widget | 4096 | 20 |
| Facebook Messenger | 2000 | 20 |
| 1000 | 20 | |
| Telegram | 4096 | 64 |
| LINE | 5000 | 20 |
| Viber | 7000 | 25 |
Testing a Flow
You can try your flow end-to-end without publishing it to a chatbot, using a temporary embedded web-chat session.
Test in Web Chat
Open a web-chat session that runs your in-progress flow.
Steps:
- Click the Test Flow button (flask icon) in the toolbar.
- A web-chat window opens beside the Flow Editor.
- Chat as if you were a user. The conversation follows your current draft — including any unsaved changes.
- When you're done, close the test window. The session is torn down automatically.
Saving, Exporting, and Copying
The Save button in the toolbar is a split button: click the main part to save, or click the small dropdown arrow next to it for export and copy options.
Save the Flow
Commit your changes.
Steps:
- Click the Save button (save icon) in the toolbar.
- If the flow is currently running on one or more chatbots, you'll be asked what to do with the active conversations.
| Option | What it does |
|---|---|
| Close all active agent chats | Ends every in-progress agent chat that uses this flow. Use when your changes affect agent-side behaviour and you don't want existing chats finishing on an old version. |
| Reset users to the beginning of the flow | Sends every active user back to the Start Message on their next reply. Use when you've materially changed the flow structure. |
Export as JSON
Download the current flow as a JSON file for backup or to import elsewhere.
Steps:
- Click the dropdown arrow next to the Save button.
- Choose Export as JSON. The file downloads immediately.
Make a Copy
Duplicate the current flow under a new name without leaving the editor.
Steps:
- Click the dropdown arrow next to the Save button.
- Choose Make a copy….
- Enter a new, unique name and confirm. The copy is created on the server; open it from All Flows when you're ready to edit it.
Flow Settings
Two toolbar buttons configure flow-wide behaviour: Default Messages (the system messages your chatbot uses in standard situations) and Global Settings (the flow's name and high-level behaviour).
Edit Default Messages
Customise the default system messages used throughout the flow.
Steps:
- Click the Default Messages button (wrench icon) in the toolbar.
- Edit each message in the dialog.
- Click Save Changes.
| Field | Description |
|---|---|
| Agent Busy | Sent when every eligible agent is busy. |
| Routing to agent | Sent when the chat is being transferred to a human agent. |
| Flow Confusion | Sent when the flow can't make sense of the user's reply. A good place to suggest a keyword that takes them to the main menu. |
| Chat closed with Agent | Sent when an agent closes the chat. |
| Agent is busy after a transfer | Sent when one agent tries to transfer the chat to another agent who is busy or offline. |
| Out of Hours message | Sent outside the organisation's configured working hours when no agents are available. |
| Invalid Action | Sent when the user clicks an old chatbot button while already in conversation with a human agent. |
Edit Global Settings
Change the flow's name and high-level behaviour.
Steps:
- Click the Global Settings button (cog icon) in the toolbar.
- Adjust the fields below.
- Click Save Changes.
| Field | Description |
|---|---|
| Flow Name | The name shown in All Flows and on the Flow Editor window's title bar. Must be unique within your organisation. |
| This flow only talks to agents | Turn on for flows used purely for agent-initiated outbound chats with no chatbot automation. |
| Only run this flow once | Turn on to stop the flow restarting after it ends. Useful for one-shot onboarding or campaign flows. |
| On Flow Confusion | What happens when the user's reply isn't understood: send the default Flow Confusion message, route to a human agent, or jump to a named Route. |
| Routes to | Shown when On Flow Confusion is set to "Direct the flow to a specific route" — the Route name to jump to. |
| Send Routing to agent message | Turn off if you'd rather hand off silently. |
| Send Chat closed with Agent message | Turn off for flows where agents reach out proactively and a "chat closed" notice would feel odd. |
- The simpler the flow, the more these defaults matter — they're what the user sees when the flow's main script doesn't have an answer.