Flow editor

Build a workflow on the canvas: a Start node, then cards of steps joined by lines. Each step does one job, and values carry answers and API data from one step to the next.

Where the builder is

Open a workflow from Brand → (your brand) → Workflows and you land on its Editor view. The builder kept the web address it always had, so existing bookmarks and deep links still work — only the list you used to reach it from has moved. The back arrow at the top left returns you to that brand's Workflows page. The permission is Workflows.

The top bar holds everything about the workflow itself:

  • The name — click it to rename the workflow. The brand it belongs to is shown next to it.
  • Editor and Runs — the two views. Runs shows every run with its steps, the values it collected and the branch it took, plus the starts that were held back (see Runs). There is no Settings view any more.
  • Edit with AI — asks the Copilot to change this workflow (see below). Shown to team members with the Copilot permission; it is filled in while the canvas has no steps yet and outlined once it has, and on a narrow screen only its sparkle icon is left.
  • ⋯ — Rename, Duplicate and Delete.
  • Publish and Save, at the top right.

What starts the workflow is set on the canvas itself, on the Start node.

Changing a workflow with AI

Edit with AI opens the Copilot with "Change the workflow open in the editor so that:" already typed in. Finish the sentence and send it. The Copilot sees the canvas as it is on your screen, unsaved changes included, and checks its change with the same rules as Save.

Apply to canvas

When the check passes, an Apply to canvas button appears under it. It puts the change — steps, trigger and name — on the canvas. Nothing is saved yet.

Undo, if you don't like it

The notice "Applied the Copilot's change — not saved yet" offers Undo, which puts the canvas, the trigger and the name back as they were.

Save

Press Save to keep the change. The Copilot never saves the open workflow itself: the change is stored only when you press Save, also on a published workflow.

The Apply to canvas button only appears while the workflow is open in the editor. More on building and changing workflows with AI: Workflow ideas and recipes.

How a workflow is built

A workflow reads from left to right. The Start node says what starts it, and a line leads from it into the first card. A card holds steps that run one after another, top to bottom. It can end with one step that decides where the visitor goes next — a button tapped, a branch matched, an API call that worked or failed. From each of those exits a line leads to the next card.

The Start node

The Starts when node sits to the left of the first card and shows the workflow's trigger:

  • the trigger's name and one sentence saying when it starts the workflow (for User says, also the description the AI matches the visitor's message against)
  • Starts with — the values the trigger brings along, such as the details the AI picks out of the visitor's message
  • Only if — the trigger's filter, written as a sentence
  • Frequency and Priority — when two workflows of the brand match at the same moment, only the one with the higher priority runs; with equal numbers, the older workflow wins
  • where it starts by itself (website chat, Facebook and Instagram, email, phone calls), and where a step in this workflow keeps it off
  • Stays quiet when… — the situations in which the trigger happens but the workflow holds back, for example while a colleague is in the conversation
  • the other ways it can be started: by your team from the inbox, by another workflow, by a Home button or conversation starter in your chat widget, or from your website by link, SDK or an Engagement banner or chat message
  • Not published — shown instead of that last line while the workflow is unpublished: nothing starts it then, neither its trigger nor any of the other ways

Click the node to open the trigger panel at the side. There you choose the trigger and set its filter, frequency and priority. Every trigger and its options are explained in What starts a workflow.

The Start node, its line and the first card cannot be deleted.

Cards and steps

Each step on a card is one row: its icon, its name and one line saying what it was set to do. A red line says what is still missing — for example Not set up yet — write the message. A warning icon at the end of the row means the step keeps the workflow off some channels; hover over it to see which. Click a row to open the step's panel at the side. What you change in a panel goes onto the canvas at once; press Save to store it.

The ⋮ menu of a step has Edit, Move up, Move down and Delete. The step that ends a card has only Edit and Delete.

Add a step opens the step picker. Search it, or pick from its two groups:

  • Steps — run one after another — as many as you like on one card
  • Ends the card — the last step, one per card — grayed out once the card already ends with one

The step that ends a card sits under Ends with, and its exits are listed below it, one row each:

  • Buttons — one row per button
  • Conditions — If, then each Else if, and Otherwise
  • Call an API — Worked and Failed

