This is Step 6 of the bot wizard (labelled “Tools & Integrations”). It is where you decide what the bot is allowed to do beyond talking: end the call on its own, transfer to a human, read incoming SIP headers, detect voicemail, call your own APIs mid-conversation, pull customer data before the call, and push the outcome back to your CRM afterwards.
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.
Every section on this step is collapsible. Click a section heading to expand or collapse it. Most sections start with an Enable toggle — until you turn it on, the rest of that section’s fields stay hidden.

Wizard navigation buttons

These buttons sit at the bottom of every wizard step, including this one.
ButtonWhat happens when you click it
PreviousGoes back to Step 5 (Behavior).
Create BotSubmits 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.)
CancelAbandons the wizard and returns you to the previous page. Nothing is saved.
Because this is the last step, there is no Continue button here. You can still click any earlier step number in the stepper bar at the top to jump back.

Buttons used throughout this step

Several sections build dynamic lists (transfer targets, headers, parameters, key mappings). They share the same two controls.
ButtonWhat 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.
RemoveDeletes 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.
FieldWhat to enterRequiredNotes
EnableToggle on to give the bot an “End Call” tool.NoOff by default.
Tool DescriptionPlain-language guidance telling the bot when it may end the call.NoDefaults to End the current call.
Make the description specific so the bot does not hang up too early:
Use this when the customer has completed the conversation, refuses to
continue, confirms it is a wrong number, becomes abusive, or asks to end
the call.
Even with End Call disabled, the bot can still end a call through closure phrases and dead-air detection. Enabling this tool simply gives the language model an explicit, reliable way to finish.

Transfer Call

Lets the bot hand the live call to a human agent or another number.
FieldWhat to enterRequiredNotes
EnableToggle on to give the bot a “Transfer Call” tool.NoOff by default.
Tool DescriptionGuidance on when the bot should transfer.NoDefaults to Transfer the call to a human agent.
Statement before transferA short line the bot speaks just before the transfer happens.NoLeave empty to use the default hold message.
Transfer TargetsOne or more destinations the call can be sent to (see below).NoAdd 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:
ControlWhat to enter
LabelA friendly name for this destination (e.g. “Collections desk”).
MethodHow the transfer is performed. The available Type options change based on the method you pick (see table below).
TypeThe kind of address — driven by the chosen Method.
ValueThe 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.
The Method determines which transport handles the transfer and which Types you can choose:
MethodTransport it usesType options
WebSocket Reverse TransferWebSocket callsExtension, Phone Number
SIP REFERLiveKit SIP callsSIP URI, Tel URI, Phone Number
A target’s Method must match the transport the call actually arrived on. A SIP REFER target cannot transfer a WebSocket call, and a WebSocket Reverse Transfer target cannot transfer a SIP call. If the method does not match the active transport, the transfer fails at runtime. When in doubt, add one target per method so at least one always matches.
A target’s Value can be a phone number even on the SIP REFER method — pick the “Phone Number” Type for that. The Method is about how the platform reaches the destination, not whether the address looks like a 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.
FieldWhat to enterRequiredNotes
EnableToggle on to use a SIP header whitelist.NoOff by default.
Allowed HeadersA list of header names to expose, e.g. X-Lead-Id. Click Add SIP header to add a row.NoOnly X- headers you list here are exposed; everything else is ignored for safety.
Transfer Pass-through HeadersCheckboxes — tick the allowed headers that should be copied onto the call when it is transferred.NoOnly headers you have already added above appear here.
Variable FormatRead-only. Shows the exact variable you paste into your prompts, e.g. {{call.sip_header_x_lead_id}}.NoThis 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.
FieldWhat to enterRequiredNotes
EnableToggle on to detect voicemail / answering machines.NoOff by default.
Additional InstructionsExtra hints that help the bot recognise voicemail (for example wording common to your region’s carriers).NoOptional.
Voicemail MessageWhat the bot should say before hanging up once voicemail is detected.NoLeave empty to hang up silently.
A detected voicemail is recorded as the disposition for that call. Keep the voicemail message short — the bot drains it and then hangs up promptly rather than waiting through the machine’s full beep-and-record sequence.

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 become crm.* variables you can use in prompts and the opening message.
FieldWhat to enterRequiredNotes
EnableToggle on to fetch CRM data before the call.NoOff by default.
URLYour CRM’s lookup endpoint.NoRequired if you enable the section.
TokenAn auth token; sent as the Authorization header on the request.No
MethodGET or POST.No
Query ParametersKey-value rows mapping the HTTP parameter name to a call variable, e.g. customerId{{call.userrefno}}. Click Add for each row.No
Response NormalizerA JSON key used to flatten a [{Key, Value}]-style array response into plain fields.NoLeave empty if your API already returns flat JSON.
The typical flow:
1

