Voice & Phone

Outbound Calling

Initiate AI-powered outbound phone calls to reach customers proactively, one at a time or in batch campaigns.

|View as Markdown
Hunter Hodnett
Hunter HodnettCPTO at Chipp
||1 min read
#voice#phone#outbound#campaigns#telephony

Outbound calling lets your voice agent place calls to phone numbers instead of waiting for inbound calls. Your AI dials the number, the recipient picks up, and a natural voice conversation begins — powered by the same system prompt, knowledge base, and tools as your inbound voice agent.

⚠️

Outbound calling requires a Builder plan or higher with voice agents enabled. You also need a phone number assigned to your app.

How It Works

Outbound calls use SIP (Session Initiation Protocol) through LiveKit to place real phone calls. When you trigger an outbound call:

  1. Chipp creates a voice room and dials the recipient via your SIP trunk
  2. The recipient’s phone rings with your configured caller ID
  3. When they answer, your voice agent joins the call and begins the conversation
  4. The agent uses the same voice, greeting, system prompt, and tools as inbound calls
  5. The call is recorded as a chat session you can review in Insights → Conversations

Each call has a configurable maximum duration (default 10 minutes, up to 60 minutes).

Inbound vs. Outbound

InboundOutbound
Who initiatesThe user calls your numberYour AI calls the user
Use caseSupport, information, bookingFollow-ups, reminders, campaigns
Phone numberRequired (user dials it)Required (used as caller ID)
Voice configSameSame
Tools & knowledgeSameSame

Placing Calls from the Builder

Go to Experience → Phone and open the Outbound Calls section:

  • Make a Test Call: dial a single number to test your voice agent
  • Create Campaign: batch call a list of recipients via CSV or manual entry

The same section lists your campaigns and their progress. The endpoints below are what the builder uses under the hood.

Single Outbound Call

To place a single outbound call, use the endpoint:

plaintext
POST /api/applications/:id/voice/outbound-call
json
{
  "phoneNumber": "+15551234567",
  "callerIdName": "Acme Support",
  "maxDurationSeconds": 300,
  "metadata": {
    "recipientName": "Jane Smith",
    "reason": "appointment-reminder"
  }
}
FieldRequiredDescription
phoneNumberYesE.164 format (+1...). US 10-digit numbers are auto-prefixed.
callerIdNameNoName displayed on caller ID. Defaults to “AI Assistant”.
maxDurationSecondsNoMax call length (60—3600). Defaults to 600 (10 min).
metadataNoCustom key-value data attached to the call record.

The response includes a callId, roomName, chatSessionId, and sipCallId you can use for tracking.

Batch Calling

For calling multiple recipients, use the batch endpoint:

plaintext
POST /api/applications/:id/voice/outbound-batch
json
{
  "recipients": [
    { "phoneNumber": "+15551234567", "metadata": { "name": "Jane" } },
    { "phoneNumber": "+15559876543", "metadata": { "name": "Mike" } }
  ],
  "callerIdName": "Acme Reminders",
  "callsPerMinute": 5
}
FieldRequiredDescription
recipientsYesArray of phone numbers + optional metadata (max 1,000).
callerIdNameNoName displayed on caller ID. Defaults to “AI Assistant”.
maxDurationSecondsNoMax length of each call (60—3600). Defaults to 600 (10 min).
callsPerMinuteNoRate limit for placing calls (1—60). Defaults to 5.

Small batches (10 or fewer recipients) are placed immediately with a short delay between each call. Larger batches create a campaign that processes calls in a managed queue.

Campaigns (CSV Upload)

For large-scale outreach, upload a CSV file of recipients:

plaintext
POST /api/applications/:id/voice/outbound-campaign
json
{
  "csvContent": "phone,name,appointment_date\n+15551234567,Jane Smith,2026-04-01\n+15559876543,Mike Jones,2026-04-02",
  "callerIdName": "Acme Scheduling",
  "callsPerMinute": 10
}

CSV Format

Your CSV must include a header row with a phone number column. Accepted column names:

  • phone
  • phonenumber
  • phone_number
  • number

All other columns are attached as metadata to each call, so the AI has context about who it is calling.

Example CSV:

csv
phone,name,appointment_date,location
+15551234567,Jane Smith,2026-04-01,Downtown Office
+15559876543,Mike Jones,2026-04-02,Midtown Clinic

Campaign Status

Campaigns track progress through these statuses:

StatusMeaning
pendingCreated, not yet started
runningCalls are being placed
pausedTemporarily stopped
completedAll calls finished
cancelledManually stopped

Each recipient is independently tracked as pending, queued, calling, completed, failed, or no-answer.

List your campaigns:

plaintext
GET /api/applications/:id/voice/campaigns?limit=50&offset=0

Phone Number Format

Phone numbers are normalized to E.164 format before dialing. Numbers without a country code use the country of your app’s phone number (US if none):

  • (555) 123-4567 becomes +15551234567 (for a US number)
  • 1-555-123-4567 becomes +15551234567
  • +44 20 7946 0958 stays as-is (international)

Numbers must be between 10 and 15 digits. Invalid numbers are rejected before the call is placed.

Use Cases

Use CaseHow It Works
Appointment remindersUpload a CSV of patients with dates. The AI calls each one to confirm or reschedule.
Follow-up callsAfter a support ticket, the AI calls to check if the issue was resolved.
Lead qualificationThe AI calls inbound leads to ask qualifying questions and schedule demos.
Payment remindersFriendly automated calls about upcoming or past-due invoices.
Survey collectionThe AI calls customers, asks survey questions, and records responses.

Best Practices

System Prompt for Outbound

Add outbound-specific instructions to your system prompt:

plaintext
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 that this is an AI-powered call from [Company Name]

Rate Limiting

Start with a low callsPerMinute (3—5) and increase gradually. High call volumes may be flagged by carriers.

Metadata for Context

Pass recipient-specific data in the metadata field. The AI can reference this context during the conversation — for example, the recipient’s name, appointment date, or account status.

💡

For scheduled proactive outreach over chat channels (email, SMS, WhatsApp, Slack, and more), see Heartbeat. Heartbeat does not place phone calls.

Troubleshooting

Calls not connecting?

  • Verify voice mode is enabled and a phone number is assigned
  • Check that the recipient’s phone number is valid E.164 format
  • Ensure your SIP outbound trunk is configured (contact support if unsure)

Recipient hears nothing?

  • Check your voice agent’s greeting configuration
  • Verify the voice selection is set (stock or cloned voice)
  • Review call records in Insights → Conversations for errors

Campaign stuck in “pending”?

  • Large campaigns are processed asynchronously — allow time for the queue to start
  • Check that your plan supports outbound calling
ℹ️

For inbound call setup, see the Phone Numbers guide. For voice agent configuration, see Voice Agents.