The circle on the right edge of an exit row is where the line to the next card leaves from. A + means nothing is connected yet: click it to add a new card there. An arrow means a line already leaves that exit. Lines are never drawn or moved by hand: every line appears when you add a card with a +, and goes away only together with that card. The Add a button and Add a branch rows add another exit to a Buttons or Conditions step.

The other steps that end a card have no exits. A card without exits reads The workflow ends here — or, after Start a workflow, Continues in «…» with the other workflow's name.

A card has only one way in. Only one line can arrive at a card, so two branches cannot merge back into a shared card. To use the same steps from several places, build them as a separate workflow and end each branch with Start a workflow.

Deleting

Deleting a card, the step that ends a card, a button or a branch always takes everything after it, so no card is ever left behind with nothing leading into it:

  • Deleting a card (the trash icon at the top right of the card, shown when you hover over it) deletes every card after it too.
  • Deleting the step that ends a card deletes every card after its exits.
  • Removing a button or a branch on the card (⋮ → Remove) deletes every card after that exit.

Whenever other cards would go too, a confirmation tells you how many. An empty card with nothing after it goes at once. In a step's panel you can only remove a button or branch that no card follows yet; for the others the trash icon is disabled and points you to the card. A line cannot be removed on its own — delete the card it leads to instead. The Backspace key deletes nothing on the canvas.

What Save refuses

Two warning strips on a card tell you it cannot be saved yet:

  • Nothing leads into this card — a card with no incoming line would run on every run, for every visitor. Delete it and add it again with the + of the exit it belongs to.
  • Add at least one step — a card without steps.

Save also refuses a workflow where a value name is badly formed, is one of the visitor's own details, or is used by two steps (see Values below), and one where a Call an API step reads more than 20 values from its reply.

It also refuses a drawing the workflow could never run: a line leading back into the first card, a card with two lines leading into it, or a group of cards that lead into each other with nothing from the start leading to them. The editor never draws these itself; the message names the card to delete and add again.

In a workflow that is switched on, Save also refuses a Call an API step without an address: "Fill in the address of every Call an API step before saving — a switched-on workflow cannot have a Call an API step without an address." Publish refuses the same step with "Fill in the address of every Call an API step before switching this workflow on." A switched-off workflow saves with the address empty, so a half-finished call can wait there until your system is ready.

An older workflow that still has a card nothing leads into cannot be saved as it is: delete that card and add it again from its exit first. A red "Not set up yet" line, on the other hand, does not stop a save — with one exception: a Call an API step whose row reads Not set up yet — enter the address. stops Publish, and stops Save once the workflow is switched on.

The steps

Steps that run one after another

These run top to bottom within a card. A card can hold as many as you like.

Write a message

Sends a text to the visitor, with values filled in — as typed, or in the AI's own words.

Ask a question

Asks something, waits for the visitor's answer and can save it under a name.

Collect data

Asks for an email address or one other detail in a small form.

Start a form

Opens one of your forms in the chat, optionally with some fields already filled in.

Request agent

Hands the conversation to your team, with an optional internal note for the colleague.

Show expected reply time

Tells the visitor how soon your team usually replies.

Steps that end a card

A card can end with one of these. Buttons, Conditions and Call an API have exits that lead on to the next cards; the others end the workflow there.

Buttons

Shows buttons and waits for a tap. Each button has its own exit and leads to its own card.

Conditions

Checks facts about the visitor and the workflow's values, then takes the first branch that matches.

Call an API

Gets data from your own system and goes on through Worked or Failed.

Send to VEX AI

Lets the brand's Vex AI agent answer the visitor, following your instruction.

Start a workflow

Hands the conversation to another published workflow of the same brand.

Open link

Opens a page for the visitor straight away.

Stop — don't reply

End the workflow without replying at all. Your team sees a private note in the inbox; the visitor gets nothing. Built for sales pitches, spam and off-limits topics.

Values

Every run of a workflow keeps a set of named values: what the visitor answered, what the trigger brought along, what an API replied. A later step puts a value into its text by its name in double braces, for example {{ order_id }}.

Saving an answer under a name

Ask a question, Collect data (with Something else) and Buttons have a field called Save the answer as. For Buttons, the value is the label of the button the visitor tapped. Call an API names each value it reads from the reply in its own list. Leave the name empty when no later step needs the answer.

