Skip to main content

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:

  1. An agent — created and configured. You can verify it works in the Preview tab without spending anything.
  2. 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.
  3. 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_REQUIRED if 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:

  1. Open the agent → Preview tab → click the Phone button (or use the outbound trigger on the agent page).
  2. Pick the From number (must be a number assigned to this agent for outbound).
  3. Enter the To number in E.164 format (e.g. +14155551212).
  4. 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

  1. Buy or connect a number (Telephony → Buying Phone Numbers).
  2. Open your agent → Phone tab → assign that number for inbound.
  3. 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:

  1. Audio in — The caller's audio reaches Bolti via your telephony provider (PSTN/SIP) and arrives at a realtime call room.
  2. STT — Speech-to-text streams the caller's words to the LLM as a transcript.
  3. LLM — Decides on a reply, a tool call, or both. (Tool calling →)
  4. TTS — Synthesizes the reply audio.
  5. Audio out — Streams back through the realtime audio service to the caller.
  6. Recording — In parallel, an egress process captures the call audio and stores it for later playback. (Recordings →)
  7. Conversation — A conversation record 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 From number 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-endMaking Outbound Calls
Schedule a single call for a future instantMaking Outbound Calls
Wire up an inbound number to an agentReceiving Inbound Calls
Run a list of outbound calls as a campaignBatch Calling
React to call outcomes in your own systemWebhooks
Understand what each call status meansCall Statuses
Diagnose why a call hung upHangup Codes
Tune for lower latencyCall Latencies
Connect or buy a phone numberTelephony

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.