Calling
This section is about putting your agent on the actual phone network — making real calls, receiving real calls, and understanding what happens during one. If Agent Setup was about how the agent behaves, Calling is about how it gets to a caller.
There are two directions, and they're set up independently:
- Outbound — Bolti dials a number and the agent talks to whoever picks up. Triggered by you (via dashboard, API, or MCP) or by your own systems.
- Inbound — A caller dials a number assigned to the agent and Bolti routes the call into the realtime room where the agent is running.
Both ride the same underlying voice pipeline (STT → LLM → TTS → Telephony). The difference is who initiates.
What you need before placing a call
Three things have to be in place. Most accounts already have them after Agent Setup:
- An agent — created and configured. You can verify it works in the Preview tab without spending anything.
- A phone number — either bought through Bolti, brought from a connected provider (Twilio / Plivo / Exotel / Vobiz), or provisioned on a SIP trunk you registered (BYOT). See Telephony.
- Workspace credits — every minute on the phone is metered. Bolti checks your balance before placing or accepting a call and rejects with a
402 PAYMENT_REQUIREDif you're out. Top up under Billing.
If any of those are missing, calls won't go through. The error messages tell you which is missing.
Outbound calls in 30 seconds
The fastest path is from the dashboard:
- Open the agent → Preview tab → click the Phone button (or use the outbound trigger on the agent page).
- Pick the From number (must be a number assigned to this agent for outbound).
- Enter the To number in E.164 format (e.g.
+14155551212). - Click Call.
Bolti spins up a realtime call room, dials out via your telephony provider, and connects the audio to the agent worker. The receiver's phone rings. When they pick up, the agent greets and starts the conversation.
The same thing programmatically:
POST /workspaces/{workspace_id}/agents/{agent_id}/outbound-call
Authorization: Bearer <token>
{
"to_number": "+14155551212",
"agent_phone_number_id": "..."
}
If the agent's prompt uses dynamic variables (e.g. {{ name }}), pass them in the same payload:
{
"to_number": "+14155551212",
"agent_phone_number_id": "...",
"variable_values": { "name": "Priya", "appointment_date": "April 28" }
}
Or from your editor with the MCP server:
"Place a call from the sales agent to +14155551212."
The full how-to is in Making Outbound Calls.
Inbound calls in 30 seconds
- Buy or connect a number (Telephony → Buying Phone Numbers).
- Open your agent → Phone tab → assign that number for inbound.
- Have someone dial the number.
When a call comes in, Bolti's telephony layer recognizes the dialled number, looks up which agent it's bound to, and bridges the call into a realtime room with a fresh instance of that agent worker. The agent answers within a second or so and plays the configured greeting.
A given phone number routes to exactly one agent at a time. Re-assign it to switch.
Full details: Receiving Inbound Calls.
What happens during a call
Worth understanding once, even if you never debug at this level:
- Audio in — The caller's audio reaches Bolti via your telephony provider (PSTN/SIP) and arrives at a realtime call room.
- STT — Speech-to-text streams the caller's words to the LLM as a transcript.
- LLM — Decides on a reply, a tool call, or both. (Tool calling →)
- TTS — Synthesizes the reply audio.
- Audio out — Streams back through the realtime audio service to the caller.
- Recording — In parallel, an egress process captures the call audio and stores it for later playback. (Recordings →)
- Conversation — A
conversationrecord is created with status, duration, transcript, and a link to the recording. Visible under the agent's Logs tab.
Latency for the round trip (caller speaks → agent replies) typically lands in the 600–900ms range, depending on which providers you picked. See Call Latencies for what affects it and how to tune.
Tracking calls
Every call — outbound, inbound, or browser preview — produces a conversation record with:
- A unique
conversation_id(returned synchronously when you start an outbound call, or visible in Logs after the fact) - The call's direction (outbound / inbound / web)
- A status that progresses through the call's lifecycle (Call Statuses)
- A hangup code when the call ends, indicating why (Hangup Codes)
- A full transcript of the conversation
- A recording URL once the call finishes
- The duration in seconds, used for billing
You can browse conversations per agent in the Logs tab, query them via the API, or pull them into your editor with the MCP server.
Volume: one-off calls vs campaigns
For occasional outbound calls — a customer asking for a callback, a single follow-up — placing them one at a time from the dashboard or API is the right approach. The same endpoint also supports scheduled calls when the trigger is "fire this at 3pm tomorrow" rather than "fire this now". See Make Outbound Calls.
For batch calling (a list of contacts) or recurring schedules (a daily reminder), use a campaign. Bolti's scheduler materializes the next hour of work, paces dispatch via per-workspace and per-DID rate limits, and emits webhooks on each outcome. See Batch Calling.
If you need to react to call outcomes from your own systems, register an HTTPS endpoint and subscribe to events under Webhooks. Every event is HMAC-signed and retried with exponential backoff.
Compliance
A few things you're responsible for, not Bolti:
- Caller-ID accuracy — the
Fromnumber you use for outbound must be one you legitimately control. In most jurisdictions spoofing other people's numbers is illegal. - Consent — recording laws vary by country and state. Bolti records every call by default; if you operate somewhere with two-party consent, your agent's greeting needs to disclose that. Configure the greeting in Agent Setup → Basic.
- Do-not-call lists — for outbound campaigns, deduping against DNC registries is on you.
- TCPA / regional autodialer rules — applicable for high-volume outbound in many jurisdictions.
If you have an enterprise contract, the Enterprise section covers data residency, on-prem options, and signed BAAs/DPAs.
Where to go next
| If you want to… | Read |
|---|---|
| Place your first outbound call end-to-end | Making Outbound Calls |
| Schedule a single call for a future instant | Making Outbound Calls |
| Wire up an inbound number to an agent | Receiving Inbound Calls |
| Run a list of outbound calls as a campaign | Batch Calling |
| React to call outcomes in your own system | Webhooks |
| Understand what each call status means | Call Statuses |
| Diagnose why a call hung up | Hangup Codes |
| Tune for lower latency | Call Latencies |
| Connect or buy a phone number | Telephony |
If you've never placed a real call before, the standard first step is Making Outbound Calls — you'll have your phone ringing within a couple of minutes.