A name:

  • uses only English letters, digits and underscore — order_id, not order id or rendelés
  • is at most 64 characters long
  • is unique in the workflow — two steps cannot save under the same name
  • is not one of the visitor's own details (email, name, country and the others listed below) and does not start with custom_
  • is case-sensitive: Order_ID and order_id are two different names

Once the name is usable, the finished {{ name }} appears under the field with a copy button.

Which values a step can use

Every step that can use values shows a Values you can use here card in its panel, each value with a copy button. The list follows the lines you drew, so it holds exactly what the visitor can have by the time they reach that step:

  • The trigger's values — for example the details the AI picks out of the visitor's message on a User says trigger, or the rating and the comment on Rating given. With a Custom event trigger, everything your website sends with the event arrives too, under its own name.
  • Answers saved by the steps above it — in the same card and in every card on the path that leads to it. An answer saved on another branch is never offered, because the visitor cannot have been there.
  • Values from Call an API — only in the cards after its Worked exit. They are not offered after Failed.
  • Facts about the visitor, under About the visitor: name, email, phone, external_id, visitor_id, plan, value, country, city, continent, last_url, session_count, first_seen, last_seen, device_type, browser, os, fb_id, insta_id, and custom_… for each custom attribute your website sends.
Only external_id is verified. It is the signed user ID your website sends when it identifies the visitor. Every other visitor fact — email, name, custom attributes — comes from the visitor's browser: fine for personalizing and targeting, but not proof of who someone is.

Where values are filled in

StepWhere a value can go
Write a messageThe message
Request agentMessage to the visitor and Note for the colleague
Open linkThe address — each value is encoded, so it stays one value and cannot change the rest of the address
Start a formThe text fields under Fill in from this workflow
Call an APIThe address, the headers and the body
Send to VEX AIMentioned in the instruction — the AI receives the value as data next to the instruction, never as part of it

Values cannot be inserted into the question of Ask a question or Collect data, or into Buttons (neither the labels nor the Facebook and Instagram text). A {{ … }} typed there reaches the visitor exactly as you typed it, braces and all.

When a value is missing, it prints nothing. Add a fallback after a vertical bar and that text is printed instead: Hi {{ name | there }} becomes "Hi there" when the name is unknown. Every value is cut off at 1,000 characters.

A value lives for one run. A workflow started later in the same conversation starts without the earlier run's values — except one started by Start a workflow, which receives a copy of every value collected so far.

Step by step

Steps that run one after another

Write a message

The Write a message step is your basic communication tool. It sends text content to the visitor at specific points in your conversation flow, and the workflow goes straight on to the next step.

Common scenarios:

  • Welcome messages when workflows start
  • Instructions before data collection
  • Confirmation messages after actions complete
  • Help text and guidance throughout the process

Configuration options:

  • Message — the text the visitor gets. Values can go into it, for example Your order {{ order_id }} has shipped. (see Values above)
  • Let the AI say it — the AI restates your text for this visitor (see below)

Let the AI say it. With this switch on, the AI says your message in the visitor's language, fitted to the conversation: same meaning, nothing added. Values are filled in before the AI sees the text, and numbers, links and e-mail addresses in it are kept — also the ones a value brought in. The visitor sees the typing dots while it is written. With the switch off, the text goes out exactly as you typed it. Use it where a fixed line would sound canned inside an AI conversation, or when your visitors write in several languages. The labels of a following Buttons step are not rewritten, because a button's label is also the condition that picks its branch.

Your text is sent exactly as typed instead when:

  • the visitor has not written anything yet (for example, a workflow that starts when the chat opens)
  • the brand has no Vex agent, or your plan does not include the AI chatbot
  • the visitor has reached their daily AI answer limit, or the AI is paused for them
  • your organization has no free AI answers and no credits left
  • the AI call fails, or its version would drop a number, link or e-mail address from your text
Each AI-said message is a small AI call. It uses credits like an AI answer and counts as one answer toward the visitor's daily limit (Brand → Brand settings → Usage limits). On a phone call there is no extra call: the voice AI says the text in its own words, in the caller's language — write the steps you leave switched off in your voice agent's language, since those are read out word for word. On email and Facebook / Instagram the result is sent as plain text.
Pro tip: Use clear, concise language in your messages. Consider your audience and keep instructions simple and actionable.

