Skip to content
TriedDocs
Conversation flow

Conversation flow overview

Build agents as a graph of nodes and transitions, so each step of a call has its own instruction, tools and rules for moving on.

A conversation flow agent runs a graph instead of one big prompt. Each node is a step: say something, run a function, transfer, press digits, send an SMS, branch on variables or hang up. Transitions (edges) decide which node comes next. A global prompt applies to every node.

Flows suit calls with a strict order (intake forms, qualification scripts, bookings, compliance wording) and calls where a wrong turn is expensive. For open conversations, a single prompt agent is simpler.

A conversation flow: the Begin tag, a greeting with a static sentence, and prompt transitions to the next nodes

Create a flow agent#

  1. Go to Agents, create an agent and choose Conversation flow. You can start from a template, or choose Reuse an existing flow to share one flow between agents. The agent gets response_engine: { type: "conversation-flow", conversation_flow_id }.
  2. The flow builder opens full screen. Click Conversation in the node list to add a node. When a flow has no start node, the first node you add becomes the start node.
  3. Write the node's instruction, add transitions, and connect them to the next nodes.
  4. Fill in Global settings: model, global prompt, welcome behaviour, functions, knowledge base.
  5. Click Test to chat with the flow or call it from the browser, then Publish.

Through the API, create the flow with POST /create-conversation-flow, then create an agent that points at it.

The builder#

Area What it holds
Left rail Agent (the builder) and Simulation (test cases)
Left column Node tab: the node list and Note. Subflows tab: components
Canvas Nodes, transitions, the Begin tag, notes and the canvas toolbar. See Canvas
Right column Global settings tab and Node settings tab
Header Agent name, save status, Test, Publish

Changes save automatically. The header shows when a save is in progress or fails.

Node types#

Node list label type Purpose Page
Conversation conversation Talk with the caller Conversation node
Subagent subagent Conversation node with its own tools Subagent node
Function function Run one flow function Function node
Call Transfer transfer_call Transfer the call, with a failure edge Call transfer node
Press Digit press_digit Navigate a phone menu Press digit node
Logic Split branch Branch on variables, no speech Logic split node
Agent Transfer agent_swap Continue the call on another agent Agent transfer node
In-Call SMS sms Text the caller, with sent and failed edges SMS node
Extract Variable extract_dynamic_variables Extract values into variables Extract variables node
Code code Run JavaScript Code node
MCP mcp Call one MCP tool MCP node
Ending end Say a last line and hang up End node
Component component Run a reusable subflow Components
Bridge Transfer, Cancel Transfer bridge_transfer, cancel_transfer Transfer-agent flows only Transfer agent nodes

A seventeenth type, component_exit, only exists inside components.

How a flow runs#

Start#

The call starts at start_node_id (or the first node when it is unset). If the agent speaks first and the start node has a static sentence, that sentence is the greeting.

Talk in a conversation node#

The LLM replies using the global prompt plus the current node's instruction under "Current Task". The node's prompt transitions are offered to the same LLM call as transition_to_<node_id> tools.

Move on#

After each caller turn the engine checks, in order: the always edge, equation transitions top to bottom, then prompt transitions and global nodes (decided by the LLM), then the else edge. If nothing matches, the flow stays in the node.

Run automatic nodes#

Function, code, MCP, logic split, extract, SMS, press digit, transfer and agent transfer nodes do their work as soon as they are entered, then evaluate their transitions straight away. Up to 25 automatic hops can chain in one turn.

End#

An end node, an end_call, a transfer or the caller hanging up ends the call.

Every node change is recorded as a node_transition item in transcript_with_tool_calls with former_node_id, new_node_id and a transition_type (normal, global, global_go_back or interrupt_go_back).

Flow fields#

Field Type Default Description
global_prompt string "" Applies to every node
model_choice object {type: "cascading", model: "gpt-5.6-terra", high_priority: false} See Global settings
model_temperature number 0 to 1 0
tool_call_strict_mode boolean Strict tool schemas
start_speaker "agent" or "user" "agent" Who speaks first
begin_after_user_silence_ms integer or null User-first agents speak after this much silence
start_node_id string or null null Start node
nodes array of nodes []
tools array of tools with tool_id [] Functions for function and subagent nodes
knowledge_base_ids string array []
kb_config {top_k, filter_score} Retrieval settings
kb_instruction string, up to 500 Steers knowledge base queries
default_dynamic_variables object {}
mcps array MCP servers for MCP tools and nodes
flex_mode boolean See Flex mode
components array Local components
notes array Canvas sticky notes
begin_tag_display_position {x, y} {x: 0, y: 0} Where the Begin tag sits

Billing#

LLM time is billed per node: the time spent in each node is priced at that node's model (a node can override the flow model), and shows as separate llm_node_<id>_<model> lines on the call's cost.

Next steps#