Every tool has two halves: the configuration you set here, and the prompt instructions that tell the bot when to use it. If your instructions (Step 1) never describe when to call a tool, the bot may ignore it or use it at the wrong moment. Always pair a tool with prompt guidance. See Instructions and Create a bot.
Wizard navigation buttons
These buttons sit at the bottom of every wizard step, including this one.| Button | What happens when you click it |
|---|---|
| Previous | Goes back to Step 5 (Behavior). |
| Create Bot | Submits the whole bot. If anything fails validation, you get an error message and the wizard jumps to the first step that has an error. On success you land on the new bot’s detail page. (In edit mode this button reads Save Changes and returns you to the read-only view.) |
| Cancel | Abandons the wizard and returns you to the previous page. Nothing is saved. |
Buttons used throughout this step
Several sections build dynamic lists (transfer targets, headers, parameters, key mappings). They share the same two controls.| Button | What happens when you click it |
|---|---|
| Add (e.g. Add message, Add param, Add header, Add transfer target, Add SIP header, Add context field) | Adds a new empty row to that list so you can fill it in. |
| Remove | Deletes that one row from the list. There is no undo, but nothing is saved until you click Create Bot / Save Changes. |
| Collapse / Expand (section heading) | Shows or hides that section’s contents. Collapsing does not turn the feature off — only the Enable toggle does that. |
End Call
Lets the bot hang up by itself when the conversation has reached a natural end.| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to give the bot an “End Call” tool. | No | Off by default. |
| Tool Description | Plain-language guidance telling the bot when it may end the call. | No | Defaults to End the current call. |
Transfer Call
Lets the bot hand the live call to a human agent or another number.| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to give the bot a “Transfer Call” tool. | No | Off by default. |
| Tool Description | Guidance on when the bot should transfer. | No | Defaults to Transfer the call to a human agent. |
| Statement before transfer | A short line the bot speaks just before the transfer happens. | No | Leave empty to use the default hold message. |
| Transfer Targets | One or more destinations the call can be sent to (see below). | No | Add at least one target, or the tool has nowhere to send the call. |
Transfer Targets list
Click Add transfer target to create a row. Each row has these controls:| Control | What to enter |
|---|---|
| Label | A friendly name for this destination (e.g. “Collections desk”). |
| Method | How the transfer is performed. The available Type options change based on the method you pick (see table below). |
| Type | The kind of address — driven by the chosen Method. |
| Value | The actual address: an extension, phone number, or URI depending on Type. |
| Default (checkbox) | Marks this as the destination used when the bot transfers without naming a specific target. |
| Enabled (checkbox) | Turns this individual target on or off without deleting it. |
| Method | Transport it uses | Type options |
|---|---|---|
| WebSocket Reverse Transfer | WebSocket calls | Extension, Phone Number |
| SIP REFER | LiveKit SIP calls | SIP URI, Tel URI, Phone Number |
SIP Headers
Inbound SIP calls can carry custom headers (for example a lead ID injected by your dialler). This section controls which of those headers the bot is allowed to see and reuse.| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to use a SIP header whitelist. | No | Off by default. |
| Allowed Headers | A list of header names to expose, e.g. X-Lead-Id. Click Add SIP header to add a row. | No | Only X- headers you list here are exposed; everything else is ignored for safety. |
| Transfer Pass-through Headers | Checkboxes — tick the allowed headers that should be copied onto the call when it is transferred. | No | Only headers you have already added above appear here. |
| Variable Format | Read-only. Shows the exact variable you paste into your prompts, e.g. {{call.sip_header_x_lead_id}}. | No | This field is disabled (display-only) so you can copy the correct variable name. |
Once a header is whitelisted, reference its value in your prompts using the variable shown in Variable Format. See how variables work for how
{{call.*}} variables resolve.Voicemail Detection
Lets the bot recognise when it has reached an answering machine or automated IVR instead of a live person, so it can act appropriately instead of talking to a recording.| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to detect voicemail / answering machines. | No | Off by default. |
| Additional Instructions | Extra hints that help the bot recognise voicemail (for example wording common to your region’s carriers). | No | Optional. |
| Voicemail Message | What the bot should say before hanging up once voicemail is detected. | No | Leave empty to hang up silently. |
Custom Tools
This is the visual Tool Builder — a no-code way to let the bot call your own APIs in the middle of a conversation (check a payment, send an SMS, schedule a callback, create a ticket, and so on). It is documented in full in its own section below.Pre-Call Fetch
Pulls customer data from your CRM before the conversation starts, so the bot opens the call already knowing who it is speaking to. The fields returned becomecrm.* variables you can use in prompts and the opening message.
| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to fetch CRM data before the call. | No | Off by default. |
| URL | Your CRM’s lookup endpoint. | No | Required if you enable the section. |
| Token | An auth token; sent as the Authorization header on the request. | No | |
| Method | GET or POST. | No | |
| Query Parameters | Key-value rows mapping the HTTP parameter name to a call variable, e.g. customerId → {{call.userrefno}}. Click Add for each row. | No | |
| Response Normalizer | A JSON key used to flatten a [{Key, Value}]-style array response into plain fields. | No | Leave empty if your API already returns flat JSON. |
Call begins
The platform receives the call and its variables (from the dialler or the dialout request).
Post-Call Push
Sends the outcome of the call back to your CRM or webhook after the conversation ends — disposition, analysis fields, recording link, and any variables you choose.| Field | What to enter | Required | Notes |
|---|---|---|---|
| Enable | Toggle on to push results to your CRM. | No | Off by default. |
| URL | The webhook endpoint that receives results. | No | Required if you enable the section. |
| Token | An auth token; sent as the Authorization header. | No | |
| Method | GET sends the data as query parameters; POST sends it as a JSON body. | No | |
| Custom Headers | Key-value rows to override Authorization (for example an x-api-key header your CRM expects). Click Add for each row. | No | |
| Key Mapper | Key-value rows mapping the external field name to a template variable, e.g. DISPOSITION → {{analysis.DISPOSITION}}. Click Add for each row. | No | This is how you shape the payload to match your CRM’s exact field names. |
- Call metadata (duration, who hung up, timestamps)
- The recording link
- Analysis fields (summary, disposition, sub-disposition)
- Quality-control fields
- Campaign / CRM variables
Tool Builder (custom API tools)
The Custom Tools section embeds a visual builder for creating tools the bot can call during a live conversation. You describe when to use the tool, where the API lives, and what to say while it runs — all in plain language. No code.Getting started: presets
When you open the builder you can start from a template or from scratch. Click a preset to create a pre-filled tool:| Preset | Creates |
|---|---|
| Check Payment Status | A tool pre-filled to look up whether a payment was received. |
| Send SMS | A tool pre-filled to send a text message (for example a payment link). |
| Schedule Callback | A tool pre-filled to book a callback time. |
| Create Ticket | A tool pre-filled to raise a support ticket. |
| Blank Tool | An empty tool you fill in entirely yourself. |
Builder buttons
| Button | What happens when you click it |
|---|---|
| Add Tool | Adds a new tool to the list. |
| Remove (per tool) | Deletes that tool from the list. |
| Collapse tool | Folds a tool down to a summary row (name, method, URL, timing, status) so the list stays readable. Click again to reopen it. |
| Info icon (per field) | Shows inline help for that field — name, trigger, success/failure/timeout/missing guidance, timing, hold message, variables, and parameters. |
| Show variables (eye icon) | Expands the list of variables the platform has auto-extracted from your bot’s prompts, ready to insert. |
| Show parameters | Expands the list of conversation parameters — values the bot collects from the customer before calling the API. |
Tool fields
Each tool has the following fields. The required ones must be filled before the bot will be saved.| Field | What to enter | Required |
|---|---|---|
| Tool Name | A short internal name in lowercase with underscores, e.g. check_payment_status. The customer never hears this. | Yes |
| When To Use | The trigger. Describe the customer situations that should make the bot call this tool, e.g. “Use when the customer asks whether a payment was received.” | Yes |
| URL | The API endpoint to call. | Yes |
| Method | GET or POST. | Yes |
| Success Guidance | How the bot should use the result, e.g. “Tell the customer whether the payment was received.” | No |
| Failure Guidance | What to say if the API returns an error, e.g. “Apologise and say the system cannot fetch details right now.” | No |
| Timeout Guidance | What to say if the API is slow, e.g. “Say it is taking a little longer and ask the customer to wait one more moment.” | No |
| Missing Information Guidance | What to ask for if a required parameter is missing, e.g. “Ask for the loan number before checking status.” | No |
| Timing | When the customer hears the hold message and when the API actually runs (see table below). | No |
| Hold Message Intent | What the bot should communicate before the tool runs, written as intent in plain English. The bot translates it into the customer’s language on the fly, e.g. “Tell the customer the payment link is being sent.” | No |
| Parameters (Conversation Arguments) | Values the bot extracts from the conversation before calling the API. Each row has a parameter name (e.g. preferred_time), a type (string / number / boolean), and a description. | No |
| Query Parameters / Body Fields | Map your API’s parameter names to {{variables}}. Variables are auto-extracted from your prompts, or you can add them manually; click one to insert it. | No |
Timing options
The Timing dropdown controls the experience while the API runs:| Option | Behaviour |
|---|---|
| immediate | Runs silently with no spoken hold message. |
| speak_first | Bot speaks the hold message, then runs the API. |
| speak_while_running | Bot speaks while the API runs in parallel (lowest perceived wait). |
| post_call | Tool runs after the call has ended. |
The Hold Message Intent is deliberately written as intent, not a fixed script. This keeps multilingual bots natural — the bot localises the message into whatever language it is speaking, in a single spoken line, rather than reading a hard-coded sentence.
Variables and parameters — what’s the difference
- Variables (
{{...}}) are values the platform already knows — pulled from CRM pre-fetch, the dialler, SIP headers, or earlier in the call. Use Show variables to see what is available and click to insert. - Parameters (Conversation Arguments) are values the bot must collect from the customer during the call before it can call the API (for example a preferred callback time the customer just stated). Use Show parameters to manage these.
Tool status
Each tool card shows a status:- A valid tool has all required fields (name, when-to-use, URL, method) filled.
- A tool with errors is flagged so you can see what is missing before saving. If you try to create the bot with an incomplete tool, validation blocks the save and the wizard jumps back to this step.
Before you launch
Did you pair each tool with prompt instructions?
Did you pair each tool with prompt instructions?
Enabling a tool here is only half the job. Your Step 2 instructions must tell the bot when to use End Call, Transfer Call, and each custom tool. Without that, the bot may never trigger them.
Do your transfer targets match the call's transport?
Do your transfer targets match the call's transport?
WebSocket Reverse Transfer for WebSocket calls, SIP REFER for SIP calls. Add one target per method if a bot can receive calls on more than one transport.
Have you tested pre-fetch and post-call push end to end?
Have you tested pre-fetch and post-call push end to end?
Run a test call with a real or staging customer ID, then confirm the CRM received the push with the field names from your Key Mapper.