Collect data

Shows the visitor a small form with one field and waits until they send it.

What to collect:

Asks for the visitor's own email address. It is saved on the visitor, later steps can use it as {{ email }}, and the chat shows "You have updated your email to …". Because the address is then known, the "leave your email" box that appears when nobody on your team is online does not ask for it again.

When you already have the visitor's address, the website chat shows it filled in: the visitor confirms it with one tap or corrects it. An address confirmed unchanged is not saved again and adds no line to the chat. On Facebook and Instagram a known address is used without asking. In email conversations this is the only kind that works: the address is taken from the sender.

How the answer is kept:

  • With Something else, give the answer a name in Save the answer as so later steps can use it (see Values above). In the chat the answer appears as the visitor's own message.
  • The answer is kept for this run of the workflow only. It is not saved on the visitor's profile.
  • The visitor's own email address needs no name: it is saved on the visitor.
Own address or another one? Ask yourself whether the address is the one you would reply to. If it is — for example the email a customer ordered with, which is almost always their own — use The visitor's own email address: the visitor confirms it once and is not asked again when nobody is online. Use Something else → Email address only for an address that belongs to someone or something else.
What to collect
select required
The visitor's own email address or Something else (an order number, another email address, …)
Question
string required
The question shown to the visitor. Values cannot be inserted here.
Answer type
select
For Something else: Text, Number or Choice from a list
Save the answer as
string
For Something else: the name later steps use to read the answer

Ask a question

Enable natural, free-form conversations by asking open-ended questions that visitors can answer in their own words. Unlike structured data collection, this step allows for organic dialogue and qualitative feedback.

Perfect for:

  • Gathering detailed feedback and reviews
  • Conducting open-ended surveys and research
  • Allowing users to express complex needs or issues
  • Building rapport through conversational interactions
  • Collecting qualitative data for analysis

Key features:

  • Custom question prompts that appear in the chat
  • Natural language responses from visitors
  • Flexible conversation flow without predefined options
  • The answer saved under a name of your choice, for the later steps of the workflow
  • Seamless integration with subsequent workflow actions

How it works:

  1. Write your question in the step's panel
  2. The question appears in the chat conversation
  3. Whatever the visitor writes next is the answer
  4. The answer is saved under the name you gave in Save the answer as
  5. The workflow goes on with the next step
Question
string required
The question shown to the visitor in the chat. Values cannot be inserted here.
Save the answer as
string
The name later steps use to read the answer, for example {{ order_id }}. Leave it empty if no later step needs it.
Best Practice: Use Ask a question when you want genuine, unscripted responses from users. Perfect for understanding customer sentiment, gathering detailed feedback, or exploring complex topics that don't fit predefined choices.
Using the answer: Once the answer has a name, later steps can put it into a message, a note for the colleague, a link or an API call, and a Conditions step can branch on it.

Start a form

Launch comprehensive forms within your workflows to collect structured information from users. Forms provide a more sophisticated data collection experience compared to simple text inputs.

When to use Start a form:

  • Multi-step data collection processes
  • Complex surveys requiring validation
  • Lead generation with multiple fields
  • Customer onboarding and registration flows
  • Feedback collection with conditional questions

Key features:

  • Full form builder with drag-and-drop field creation
  • Multiple input types (text, email, phone, dropdown, checkboxes, etc.)
  • Conditional logic to show/hide fields based on responses
  • Built-in validation and error handling
  • Custom styling and branding options
  • Progress indicators for multi-step forms
  • Data storage and CRM integration

How it works:

  1. Pick a form from the list — the forms are grouped under the name of the board they belong to
  2. The form launches seamlessly within the chat interface
  3. Users complete the form with guided validation
  4. Form responses are automatically stored and can trigger subsequent workflow actions
  5. Conversation continues after form completion

Fill in from this workflow. Once you pick a form, its text questions are listed in the panel. Type a value into any of them — for example {{ order_id }} — and the form opens with that text already filled in. The visitor can still change it. Leave a question empty to ask it as usual. Only text fields can be filled in this way, and picking another form clears them. If the chosen form is deleted, the step is skipped until you choose another one.

