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 policyretryIntervalMinutes and maxRetryAttemptsPerPhone. 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: phone2phone10, 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:

  1. Pass 1: call every lead on phone1. If that's NO_ANSWER / FAILED / VOICEMAIL / WRONG_NUMBER, move on to phone2 for that lead.
  2. After everyone has been tried once on each phone, wait retryIntervalMinutes before pass 2.
  3. Up to maxRetryAttemptsPerPhone total 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 phone1 populated 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.