Campaigns
Point an agent at a contact list and dial at scale - every setting explained in plain language.
A campaign is an outbound calling job. You take one of your published agents, hand it a list of people to call, tell it which number to dial from and when it’s allowed to dial, and press go. The platform then works through your list on its own - dialing, retrying the ones who didn’t pick up, personalizing every call from your data, and stopping the moment the list is done or you pause it.
Think of a campaign as the job, and the agent as the worker. The same agent can run in ten different campaigns against ten different lists; the campaign is just “this agent, this list, these rules, this schedule.” Because it points at a published agent, the agent’s compliance pack rides along automatically - calling-time windows, Do-Not-Disturb scrubbing, frequency caps - and the platform checks all of it before a single number is dialed. You dial at scale without ever having to remember the rules yourself.
The builder is a short 2-step wizard: Calling list → Schedule & number. We’ll walk through every field, what it does, and how to fill it in.
Before you start: you need two things ready - a published agent (a draft won’t run) and at least one phone number on your account to use as caller ID. If you have no number yet, the wizard shows a banner with a Buy a number button. See Phone numbers.
Step 1 - Calling list
This step answers who calls, who gets called, and with what information. It’s three cards.
Campaign name
A label for you and your team - the person you call never sees it. It’s how you’ll find this campaign in your list later, and it’s what shows up in the emailed run summary.
- Tip: name it after the run, not the agent - “October EMI reminders”, “Diwali offer - Bangalore list”. You’ll thank yourself when you have twenty campaigns pointing at the same three agents.
Choose an agent
The published agent that will actually do the talking. Only agents with a published status show up here - a draft can’t run a campaign, so if you don’t see the one you want, go publish it first.
- Each agent in the picker shows its language and compliance policy, so you can tell two similar agents apart at a glance. There’s a search box if your list is long.
- Picking an agent does one more important thing: it pre-fills the variable-mapping rows in the next card from the
{variables}that agent uses. So choose your agent before you wrestle with the CSV columns. - There’s also a “No agent, safe default” option, which runs calls through the default compliance pipeline without a specific persona. In almost every case you want a real, published agent here.
Why published-only? A campaign is live phone calls to real people. Requiring a published agent means the thing you tested is exactly the thing that dials - no half-finished draft slips onto the phone.
Contact list (the CSV)
This is where you upload who to call. Hit Upload contact list and pick a .csv file. The platform reads the header row instantly and shows you the columns it found.
The one hard rule: your CSV needs a column with the phone number. Everything else is optional - but every extra column is a chance to personalize the call.
Once a file is attached, a Calling list settings panel opens up so you can tell the platform what each column means:
- Country code - used to normalize and validate the phone numbers (defaults to IN / India). This is how a locally-written
98765…becomes a dialable number. - Phone column - which CSV column holds the number to dial. The platform auto-guesses it from the header name (anything like phone, mobile, number), but confirm it. This one is required.
- Name column - which column holds the person’s name (optional). Auto-guessed from a name header.
- Map agent variables to CSV columns - the important part. If your agent’s script uses placeholders like
{name},{amount}, or{due_date}, each one shows up here as a row:amount → [pick a column]. You point each variable at the CSV column that fills it.
This is the make-or-break rule for personalization. Your CSV columns must cover every
{variable}your agent uses. The panel tells you live: green “All variables mapped - the agent gets every value on the call,” or red “Map a column for every variable - missing: …”. If a variable has no column behind it, the agent has no value to say - so map every one. (If your agent uses no variables, this section just says so and you can move on.)
Two switches finish the panel:
- Remove invalid records (on by default) - drops rows whose phone number can’t be dialed (garbled, wrong length) instead of keeping them around flagged. Leave it on for a clean run.
- Transliterate callee names to the agent’s language (off by default) - converts names into the agent’s script so it pronounces them correctly. Turn this on when your list is in one script (say, Latin) but your agent speaks another (say, Hindi), so “Priya” is said the way a Hindi speaker would say it.
When it all looks right, press Process calling list. The platform validates every row server-side and shows you the result: “N contacts ready,” how many invalid rows were removed, and a preview table so you can eyeball that the columns landed where you expected. Something off? Hit Re-map and adjust.
Not sure how the CSV should look? Use Download sample CSV - it generates a template with exactly one column per variable your chosen agent needs, so you can fill it in and re-upload.
Once the list is processed, Continue → takes you to step 2.
Step 2 - Schedule & number
Step 1 was who and what. This step is from where, and when. Four cards.
Call from number (caller ID)
The number your contacts see on their phone when it rings - your caller ID. Pick one of the numbers on your account. For India, it must be a DLT-registered number, which is handled when you buy or link the number.
- Only active numbers you own appear here. If the list is empty, buy or link one first - see Phone numbers.
- A campaign dials from one caller ID. There’s no rotation or pooling - pick the number that makes the most sense for this audience (a local number often gets picked up more than an unfamiliar one).
- You can save the campaign as a draft without a caller ID, but you can’t activate it until one is set.
Schedule
When the dialer is allowed to run. This is your schedule, layered on top of whatever the compliance pack already enforces.
- Timezone - the timezone your daily window is read in (defaults to Asia/Kolkata). Get this right or “9am” means the wrong thing.
- Start date & time / End date & time - the outer bounds. The campaign won’t dial before the start or after the end. Leave the start in the future and you’ve effectively scheduled the campaign for later - publish it now, and it simply waits, checking every minute, until its window opens.
- From (daily) / To (daily) - the daily calling window, e.g. 09:00 to 21:00. Every day inside the start/end range, the dialer only works between these two times. It even handles overnight windows correctly if you ever need one.
Two windows, both enforced. Your campaign schedule is layered on top of the agent’s compliance-pack calling window (for example, telemarketing packs cap dialing to 9am–9pm). The platform obeys whichever is stricter. You can narrow the window with your schedule; you can’t use it to dial outside what the compliance pack allows. A contact that falls outside the window isn’t dropped - it’s simply held back and tried again once the window reopens, and it never burns a retry for waiting.
Pacing and retries
What happens to a number that doesn’t answer the first time.
- Retry count - how many extra attempts to make after the first one (range 0–10, wizard default 1). A retry count of 1 means the platform tries a contact up to twice in total. Set it to 0 and each contact is called exactly once.
- Cooldown period (minutes) - how long to wait before re-attempting a contact who didn’t connect (default 30 minutes, up to 1440 / one day). This spacing keeps you from ringing the same person back-to-back - annoying to them, and against most compliance packs.
What actually gets retried? Only the “try again later” outcomes - busy, no-answer, declined. Dead numbers (disconnected, doesn’t exist) are marked failed and never redialed, because retrying them is pointless. And anyone on a Do-Not-Disturb or opt-out list is failed permanently on the first check - never called, never retried. That’s the compliance pack doing its job automatically.
Note on pacing: how fast the campaign dials (how many calls run in parallel, and the platform-wide concurrency limits) is managed by the platform, not something you set per campaign. You control how often an individual contact is tried (retries + cooldown) and when dialing may happen (the window) - the platform handles throughput safely underneath.
Notifications
- Email notifications to - a comma-separated list of people who should hear about the run (e.g.
[email protected], [email protected]). They’ll get the run summary, including the note when the campaign completes. Optional, but handy so someone knows when a run finishes without watching the screen.
When everything’s set, you have three buttons:
- Save as draft - keeps everything, dials nothing. Come back and activate later.
- Create & activate - publishes the campaign live. It’ll start dialing at its next scheduled window. (This is blocked until you’ve set a caller ID and the list has at least one valid contact - the wizard tells you exactly what’s missing.)
Watching a run
Open a campaign to see its command center. There’s no “faster, refresh me” needed - the view reflects the run as batches complete.
The health strip
Across the top:
- Progress - “N of M dialled” with a percentage and a bar that splits connected (green) from no-answer (amber). This is your at-a-glance “how far along are we.”
- Splits - Connected, No answer, your win outcome, and Remaining.
- Connect rate, Avg call length, and Cost per outcome - the numbers that tell you whether the run is working, not just running. (The connect-rate card even notes the ~40% industry average so you have something to compare against.)
- Conversion funnel - Contacted → Advancing → your win metric, so you can see where people drop off.
The tabs
- Calls - every dial that’s landed, with contact, outcome, duration, cost, when, and a transcript link. This fills in as the run works - it’s the closest thing to a live feed of the campaign.
- Contacts - your calling list with each contact’s dial status (pending → placed → reached → failed), how many attempts it’s had, and when it was last tried.
- Runs - each batch the dialer has kicked off, with how many it attempted, placed, and rejected, plus a reason note if a batch dialed nothing.
- Settings - edit the same fields from the wizard’s step 2 inline (name, agent, caller ID, schedule, retries, notifications) without starting over.
- Plus Board, Automations, and Insights for deeper follow-up work.
If a batch dials nothing, it tells you why. You’ll see a plain-language reason chip - “Outside the campaign’s calling window,” “No caller ID - edit the campaign and pick a number,” “Wallet is empty - top up to resume,” “At the concurrent-call limit - remaining contacts stay queued,” “Complete KYB verification to start dialing.” No silent failures - if calls aren’t going out, the reason is right there.
Pausing, resuming, and finishing
- Pause run / Resume run - the button in the header (also on each row in the campaign list). Pausing stops dialing promptly - within the current small batch, not after the whole list - and everyone not yet reached stays queued. Resume picks up exactly where it left off. Use this any time: to fix the script, wait out a bad hour, or top up your wallet.
- Run now - kicks off a dialing batch immediately (within the allowed window) instead of waiting for the next scheduled tick. Useful for a quick test or to nudge a run along.
- Auto-complete - you don’t have to babysit the finish line. When there are no dialable contacts left - everyone’s been reached, failed permanently, or hit their retry cap - the campaign marks itself completed on its own, stops dialing, and (if you set notification emails) sends a summary. A completed campaign just sits there as a record; it won’t surprise you with more calls.
Crash-safe by design: if something goes wrong mid-run, a campaign never gets “stuck” dialing forever or double-dials a contact. A short internal lease means a stalled run is automatically cleaned up and can be picked back up - you don’t have to think about it.
After the run
Every call’s transcript, disposition, and captured fields live in Analytics, where you can filter, listen back, and export. Wire up integrations and outcomes push automatically to your CRM or a webhook. Anyone who opted out is recorded and will never be dialed again - by this campaign or any future one.
Next: Phone numbers → - buy, link, and manage the numbers you dial from and answer on.