Campaigns
Campaigns make outbound calls at scale. You upload a list of leads, pick a voice agent, set the schedule and retry policy, then start — the system dials each lead, has the AI conversation, captures the disposition, and moves on.
Creating a campaign
Dashboard → Campaigns → Create Campaign.
Fields:
- Name — internal.
- Voice agent — the AI that will talk on each call.
- From number — which phone number to dial from (must be voice-capable and owned by you).
- TCPA calling hours — start / end time in the recipient's timezone. Defaults to 9 AM - 8 PM. Calls outside the window are auto-rescheduled.
- Retry policy —
retryIntervalMinutesandmaxRetryAttemptsPerPhone. See Retry behaviour below. - Voicemail action — hang up (no message) or play a message.
Uploading leads — the CSV format
Required columns: name, phone1.
Optional structured columns: phone2 … phone10, email.
Every other column becomes a variable the agent can reference as
{{COLUMN_NAME}} in its greeting or system prompt.
Example CSV:
name,phone1,phone2,email,amount,address,case_number
Alex Chen,+14155551200,,alex@acme.io,5000,123 Market St,CASE-7741
Jamie Lee,+12025550133,+12025550144,jamie@…,12000,…,CASE-7742
Header normalization: columns are uppercased and non-alphanumerics become
underscores. case number → {{CASE_NUMBER}}. Tax-ID → {{TAX_ID}}.
Use the Download template button on the campaign page for a starter CSV that already has good column names.
Using variables in the agent
In the agent's Greeting or System Prompt, reference variables with
{{TOKEN}}. Always available: {{NAME}}, {{EMAIL}}. Anything in the CSV
becomes a token too.
Greeting example:
Hi {{NAME}}, this is Zara from Acme. I'm calling about case {{CASE_NUMBER}}
where you have a balance of ${{AMOUNT}}. Do you have a minute?
Missing values fall back gracefully — {{NAME}} defaults to there and
others default to empty string, so a partial CSV won't produce sentences
like "Hi , this is…"
Retry behaviour
Calls don't always reach a human. The dialer cycles through phone numbers breadth-first:
- Pass 1: call every lead on
phone1. If that's NO_ANSWER / FAILED / VOICEMAIL / WRONG_NUMBER, move on tophone2for that lead. - After everyone has been tried once on each phone, wait
retryIntervalMinutesbefore pass 2. - Up to
maxRetryAttemptsPerPhonetotal passes.
Short COMPLETED calls (≤1 conversation turn) are treated as NO_ANSWER for retry purposes — a 3-second pickup-then-hangup doesn't count as a successful reach.
Starting, pausing, restarting
- Start — dispatches the first batch of calls immediately.
- Pause — finishes calls already in progress; doesn't dispatch new ones.
- Resume — picks up where Pause left off.
- Restart — resets every lead back to PENDING and zeroes the counters. Use this if you fixed an issue (wrong agent, bad prompt) and want to re-run the whole list.
Watching results
Open the campaign detail page:
- KPI cards — calls made, reached, interested, opt-out.
- Lead table — each row shows status, last disposition, current phone being tried, retry pass.
- Cost section — daily call minutes × your tier rate, with a 30-day trend.
- Webhooks — if you subscribed to
campaign.lead.updated, your endpoint receives a payload every time a lead's status changes. See Webhooks.
Disposition outcomes
The AI labels each call with one of:
- INTERESTED — caller engaged, qualified.
- NOT_INTERESTED — explicit decline.
- CALLBACK — caller asked to be called later; appointment created.
- VOICEMAIL — hit a voicemail system, hung up.
- WRONG_NUMBER — caller said wrong number.
- NO_ANSWER — nobody picked up / silence.
- OPT_OUT — caller asked to be removed.
- COMPLETED — generic happy outcome that didn't fit above.
Opted-out numbers are stored per-org and won't be dialled by future campaigns.
Common stumbles
- "Phone number limit reached." Free trial + Traveller plans cap campaigns indirectly via the available phone numbers. Upgrade or use PAYG.
- All calls hit voicemail. Outbound greeting fires when the AI detects a real person; check the recipient timezone vs your TCPA window — they may all be asleep.
- Campaign keeps redialing one lead. Check the lead has at least
phone1populated and that the number is in E.164 format (+1XXXXXXXXXX, no spaces or dashes). - "Can't delete this voice agent." The agent is still attached to this campaign. Reassign the campaign's agent or delete the campaign first.