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.
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, notorder idorrendelé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,countryand the others listed below) and does not start withcustom_ - is case-sensitive:
Order_IDandorder_idare 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, andcustom_…for each custom attribute your website sends.
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
| Step | Where a value can go |
|---|---|
| Write a message | The message |
| Request agent | Message to the visitor and Note for the colleague |
| Open link | The address — each value is encoded, so it stays one value and cannot change the rest of the address |
| Start a form | The text fields under Fill in from this workflow |
| Call an API | The address, the headers and the body |
| Send to VEX AI | Mentioned 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
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.
Asks for any other detail. Pick the Answer type:
- Text for names, comments or open-ended answers
- Number for quantities, sizes or ratings
- Email address for an address that is not the visitor's own — for example the one an order was placed with. It is checked like an email address, but it is not saved on the visitor.
- Choice from a list — add the Choices the visitor picks from
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.
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:
- Write your question in the step's panel
- The question appears in the chat conversation
- Whatever the visitor writes next is the answer
- The answer is saved under the name you gave in Save the answer as
- The workflow goes on with the next step
{{ order_id }}. Leave it empty if no later step needs 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:
- Pick a form from the list — the forms are grouped under the name of the board they belong to
- The form launches seamlessly within the chat interface
- Users complete the form with guided validation
- Form responses are automatically stored and can trigger subsequent workflow actions
- 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.
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.
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
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
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:
Country, Email, Name, External ID, Identified, Plan, Value, Language, Current page (also with Matches pattern, where * stands for any text, and Matches regex), Device, Browser, Operating system, Last seen, First session, Sessions, Banned, and Custom attribute — type the attribute's name, then the rule.
Online status — Online or Offline. Useful for routing to your team only while it is online.
Channel — Chat (widget), Facebook / Instagram, Email or Phone.
The values this workflow has by that point: the trigger's values and what the steps before it saved on the path that leads here. Each is compared as the type it was declared with — an API's number as a number, a date as a date, a yes/no value as true or false. Answers the visitor typed or tapped are text.
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 examplehttps://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
Signatureheader 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 calledSignatureis 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/jsonis 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 exampleorder.statusoritems[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.
{{ external_id }} is verified; email, name and other details come from the visitor's browser.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:
- Write the Instruction for the AI — a question, an instruction or any complete sentence the AI should act on
- 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 - 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.
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:
- Pick a workflow from the list, which holds only this brand's published workflows — never the one you are editing
- When the step is reached, this workflow ends and the other one starts at once
- The other workflow receives a copy of every value collected so far
- 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.
Open link
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
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 used | Facebook and Instagram | Phone calls | |
|---|---|---|---|
| Start a form | Blocked | Blocked | Blocked |
| Buttons, Ask a question | Fine | Blocked | Blocked |
| Send to VEX AI | Fine | Blocked | Fine |
| Collect data | Fine | Fine for The visitor's own email address, else blocked | Blocked |
| Open link, Show expected reply time, Request agent, Stop | Fine | Fine | Blocked |
| Write a message, Conditions, Call an API, Start a workflow | Fine | Fine | Fine |
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:
Performance Optimization
Keep your workflows efficient and user-friendly:
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.