Call begins

The platform receives the call and its variables (from the dialler or the dialout request).
2

Lookup runs

The platform calls your Pre-Call Fetch URL, passing the query parameters you mapped.
3

Fields become variables

Each field in the response is exposed as a crm.* variable.
4

Bot uses the data

Your prompt and opening message reference those crm.* fields, so the bot greets the customer with real context.
Always run a test call with a real or staging customer ID before launching a campaign. A broken pre-fetch URL means the bot opens the call with empty variables.

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.
FieldWhat to enterRequiredNotes
EnableToggle on to push results to your CRM.NoOff by default.
URLThe webhook endpoint that receives results.NoRequired if you enable the section.
TokenAn auth token; sent as the Authorization header.No
MethodGET sends the data as query parameters; POST sends it as a JSON body.No
Custom HeadersKey-value rows to override Authorization (for example an x-api-key header your CRM expects). Click Add for each row.No
Key MapperKey-value rows mapping the external field name to a template variable, e.g. DISPOSITION{{analysis.DISPOSITION}}. Click Add for each row.NoThis is how you shape the payload to match your CRM’s exact field names.
You can map any combination of:
  • Call metadata (duration, who hung up, timestamps)
  • The recording link
  • Analysis fields (summary, disposition, sub-disposition)
  • Quality-control fields
  • Campaign / CRM variables
After a test call, check your CRM side (or the call’s event log) to confirm the payload arrived with the field names you expect. The recording link sent here is a short, stable URL — safe to store and replay.

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:
PresetCreates
Check Payment StatusA tool pre-filled to look up whether a payment was received.
Send SMSA tool pre-filled to send a text message (for example a payment link).
Schedule CallbackA tool pre-filled to book a callback time.
Create TicketA tool pre-filled to raise a support ticket.
Blank ToolAn empty tool you fill in entirely yourself.
You can edit every field of a preset after it is created — the templates are just a head start.

Builder buttons

ButtonWhat happens when you click it
Add ToolAdds a new tool to the list.
Remove (per tool)Deletes that tool from the list.
Collapse toolFolds 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 parametersExpands 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.
FieldWhat to enterRequired
Tool NameA short internal name in lowercase with underscores, e.g. check_payment_status. The customer never hears this.Yes
When To UseThe 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
URLThe API endpoint to call.Yes
MethodGET or POST.Yes
Success GuidanceHow the bot should use the result, e.g. “Tell the customer whether the payment was received.”No
Failure GuidanceWhat to say if the API returns an error, e.g. “Apologise and say the system cannot fetch details right now.”No
Timeout GuidanceWhat 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 GuidanceWhat to ask for if a required parameter is missing, e.g. “Ask for the loan number before checking status.”No
TimingWhen the customer hears the hold message and when the API actually runs (see table below).No
Hold Message IntentWhat 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 FieldsMap 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:
OptionBehaviour
immediateRuns silently with no spoken hold message.
speak_firstBot speaks the hold message, then runs the API.
speak_while_runningBot speaks while the API runs in parallel (lowest perceived wait).
post_callTool 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.
The card also shows a small timing indicator (icon plus label — immediate, speak first, speak while running, or post-call) so you can scan how each tool behaves at a glance.
Operations checklist for any custom tool:
  • The name is short and action-oriented.
  • The When To Use text tells the bot exactly when to call it.
  • The HTTP method and URL are correct.
  • Required parameters match what the API actually needs.
  • The timeout behaviour is acceptable for a live call.
  • The spoken hold message reads naturally in the call language.
Custom tool activity appears in the call’s event log so you can confirm a tool fired and see what the API returned.

Before you launch

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.
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.
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.
Once this step is configured, click Create Bot to finish. See Create a bot for the full wizard walkthrough.