Where forms come from: intake forms are built on the board they feed, at Tickets → (board) → Forms, and the picker here lists the forms of every board you can see. There is no separate organization-wide Forms page any more. See the Forms documentation for building one.
A form step blocks three channels. A workflow containing one cannot run on Facebook, on Instagram or on a phone call, because none of them can display a form. The Channels column on the brand's Workflows list shows this as grayed-out icons.
Best Practice: Use Start a form for complex data collection scenarios where you need validation, conditional logic, or multiple related fields. For simple single-field collection, consider using the Collect data step instead.

Request agent

Ensure your automation has a safety net by providing seamless transfer to human agents when needed.

When to use agent transfer:

  • Complex technical issues requiring human expertise
  • Emotional situations needing empathy and personal touch
  • High-value customer interactions
  • Fallback when automation cannot resolve queries

Transfer process:

  • The visitor gets your message — or, if you left it empty, a default one in their own language
  • The conversation waits in the inbox for a colleague to take it
  • When nobody is online, the visitor also gets your offline notice and, if you have no email for them yet, a field to leave one
  • If a colleague is already in the conversation, nothing is sent
  • The workflow goes on straight away; it does not wait for the colleague

Configuration options:

  • Message to the visitor (optional): the line the visitor gets before the handover. Leave it empty to send the default message. Values can go into it.
  • Note for the colleague (optional): only your team sees it. It is added to the conversation as an internal note just before the handover, so the colleague reads it first. Values can go into it — for example Order number given by the visitor: {{ order_id }}. Up to 2,000 characters.
Best Practice: Use the message to set expectations before the handoff, and the note to hand your colleague what the workflow already found out. To follow up when nobody answers, use a workflow that starts on Nobody picked up.

Show expected reply time

Set clear expectations by showing visitors how long they can expect to wait for a response. This node helps manage visitor expectations during peak times or when agents are busy.

When to use Reply Time nodes:

  • During business hours when agents are available
  • Before complex tasks that require agent review
  • When transitioning from automated responses to human support
  • To manage expectations during high-volume periods

Where the time comes from:

  • The node posts a line such as "We usually reply 🕘 in a few minutes", in the visitor's own language
  • The time is the Reply Time you picked in your chat widget's Messages tab — a fixed choice, from "a few minutes" to "a few days"
  • It uses the setting of the widget the conversation came in on
  • It is not calculated from which agents are online, and the node itself has no settings
Best Practice: Use Reply Time nodes before Request Agent actions to set proper expectations. This reduces visitor frustration and improves satisfaction with your support process.

Steps that end a card

Buttons

Buttons create decision points in your conversation. The step shows buttons under the last message and waits until the visitor taps one. Each button has its own exit on the card and leads to its own card.

Perfect for:

  • Product or service selection
  • Yes/no confirmation dialogs
  • Multi-option surveys and polls
  • Navigation menus and help options

What you set:

  • Buttons — up to 10, one label each. Add them in the panel's list or with Add a button on the card.
  • Text above the buttons on Facebook and Instagram (optional) — on the website the buttons sit under the previous message, but Facebook and Instagram need a text of their own. Left empty, they get "Please choose an option:".
  • Save the answer as — stores the label of the tapped button, so later steps can use it.

Ask the question the buttons answer in a Write a message step above this one. If the visitor types instead of tapping, the buttons disappear and the message goes to the AI or your team; the workflow does not go on.

Step 1: Write the button labels

Enter clear, descriptive text for each button

Step 2: Add the next card for each button

Click the + at the right end of a button's row to add a card there

Step 3: Handle User Selection

The workflow automatically routes based on the button the visitor taps

Step 4: Continue Conversation

Each path can have its own sequence of steps

A button that a card follows cannot be removed in the panel. Remove it on the card (⋮ → Remove); the cards after it are deleted with it.

Conditions

Conditions add intelligence to your workflows by evaluating visitor data and the workflow's own values and making decisions automatically.

The step checks its branches from top to bottom and takes the first one that matches: If, then each Else if. If none matches, it takes Otherwise. Every branch and Otherwise has its own exit; leave Otherwise unconnected to end the workflow there. Add branches with Add a branch on the card or in the panel, and combine several rules within one branch with AND / OR.

What you can check:

Online status — Online or Offline. Useful for routing to your team only while it is online.

