What Are Campaigns?
Campaigns are production-ready queue management systems for automated outbound calls. They automatically process contact lists, handle retries, respect timezones, and provide real-time monitoring. Replace manual dialing and scale without hiring. Use cases include appointment reminders, post-purchase follow-ups, renewal reminders, and lead qualification for consented contacts.Queue Management
Process thousands of leads efficiently with intelligent queue management and fair-share rate limiting.
Timezone Awareness
Automatically respect local business hours. Never call leads outside their timezone’s acceptable hours.
Smart Retries
Automatically retry busy signals, no-answers, and failed calls with configurable retry logic.
Real-Time Analytics
Monitor connection rates, completion rates, conversions, and more in real-time.
How Campaigns Work
1. Create Campaign
Define the AI configuration (instructions, voice, model), schedule, and target leads. Campaign starts in
draft status.2. Add Contacts
Upload a CSV or add contacts via API. Each contact can have custom variables (e.g.,
{{name}}, {{appointment_date}}, {{order_number}}). Ensure all contacts have proper consent or existing business relationship where required.3. Start Campaign
Change status to
running. The Campaign Producer picks up leads from the queue and dispatches them to the Dispatcher.4. Execution
Calls are made respecting:
- Account rate limits (
max_calls_per_minute) - Campaign parallel call limits
- Timezone restrictions (business hours)
- Retry logic
- Compliance requirements (opt-out handling, frequency limits)
Campaign Statuses
| Status | Description | Actions Available |
|---|---|---|
draft | Configuration phase, no calls made | Edit, Start |
scheduled | Waiting for start time | Edit, Start, Cancel |
running | Actively dispatching calls | Pause, Stop |
paused | Temporarily stopped | Resume, Stop |
completed | All leads processed | View stats, Archive |
cancelled | Permanently stopped | View stats, Archive |
Rate Limiting & Fair Share
Account-Level Rate Limit
Every account has amax_calls_per_minute setting (default: 20). This single limit controls:
- API calls:
POST /v1/callsrequests - Campaign calls: All campaigns share this limit fairly
Campaign Fair Share
If multiple campaigns are running, they share the account limit fairly:- Account limit: 20 calls/minute
- 2 campaigns running
- Each campaign gets: 20 / 2 = 10 calls/minute (fair share)
Campaign Parallel Limits
Each campaign can setmax_parallel_calls (default: 10) to control its own throughput:
Timezone & Business Hours
Never call contacts outside their local business hours. This helps maintain compliance and improves connection rates:Timezone awareness helps prevent compliance issues and improves connection rates. Contacts are only called during their local business hours. Customers are responsible for ensuring compliance with local calling laws (TCPA/TSR/DNC, GDPR).
Retry Logic
Automatically retry failed calls:- Busy: Retry after 5 minutes
- No Answer: Retry after 2 hours (different time of day)
- Failed: Retry after 1 hour (technical issues)
- Voicemail: Optional retry (configurable)
Contact Variables
Personalize each call with contact-specific data:Campaign Analytics
Track key operational metrics in real-time:| Metric | Description |
|---|---|
| Total Contacts | Number of contacts in campaign |
| Calls Completed | Successfully finished calls |
| Calls Pending | Still in queue |
| Calls Failed | Technical failures |
| Connection Rate | % of calls that connected |
| Completion Rate | % that completed successfully |
| Avg Duration | Average call length |
Webhooks
Subscribe to campaign-level events:campaign.started: Campaign began runningcampaign.paused: Campaign was pausedcampaign.resumed: Campaign resumedcampaign.completed: All leads processedcampaign.stopped: Campaign was cancelled
call.completed: Individual call finishedcall.failed: Individual call failed
Best Practices
✅ Do This
- Verify consent: Ensure all contacts have proper consent or existing business relationship where required
- Start small: Test with 10-20 contacts before scaling
- Monitor closely: Watch connection rates and adjust
- Respect timezones: Always configure timezone and business hours
- Set retry limits: Don’t retry indefinitely
- Use variables: Personalize calls with contact data
- Track outcomes: Define clear success criteria
- Honor opt-outs: Immediately remove contacts who request to be removed
❌ Don’t Do This
- Call without consent: Never call contacts who haven’t opted in or don’t have an existing business relationship where required
- Ignore rate limits: Respect account and campaign limits
- Call outside hours: Always use timezone awareness
- Skip testing: Test your instructions on a few calls first
- Over-retry: Set reasonable max attempts
- Forget monitoring: Watch metrics and adjust
- Ignore opt-outs: Always honor do-not-call requests immediately
Example: Lead Qualification Campaign
Compliance: This example is for consented contacts only. Ensure all contacts have opted in or have an existing business relationship. Always honor opt-out requests immediately.

