- Convo
- Logic flow
First Message
What the agent says first when the call starts.
Conversation
A step in the conversation; add a title to describe what it covers.
Extract Info
Captures information from the call and saves it to a variable you name.
End
Ends the call.
Transfer Call
Transfers the call to another number.
PBX Transfer Call
Transfers the call using your PBX (3CX, Yeastar, Webex, or generic). Configure the number, message, and transfer type.
Function
A tool the agent can use during the conversation (e.g. send email, call a webhook, or run an integration).
Multichannel
Opens an SMS channel mid-call so the caller can share sensitive information by text rather than voice.
Start
Where the flow begins.
Condition
Branches the flow based on a condition; choose If or Else.
Categorize
Routes the flow to one of several paths based on a question and possible answers (e.g. AI chooses a category).
Merge
Brings multiple branches back into a single path.
Flow
Runs another flow; you can pass variables into it.
Variable
Sets variables (name and value) for use later in the flow.
Transform
Reshapes or maps data for use in later steps.
Webhook
Calls an external URL.
Integration
Calls a connected integration (e.g. email, CRM).
Send Message
Sends a message to one or more recipients.
Call Tag
Adds tags to the call for reporting or routing later.
Multichannel
Opens an SMS channel mid-call so the caller can share sensitive information by text rather than voice.
Extract
Uses the LLM to pull typed fields out of the conversation transcript into named variables.
Edges and conditions. All nodes support an optional when field. This is a plain-language condition the agent evaluates before entering the node (e.g. “caller has confirmed their email”).
Node reference
Fields marked with* are required.Conversation flow
First Message
First Message
The opening message the agent speaks when a call begins. Every agent has exactly one First Message node.
| Field | Type | Description |
|---|---|---|
firstMessage* | string | Text spoken at the start of every call. |
Conversation
Conversation
A dialogue step where the agent follows the instructions you provide. Use the description to tell the agent what to cover, ask, or do in this part of the conversation.
| Field | Type | Description |
|---|---|---|
title | string | Short label for this step (shown in the graph). |
description | string | Instructions for what the agent should discuss or accomplish. |
when | string | Entry condition evaluated before the agent enters this node. |
Extract Info
Extract Info
Asks the caller for a specific piece of information and stores the answer in a named variable. The variable is set once per call; if it already has a value, the node will not overwrite it even if the agent revisits it.
| Field | Type | Description | |
|---|---|---|---|
variable* | string | Name of the variable to store the captured value in. | |
type | string | number | boolean | No | Data type of the expected value. Default: string. |
title | string | Short label for this step. | |
description | string | Instructions for what to ask and how to capture it. | |
when | string | Entry condition. |
Transfer Call
Transfer Call
Transfers the live call to a phone number or another Vatel agent. Configure the transfer type to control how the handoff is handled at the SIP/telephony layer.
Transfer types:
| Field | Type | Description | |
|---|---|---|---|
number | string | Single destination number. | |
numbers | {label, number}[] | Multiple transfer destinations with labels (agent chooses based on context). | |
transferType | bridge | conference | refer | agent_handoff | No | How the transfer is executed. Default: bridge. |
agentId | string | Target Vatel agent ID. Required when transferType is agent_handoff. | |
pbx | 3cx | yeastar | webex | generic | No | PBX system to route through. |
message | string | Message spoken before the transfer begins. | |
handoffMessageType | message | prompt | No | message plays the literal text; prompt lets the agent generate a closing line. Default: message. |
when | string | Entry condition. |
- bridge - Your platform stays in the media path and bridges the two call legs together for the full duration.
- conference - Caller and destination are joined into a conference room; additional participants can be added.
- refer - Issues a SIP REFER so the caller’s endpoint dials the destination directly; your platform exits the call.
- agent_handoff - Hands the call off to another Vatel agent identified by
agentId.
End
End
Ends the call with an optional closing message.
| Field | Type | Description | |
|---|---|---|---|
message | string | Message spoken before the call ends. | |
handoffMessageType | message | prompt | No | message plays the literal text; prompt lets the agent generate the closing line. Default: message. |
when | string | Entry condition. |
Logic flow
Start
Start
The entry point of every logic flow. Every flow has exactly one Start node and no configuration fields; connect it to the first node you want to run.
Condition
Condition
Evaluates a comparison between two values and branches into an if path (true) or an else path (false).
Operators:
| Field | Type | Description |
|---|---|---|
left* | InputVariable | Left operand of the comparison. |
right* | InputVariable | Right operand of the comparison. |
operator* | enum | Comparison operator (see below). |
title | string | Label shown on the node in the graph. |
description | string | Notes on what this condition checks. |
when | string | Entry condition. |
eq, ne, gt, lt, gte, lte, is_after, is_before, contains, starts_with, ends_with, is_empty, is_not_empty, is_null, is_not_nullThe node produces two outgoing edges: if (condition is true) and else (condition is false).Categorize
Categorize
Uses the LLM to classify a value into one of the categories you define, then routes the flow to the matching branch.
Each category in
| Field | Type | Description |
|---|---|---|
question* | string | The question or instruction given to the model for classification. |
values* | {value, description}[] | The possible categories. Each entry needs a value (the label) and a description (what it means). |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
values produces its own outgoing edge from the node.Merge
Merge
Joins multiple incoming branches back into a single path. No configuration fields. Connect the outputs of Condition or Categorize branches into a Merge node to continue with shared logic.
Flow
Flow
Executes another logic flow and passes variables into it. Use this to keep flows modular and reuse logic across multiple agents or flows.
| Field | Type | Description |
|---|---|---|
flowId | string | ID of the logic flow to run. |
variables* | InputVariable[] | Variables to pass into the sub-flow. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Variable
Variable
Sets one or more named variables with literal values. Variables set here are available everywhere in the current call, in both logic flows and the conversation flow.
| Field | Type | Description |
|---|---|---|
declarations* | {key, value}[] | List of variable names and their values to set. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Transform
Transform
Maps input data into a new JSON structure. Use this to reshape a webhook or integration response before passing it to the next node.
| Field | Type | Description |
|---|---|---|
output* | object | JSON object defining the output structure. Values can reference variables. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Extract
Extract
Uses the LLM to pull one or more typed fields out of the conversation transcript into named variables. Unlike Extract Info (which asks the caller a direct question), this node reads what has already been said.
| Field | Type | Description |
|---|---|---|
variables* | InputVariable[] | Variables to extract. The description field on each variable tells the model what to look for; the name field is the variable name the value is stored in. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Webhook
Webhook
Makes an HTTP request to an external URL. Can run synchronously (flow waits for response) or asynchronously (agent keeps talking while the request runs in the background).
| Field | Type | Description |
|---|---|---|
url* | string | Target endpoint URL. Supports path variables (e.g. /users/{id}). |
method* | string | HTTP method: GET, POST, PUT, DELETE, PATCH. |
headers* | InputVariable[] | Request headers. |
queryParams* | InputVariable[] | URL query parameters. |
pathVariables* | InputVariable[] | Values for path variable placeholders in the URL. |
body* | InputVariable | Request body. |
async | boolean | If true, the agent continues speaking while the request runs. Default: false. |
asyncMessage | string | Message spoken while waiting. Only used when async is true. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Integration
Integration
Invokes an operation from a connected integration (HubSpot, Stripe, Resend, etc.). Integrations are configured at the organization level under Settings → Integrations.
| Field | Type | Description |
|---|---|---|
integrationName* | string | Name of the connected integration to call. |
operationName* | string | The specific operation within that integration. |
variables* | {name, variable}[] | Input parameters for the operation. Each entry maps a parameter name to an InputVariable. |
async | boolean | If true, the agent continues while the integration runs in the background. Default: false. |
asyncMessage | string | Message spoken while waiting. Only used when async is true. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Send Message
Send Message
Sends an SMS to one or more recipients.
| Field | Type | Description |
|---|---|---|
recipients* | InputVariable[] | Phone numbers to send the message to. |
body* | InputVariable | Message content. |
phoneNumberId | string | ID of the Vatel phone number to send from. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Mailer Message
Mailer Message
Sends an email via your connected MailerSend integration.
| Field | Type | Description |
|---|---|---|
sender* | string | Sender email address (must be a verified domain in MailerSend). |
recipients* | InputVariable[] | Recipient email addresses. |
subject* | InputVariable | Email subject line. |
body* | InputVariable | Email body content. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Clerk Message
Clerk Message
Sends a message via your connected Clerk.chat integration.
| Field | Type | Description |
|---|---|---|
sender* | string | Sender identifier configured in your Clerk.chat account. |
recipients* | InputVariable[] | Message recipients. |
body* | InputVariable | Message content. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Multichannel
Multichannel
Opens an SMS channel with the caller mid-call so they can exchange information by text rather than voice. Particularly useful for sensitive or precise input like credit card numbers, addresses, or confirmation codes that are difficult to capture reliably over audio.
| Field | Type | Description |
|---|---|---|
number* | InputVariable | The caller’s phone number to send the SMS to. |
message* | InputVariable | The opening message sent to start the SMS exchange. |
phoneNumberId | string | ID of the Vatel phone number to send from. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |
Call Tag
Call Tag
Applies one or more tags to the current call. Tags appear in call history and can be used for filtering, reporting, or routing.
| Field | Type | Description |
|---|---|---|
tags* | InputVariable[] | Tags to apply to the call. |
title | string | Label shown on the node. |
description | string | Internal notes. |
when | string | Entry condition. |