How rules are compared:

  • A missing value never matches — not even a Does not equal or Does not contain rule. Only Is not set is true for it.
  • Text and date facts also offer Is set and Is not set, to branch on whether a value exists at all.
  • Email, name and custom attributes come from the visitor's browser: fine for targeting, not proof of identity. Only the external ID is verified.

Call an API

Calls your own system — an order lookup, a CRM, a booking tool — and uses its reply in the rest of the workflow. It ends its card and goes on through one of two exits: Worked or Failed. The step itself shows nothing of the reply to the visitor: a later step has to put a value into a message.

Request

  • Method — GET, POST, PUT, PATCH or DELETE.
  • Address — must start with https://; a call over plain http is refused. Values can go into it, for example https://api.example.com/orders/{{ order_id }}, and each one is encoded automatically.
  • Yaplet signature — recommended when you call your own system. Switch it on and type a shared secret that your server also keeps. Every call then sends a Signature header with the SHA-256 hash of that secret — the same way API tools and product API sources sign their calls — so one check on your server covers all of them: hash your own copy and compare. The secret is kept like a password (see below): stored on our servers, sent only to this address, shown as saved •••• after you save. While it is on, a header you typed yourself called Signature is left out.
  • Headers — add any header. For anything secret, such as an API key or a token, switch on Password. A password is stored on our servers, not in the workflow. After you save, the header shows saved •••• with a Replace button, and the password is never shown again. It is only ever sent to the web address it was entered for: if you change the address to another host, the stored password is cleared and you type it again. A password header with nothing saved is not sent at all.
  • Body (not for GET), under What to send — No body, Fields (sent as JSON), or Write the JSON myself. Values can go into fields and into your JSON; they are escaped for you. Content-Type: application/json is added automatically unless you set your own.

Values to read from the reply

For each value you want, write Where in the reply it is, the name to Save as, and its Type:

  • Where in the reply: a dot goes one level deeper and [0] is the first item of a list — for example order.status or items[0].name. Spelling and capitals must match. Show an example in the panel walks through one.
  • Type: Text, Number (lets Conditions compare greater / less than), Yes / no, or Date. Pick Text if unsure.
  • Optional: tick it for a value your system only sends sometimes, such as a flag that says a person should take over. When the reply leaves it out, the value stays empty (a Conditions rule sees it as Is not set) and the step still takes Worked.
  • At most 20 values per step.

The reply is read as JSON only when your system sends it with Content-Type: application/json.

When it takes Failed

  • the reply has an error status
  • no reply arrives within the time limit, or the connection fails
  • the address is refused — not https, or pointing at a private or internal network
  • the reply is larger than 5 MB
  • one of the values you listed is missing from the reply, is null, or does not fit its type — so a reply that lacks a single value takes Failed even though your system answered (a value ticked Optional is the exception, see above)

Time limit and retries

  • Wait at most (seconds): 1 to 30, 8 by default. On a phone call the step never waits longer than 4 seconds.
  • A GET is tried once more, and only after a timeout, a network error or a 5xx status. POST, PUT, PATCH and DELETE are never repeated. On a phone call nothing is repeated.

When Failed leads nowhere

Add a card on Failed (its +) to handle it your own way. Left unconnected, the visitor gets "We encountered an issue processing your request. An agent will assist you shortly." in their own language, and the conversation is handed to your team. On a phone call the caller hears "Sorry, I couldn't complete that request right now." instead. Failed calls of the last 24 hours are counted on the workflow in the brand's Workflows list and on its Runs view.

Test

The Test button calls the address right now, with a sample visitor (so {{ email }} and the other visitor facts get sample values) and with sample values you type for the workflow's own values. It shows whether the call worked, the status, how long it took, which attempt it was, the reply, and how each value resolved; each value in the list is also marked with what the test found. A password you typed but have not saved yet is used for that one test and not stored. You can run 10 tests a minute per organization.

Test sends a real request. A POST, PUT, PATCH or DELETE test changes things in your system exactly like a real run — test against a test record.
Nothing asks for confirmation before a call that changes something. The step runs the moment the visitor reaches it — also in a workflow the AI started by itself from a User says trigger. If the call cancels an order, changes an address or books something, put a Buttons step before it that asks the visitor to confirm. And let your own system decide whether this person may do it: only {{ external_id }} is verified; email, name and other details come from the visitor's browser.
Saved passwords travel with copies.Duplicate and Copy to another brand… copy the workflow's saved passwords too, within your organization.

