Outbound Calling Setup & Automation Guide

Configure outbound campaigns, lead outreach, automated dialing, follow-ups, and AI-powered calling workflows.

How Campaigns Work

An outbound campaign is a batch of calls that your agent makes automatically. You provide a list of phone numbers (with optional metadata), set the pacing, and the platform handles dialling, retries, and result tracking.

  • Upload a call list with phone numbers and context data
  • Set concurrency limits and pacing rules
  • Agent personalizes each call using the metadata you provide
  • Real-time tracking of call outcomes and progress
  • Automatic retry for failed or unanswered calls

Step 1: Create a Campaign

campaign = client.campaigns.create(
    name="Q1 Renewal Outreach",
    agent_id="agt_sales_bot",
    settings={
        "max_concurrent": 5,
        "calls_per_minute": 10,
        "retry_attempts": 2,
        "retry_delay_min": 30,
        "call_window": {
            "start": "09:00",
            "end": "17:00",
            "timezone": "US/Eastern"
        }
    }
)
print(f"Campaign created: {campaign.id}")

Step 2: Upload Call List

client.campaigns.add_contacts(campaign.id, [
    {
        "phone": "+14155551234",
        "metadata": {
            "name": "John Smith",
            "account_id": "acc_123",
            "renewal_date": "2025-02-15",
            "plan": "Professional"
        }
    },
    {
        "phone": "+14155555678",
        "metadata": {
            "name": "Jane Doe",
            "account_id": "acc_456",
            "renewal_date": "2025-02-20",
            "plan": "Enterprise"
        }
    }
])

# Or upload from CSV
client.campaigns.upload_csv(campaign.id, "contacts.csv")

Step 3: Start the Campaign

client.campaigns.start(campaign.id)

status = client.campaigns.get(campaign.id)
print(f"Progress: {status.completed}/{status.total} calls")
print(f"Status: {status.status}")  # running, paused, completed

Step 4: Monitor Results

results = client.campaigns.results(campaign.id)
print(f"Total: {results.total}")
print(f"Answered: {results.answered}")
print(f"No answer: {results.no_answer}")
print(f"Voicemail: {results.voicemail}")
print(f"Positive outcome: {results.positive_outcomes}")

for call in results.calls:
    print(f"{call.phone} — {call.outcome}: {call.summary}")

Compliance Warning

Ensure your outbound campaigns comply with local regulations (TCPA, GDPR, etc.). Always respect call window restrictions and do-not-call lists.