Each state is a stage of the conversation, such as "Greeting / Assisting," "Transferring," or "Closing." The agent behaves differently in each state based on the instructions and tools you give it. The first state handles both greeting and active assistance, so the agent can start helping right away without waiting for a transition.
Every state has instructions that tell the agent how to behave while it is in that stage. For example, in a "Greeting" state you might instruct: "Welcome the caller, ask how you can help, and listen for buying signals."
Functions are actions the agent can take, such as looking up company info, transferring a call, or collecting a caller's contact details. Each state has its own set of available functions, so you control exactly what the agent can do at each stage.
Transitions connect one state to the next. When a function is triggered, the agent can automatically move to a different state. For example, when a caller asks to speak with sales, the agent might transition from "Greeting" to "Collecting Info."
Two things control when the agent transitions to a new state:
Each function has a description that tells the agent when to use it. The agent reads every caller response and compares it to the descriptions of its available functions. When there is a match, it fires that function.
For example, a function described as "Collect the caller's contact information when they express interest in our product or want to speak with sales" will fire when the caller says something like "Yeah, I'd love to learn more about pricing."
The instructions in each state reinforce when to use functions. You can add guidance like "If the caller asks about pricing or a demo, collect their contact details." This gives the agent extra context beyond just the function description.

When you add tools to a state, you will see them organized into groups in the tool picker. Some tools are always available, others appear only when you have enabled the matching integration.
Every agent comes with these core tools out of the box:
Lets you build custom data-gathering forms into any state. Add the "Collect Info" tool to a state, then configure which fields to collect (name, email, phone, etc.) and what happens with the data (send an email, fire a webhook, send an SMS, or post to Slack or Teams).
The agent walks the caller through each field one by one, then submits everything at once. You can configure different fields and actions on different states to collect different information at each stage.
Similar to Info Collection, but designed for qualifying leads with a structured questionnaire. The questions are configured in your agent's training data rather than on individual states, so every call follows the same qualification script.
You can set it to start automatically, trigger on specific keywords, or only run when the caller specifically requests it.
A standalone action executor. It does not collect data itself; it runs actions (email, webhook, SMS, Slack, Teams) using data that was collected by a previous state. This lets you separate data collection from action execution, so you can route to different actions depending on the flow path.
A common pattern: State A collects information from the caller, then transitions to State B which executes actions with that data. This gives you flexibility. For example, you could route qualified leads to one action (email the sales team) and unqualified leads to another (just log to a webhook).
These tools appear in the tool picker after you enable the matching integration on your agent's domain. Each integration adds a set of specialized functions.
Lets the agent help callers book appointments. The agent searches your available calendars, helps the caller pick one, and texts them a booking link via SMS.
How to enable: Turn on the "Generic Calendar" or "Generic Booking" integration in your domain's integration settings.
How it works on a call: Caller asks to book an appointment, the agent searches calendars, if multiple calendars exist the caller picks one, and the agent texts the booking link to the caller's phone.

Full live-booking experience: the agent checks available time slots, walks the caller through selecting a slot, and books the appointment right on the call.
How to enable: Turn on the "Calendly" or "Cal.com" integration in your domain's integration settings.
How it works on a call: Caller asks to schedule, the agent shows available appointment types, checks open time slots based on the caller's preferences, collects the caller's email, name, and timezone, and books the appointment. If live booking fails, the agent falls back to texting a scheduling link.

Turns your agent into a phone-based ordering system. Callers can browse the menu, customize items, build a cart, and place an order, all through conversation.
How to enable: Enable the "Heartland" integration in your domain's integration settings, or set the agent's type to "Heartland."
What the agent can do: Search the menu, browse categories, show daily specials, add and remove items, handle customizations and modifiers, collect customer info, set pickup time, suggest add-ons, validate pricing, and submit the order to your Heartland POS system.
Gives the agent access to your uploaded documents so it can answer detailed questions that go beyond basic company info and FAQs.
How to enable: Create a Knowledge Base for your agent and upload documents (PDFs, web pages, etc.). Once the Knowledge Base is active, the search tool becomes available.
How it works on a call: When the caller asks a question the agent cannot answer from its training data, it searches your uploaded documents and shares a conversational answer.

MCP (Model Context Protocol) tools let you connect your agent to custom external services. These appear in a purple "MCP" group in the tool picker after you configure an MCP server in your agent's settings.
Think of functions like items in a toolbox. You hand the agent the whole toolbox and it picks the right tool based on what the caller says. You do not control the order; the AI does.
Each function has a description that tells the AI when to use it. The AI reads every caller response, compares it to the descriptions of the tools available in the current state, and picks the best match.
All functions from the same integration go in the same state. They are a workflow chain, and their descriptions tell the AI the natural sequence.
For example, with Calendly scheduling:
You do not need to create separate states for each step. Put all the integration's tools in one state and the AI handles the sequence.

You can put everything in a single state and the agent handles it fine. The main reason to use multiple states is when you want the agent's focus or personality to change during the call.
State 1: Greeting / Assisting - Has directory search, transfer, company info, and knowledge base tools. The agent is in general receptionist mode and can start helping immediately.
State 2: Scheduling - Has all calendar and Calendly tools. The agent transitions here when the caller says "I need an appointment." Now it is focused only on booking.
State 3: Lead Collection - Has info collection tools. The agent transitions here when the caller shows interest. Now it is focused only on gathering details.
If your agent has a straightforward job such as answering questions, searching the knowledge base, and maybe transferring calls, the initial "Greeting / Assisting" state with all the tools works great. The AI picks what it needs based on the conversation. No extra states needed.
Add a new state when you want the agent to shift focus. For example, when a caller expresses interest, transition to a "Collect Info" state so the agent concentrates on gathering their details. The key is that each state limits which tools are available, keeping the agent on task.
If an integration is enabled but you did not add its tools to your flow, the agent automatically gets access to them on every state. So even if you forget, the agent still works. Adding tools explicitly just gives you control over which states have which capabilities.
Here is what a lead collection flow looks like. The agent starts in a single state that handles both greeting and general assistance, then transitions to focused states as needed.
Instruction: "Welcome the caller, answer questions, help with requests."
Functions available:
Instruction: "Gather the caller's details."
Functions available:
Instruction: "Thank the caller and end the call."
Functions available: None - call ends.
The function description is the most important part. Be specific about when the agent should use it. Instead of "Collect info," write "Collect the caller's name and email when they show interest in a demo or ask about pricing."
Only give the agent the tools it needs for that stage. Fewer choices means the agent stays focused and makes better decisions about which function to use.
Each state narrows what the agent is paying attention to. The initial "Greeting / Assisting" state has broad tools so the agent can help right away. Adding a separate state like "Collect Info" with just data collection tools keeps the agent focused on that task.
Use the Templates button in the toolbar to load a pre-built flow. It is easier to modify an existing flow than to build one from scratch.
If you enable an integration after building your flow, the agent will automatically have access to those tools at runtime, even if you have not explicitly added them to your states. For best results though, add them to the specific states where they make sense.