A step without an address

A Call an API step with no address cannot run, so it keeps the workflow from being switched on. Publish, and the Active switch on the brand's Workflows list, are refused with "Fill in the address of every Call an API step before switching this workflow on." In a workflow that is already switched on, Save is refused too (see What Save refuses above). A switched-off workflow saves with the address empty.

A draft written by the AI. When an AI builds a workflow that needs a call to a system with no address yet, it leaves the address empty instead of inventing one. The row reads Not set up yet — enter the address., and the step's panel shows a note, What this call must do (written by the AI), saying what the call must send and get back — hand it to whoever builds that endpoint. Once the endpoint exists, type its address and any password into the step yourself; never paste a password into a chat with an AI. Remove deletes the note when you no longer need it; it changes nothing about the call itself.

The old step. Custom API action (old) is no longer in the step picker. Workflows that already contain it keep running exactly as before; its row reads Old step — rebuild it with Call an API. Rebuild it with Call an API: any method, a password kept on our servers instead of in the workflow, exactly the parts of the reply you want, and a Failed exit of its own.

Send to VEX AI

Step out of the script for one turn and let the brand's Vex AI agent answer in its own words.

What it brings:

  • Natural language understanding, so the visitor can phrase things however they like
  • An answer drawn from everything the brand knows — knowledge bases, documentation, files, website pages and Q&A
  • A reply written in the visitor's own language
  • A way to cover the questions a scripted branch could never anticipate

Setup process:

  1. Write the Instruction for the AI — a question, an instruction or any complete sentence the AI should act on
  2. If the answer should use values, mention them by name, for example {{ order_id }}. The AI receives them as data next to your instruction, never as part of it — so nothing a visitor typed can give the AI orders
  3. That is the whole configuration. The step ends its card and has no exits: after the AI's answer, the workflow ends

How that turn behaves in the chat widget and on Facebook / Instagram:

  • The AI answers your instruction straight away; the reply arrives as one message, with the typing dots shown first
  • It may search the brand's knowledge, products and API tools, but on this turn it does not start any workflow and does not call or offer a human agent — so a hand-back cannot re-start its own workflow or undo a "No, thanks" the visitor just gave
  • If the search finds nothing, it says it does not have that information
  • The visitor's next message is an ordinary AI turn again
  • On the Vex reports page the turn is labeled Workflow hand-back, instead of showing your instruction as if the visitor had typed it

On a phone call the AI answers from your instruction alone, without the knowledge base. The step does not run in email conversations.

There is no chatbot picker on this step. The instruction goes to the brand that owns this workflow, and is answered by that brand's Vex agent from that brand's knowledge. Nothing needs connecting, and there is nothing to choose wrongly.
Only need one fixed sentence in the visitor's language? Use a Write a message step with Let the AI say it on instead. It restates your text and adds nothing, and it costs less than a full answer.

Start a workflow

Build complex automation by combining several workflows into modular components.

Modular design benefits:

  • One workflow reused in several places instead of rebuilt each time
  • Simplified maintenance and updates
  • Consistent behavior across multiple touchpoints
  • Easier testing and debugging of complex flows

How it works:

  1. Pick a workflow from the list, which holds only this brand's published workflows — never the one you are editing
  2. When the step is reached, this workflow ends and the other one starts at once
  3. The other workflow receives a copy of every value collected so far
  4. Nothing comes back: the other workflow's own trigger and filter are ignored, and the conversation stays with it

The card under the step reads Continues in «…» with the other workflow's name.

When it cannot start the other workflow — none is chosen, it was deleted, it is not published, or it belongs to another brand — the visitor gets the same apology as after a failed API call, your team is asked to take over, and a private line in the inbox tells your team which workflow could not start and why. The step's row on the card says so in red too. If you unpublish or delete a workflow that other workflows start, its page warns you and names them.

A nested workflow passes its channel restrictions up. If the workflow you call contains a form, the workflow calling it is also blocked from Facebook, Instagram and phone calls, even though its own steps are clean.

Share external resources and direct users to additional information or actions. The step opens the page for the visitor right away; nothing is posted in the chat. It ends its card, so the workflow ends here.

