Outbound calling flips the voice agent. Instead of waiting for a tech or end-user to dial in, your AVCodex agent places the call, the recipient picks up, and the same voice agent (same prompt, same knowledge, same tools) runs the conversation.
Warning: Outbound calling requires a Studio Pro plan or higher with voice agents enabled. You also need a phone number assigned to the agent.
Outbound calls use SIP (Session Initiation Protocol) through LiveKit. When you trigger an outbound call:
- AVCodex creates a voice room and dials the recipient via your SIP trunk.
- The recipient's phone rings with your configured caller ID.
- When they answer, your voice agent joins the call and begins the conversation.
- The agent uses the same voice, greeting, system prompt, and tools as inbound calls.
- The call is recorded as a chat session you can review on your Chats page.
Each call has a configurable maximum duration (default 10 minutes, up to 60 minutes).
| Inbound | Outbound | |
|---|---|---|
| Who initiates | The caller dials your number | Your AI dials the contact |
| Common use | Help desk, info, scheduling | Service follow-ups, reminders, campaigns |
| Phone number | Required (caller dials it) | Required (used as caller ID) |
| Voice config | Same | Same |
| Tools and knowledge | Same | Same |
Place a single call with the API endpoint:
POST /api/applications/:id/voice/outbound-call
{
"phoneNumber": "+15551234567",
"callerIdName": "Acme AV Service",
"maxDurationSeconds": 300,
"metadata": {
"recipientName": "Jane Smith",
"reason": "post-commissioning-followup",
"siteName": "Houston HQ Boardroom 4"
}
}
| Field | Required | Description |
|---|---|---|
phoneNumber |
Yes | E.164 format (+1...). US 10-digit numbers are auto-prefixed. |
callerIdName |
No | Name displayed on caller ID. Defaults to "AI Assistant". |
maxDurationSeconds |
No | Max call length (60 to 3600). Defaults to 600 (10 min). |
metadata |
No | Custom key-value data attached to the call record. |
The response includes a callId, roomName, and sipCallId you can use for tracking.
For multiple recipients, use the batch endpoint:
POST /api/applications/:id/voice/outbound-batch
{
"recipients": [
{ "phoneNumber": "+15551234567", "metadata": { "name": "Jane", "site": "Houston HQ" } },
{ "phoneNumber": "+15559876543", "metadata": { "name": "Mike", "site": "Austin Campus" } }
],
"callerIdName": "Acme AV Service",
"callsPerMinute": 5
}
| Field | Required | Description |
|---|---|---|
recipients |
Yes | Array of phone numbers and optional metadata (max 1,000). |
callsPerMinute |
No | Rate limit for placing calls (1 to 60). Defaults to 5. |
Small batches (10 or fewer recipients) are placed immediately with a short delay between calls. Larger batches create a campaign that processes calls in a managed queue.
For larger outreach, upload a CSV of recipients. Useful for service-window notifications across a corporate refresh, post-install satisfaction calls after a 40-room rollout, or quarterly preventive-maintenance check-ins:
POST /api/applications/:id/voice/outbound-campaign
{
"csvContent": "phone,name,room,service_date\n+15551234567,Jane Smith,Boardroom 4,2026-05-01\n+15559876543,Mike Jones,Training Room 2,2026-05-02",
"callerIdName": "Acme AV Service",
"callsPerMinute": 10
}
CSV format#
Your CSV must include a header row with a phone number column. Accepted column names:
phonephonenumberphone_numbernumber
All other columns are attached as metadata to each call, so the agent has context about who it is calling.
Example CSV:
phone,name,site,room,service_date
+15551234567,Jane Smith,Houston HQ,Boardroom 4,2026-05-01
+15559876543,Mike Jones,Austin Campus,Training Room 2,2026-05-02
Campaign status#
Campaigns track progress through these statuses:
| Status | Meaning |
|---|---|
pending |
Created, not yet started |
running |
Calls are being placed |
paused |
Temporarily stopped |
completed |
All calls finished |
cancelled |
Manually stopped |
Each recipient is independently tracked as pending, queued, calling, completed, failed, or no-answer.
List your campaigns:
GET /api/applications/:id/voice/campaigns?limit=50&offset=0
Phone numbers are normalized to E.164 before dialing:
(555) 123-4567becomes+15551234567(US assumed for 10-digit numbers).1-555-123-4567becomes+15551234567.+44 20 7946 0958stays as-is (international).
Numbers must be between 10 and 15 digits. Invalid numbers are rejected before the call is placed.
| Use case | How it works |
|---|---|
| Post-install follow-up | After a Crestron commissioning, the agent calls the room owner the next week to ask if everything is working as expected. |
| PM scheduling | Quarterly preventive-maintenance reminders. The agent calls the site contact to confirm a window for filter swaps and firmware checks. |
| Service-ticket close-out | After a ticket is marked resolved, the agent calls to verify the room is fully back online. |
| RFP qualification | New inbound RFP leads get a call. The agent asks scope questions (rooms, displays, control system, timeline) and schedules a sales call. |
| Outage notifications | A headend goes down. The agent calls affected room owners with the ETA and workaround. |
System prompt for outbound#
Add outbound-specific instructions to your system prompt:
When making an outbound call:
- Introduce yourself and state the reason for calling immediately.
- If you reach voicemail, leave a brief message with a callback number.
- Be respectful of the recipient's time. Keep calls concise.
- If asked, explain this is an AI-powered call from [Company Name].
Rate limiting#
Start with a low callsPerMinute (3 to 5) and increase gradually. High call volumes may be flagged by carriers.
Metadata for context#
Pass recipient-specific data in the metadata field. The agent can reference it during the call (recipient name, site, room, last service date, control system in place).
Tip: Outbound calling pairs well with Heartbeat for scheduled proactive outreach. Configure Heartbeat to trigger outbound calls on a schedule instead of sending chat messages. Useful for monthly health-check calls across a managed-services portfolio.
Calls not connecting?
- Verify voice mode is enabled and a phone number is assigned.
- Check the recipient's phone number is valid E.164 format.
- Confirm your SIP outbound trunk is configured (contact support if unsure).
Recipient hears nothing?
- Check the voice agent's greeting configuration.
- Verify a voice selection is set (stock or cloned voice).
- Review call records on the Chats page for errors.
Campaign stuck in "pending"?
- Large campaigns are processed asynchronously. Allow time for the queue to start.
- Confirm your plan supports outbound calling.
Note: For inbound call setup, see the Phone Numbers guide. For voice agent configuration, see Voice Agents.
*AVCodex · Your AV expertise. Amplified by AI.*