How It Works
A campaign connects three things together: an assistant (the AI that talks), a caller ID (the phone number calls come from), and a lead list (who to call).1
Create a campaign
Choose your assistant, caller ID, timezone, and calling window. Configure pacing to control how many calls happen simultaneously.
2
Add leads
Add leads one at a time, or bulk-import via CSV. Each lead needs a phone number and optionally a name, timezone, and custom variables.
3
Start the campaign
The scheduler picks up pending leads and dials them within your configured daily window. You can pause, resume, or stop at any time.
4
Monitor results
Track lead states, call outcomes, and conversion metrics in real time from the Stats tab or via the API.
Campaign Lifecycle
Every campaign follows a status lifecycle. You control transitions through the dashboard or API.Scheduling & Pacing
The campaign scheduler runs continuously and respects two constraints: Daily window — Calls are only placed between the configured start and end times, interpreted in the campaign’s timezone. For example, a window of09:00–17:00 in America/New_York means no calls before 9 AM or after 5 PM Eastern, regardless of your server’s timezone.
Pacing — Two settings control call volume:
- Max concurrent — The maximum number of simultaneous active calls. The scheduler won’t dial a new lead if this limit is reached.
- Min interval — The minimum number of seconds between initiating consecutive calls. Prevents burst-dialing.
If a lead has its own
lead_timezone set, the scheduler checks the daily window against the lead’s local time — not the campaign’s timezone. This lets you respect local calling hours for leads across different regions.Call Flow
When the scheduler dials a lead, the call goes through several stages depending on your configuration:1. Answering Machine Detection (AMD)
1. Answering Machine Detection (AMD)
When
amd_enabled is true, the system listens to the initial pickup to determine whether a human or machine answered.- Human detected → Proceed to the consent step (or connect directly to the AI assistant).
- Machine detected → Either drop a voicemail (if
voicemail_drop_enabledistrue) or hang up immediately.
amd_status (HUMAN or MACHINE) and amd_cause (e.g., LONGGREETING, INITIALSILENCE).2. Consent Gate
2. Consent Gate
When
consent_enabled is true, the system plays an audio prompt (configured via consent_media_uri) and waits for the callee to press a DTMF key to accept.- Key pressed (e.g.,
1) →consent_result: "accepted", call proceeds to the AI assistant. - Any other key or no response →
consent_result: "denied"or"timeout", call is hung up.
3. AI Conversation
3. AI Conversation
Once a human is confirmed and consent is granted (or skipped), the call is connected to your AI assistant. The assistant handles the conversation exactly as it would for an inbound call — using the same system prompt, tools, and voice configuration.Custom variables from the lead’s
custom_vars field are available to the assistant during the call, enabling personalized conversations.Lead States
Each lead moves through states as the campaign processes it:Lead Actions
- Cancel — Prevents a
pendingorleasedlead from being dialed. The lead and its history are preserved. - Recycle — Resets a
completed,failed, orcanceledlead back topendingso it will be dialed again. Optionally resets the attempt counter. - Delete — Permanently removes a lead and all its attempt records.
Importing Leads via CSV
You can bulk-import leads using a CSV file. The file should have a header row with at least aphone_number column. Optional columns include name and lead_timezone. Any additional columns are automatically stored in the lead’s custom_vars.
Monitoring & Stats
The Stats view provides real-time visibility into campaign performance:- Conversion funnel — Tracks leads from total → dialed → answered → completed, with conversion rates at each stage.
- Call duration metrics — Average, shortest, longest, and total talk time across all calls.
- Lead state breakdown — How many leads are in each state.
- Attempt outcome breakdown — Distribution of call outcomes (answered, no answer, busy, voicemail dropped, etc.).
Best Practices
Start small
Test with 5–10 leads before scaling up. Verify your assistant handles the conversation well and AMD is working correctly for your caller ID.
Respect calling hours
Set your daily window to match local business hours. Use
lead_timezone for multi-region campaigns to avoid calling at inappropriate times.Tune your pacing
Start with
max_concurrent: 3 and increase gradually. High concurrency with a short interval can overwhelm your telephony infrastructure.Use voicemail drop
Enable
voicemail_drop_enabled with a well-crafted message. It turns machine-detected calls from wasted attempts into touchpoints.