Link usage scenarios:

  • Product documentation and user guides
  • Support article references and knowledge bases
  • Download links for files and resources
  • External booking systems or appointment schedulers

Settings:

  • Address — a full web address. Values can go into it, for example https://shop.example.com/orders/{{ order_id }}; each one is encoded, so it stays one value.
  • Open in a new tab — with this off, the page replaces the one the visitor is on, so they leave it.
  • On Facebook, Instagram and email the address is sent as text. The step does not run on phone calls.

Stop — don't reply

End the workflow without sending anything to the visitor. This is the step for conversations you do not want answered at all — unsolicited sales pitches, spam, topics that are off-limits for the AI.

How it behaves:

  • Nothing goes to the visitor, on any channel
  • Your team sees a private event in the inbox — "Conversation stopped by workflow", with your optional note after it — so the silence is clearly deliberate
  • It stops this reply only. If the person writes again, the AI decides afresh (and usually stops again, cheaply)

Configuration options:

  • Note for your team — appended to the private event, e.g. why this kind of message is ignored
Want to say one thing before going quiet? Put a Write a message step above the Stop step: the visitor gets your line, then nothing more.
Stop cannot run on phone calls — a caller cannot be answered with silence — so a workflow containing it is grayed out for the phone channel. Every other channel accepts it.

Which steps block a channel

A workflow always runs in its brand's chat widget. Whether it can also run on Facebook, on Instagram, on email and on phone calls depends entirely on the steps it contains, and Yaplet works that out again every time you save.

Step usedFacebook and InstagramEmailPhone calls
Start a formBlockedBlockedBlocked
Buttons, Ask a questionFineBlockedBlocked
Send to VEX AIFineBlockedFine
Collect dataFineFine for The visitor's own email address, else blockedBlocked
Open link, Show expected reply time, Request agent, StopFineFineBlocked
Write a message, Conditions, Call an API, Start a workflowFineFineFine

The result shows up as grayed-out channel icons on the brand's Workflows list, with the reason on hover — and a workflow a channel cannot run is never offered to the AI on that channel. Build a phone workflow from messages, conditions, API calls and Send to VEX AI steps alone and it will run on a call. Call an API posts nothing by itself on any channel: the visitor sees what it fetched only when a later step puts a value into a message. On email, everything a run produces is sent as one email at the end.

Advanced Workflow Strategies

Error Handling and Fallbacks

Design robust workflows that handle edge cases gracefully:

Always plan for API failures: add a card on the Failed exit of every Call an API step and say what happened in your own words, offer another way, or hand over to your team. Left unconnected, Failed apologizes and hands the conversation to a colleague.
Validate data collection: Use conditions to check if required information was successfully gathered before proceeding.
Handle unexpected user responses: Include catch-all conditions and agent transfer options for scenarios your automation doesn't cover.

Performance Optimization

Keep your workflows efficient and user-friendly:

Minimize decision complexity: Too many conditional branches can confuse both users and workflow maintenance.
Reuse common components: Use Start a workflow for frequently repeated processes rather than rebuilding them.
Test all paths: Thoroughly test every possible conversation path to ensure smooth user experiences.

Monitoring and Analytics

Track your workflow performance on the workflow's Runs view:

  • See every run with the steps it went through, the values it collected and the branch it took
  • Find the starts that were held back, with the reason
  • Spot failed API calls and workflows that could not be started

See Runs for the details.

Getting Started with Workflows

Ready to build your first workflow? Start simple and expand gradually:

Step 1: Define Your Goal

Decide what you want your workflow to accomplish - collect leads, provide support, or guide users through a process.

Step 2: Map the Conversation Flow

Sketch out the logical steps and decision points on paper before building in the editor.

Step 3: Start with Core Steps

Begin with Write a message and Buttons steps to establish the basic conversation structure.

Step 4: Add Intelligence Gradually

Introduce Conditions, Collect data and Call an API steps as your workflow becomes more sophisticated.

Step 5: Test and Iterate

Publish the workflow, walk through each path in your chat widget, and check on the Runs view what happened in each run.

The flow editor gives you powerful tools to build personalized, intelligent conversations. Start with the basics and add more advanced steps as you get comfortable with the system. Remember - great automation is built on understanding your visitors and designing conversations that feel natural and helpful.