Read live status, drive a campaign with the action bar, inspect per-attempt history, pull reports, and reference the API integration and read-only config panels.
The campaign detail page is where you run and watch a single campaign. It shows the campaign’s current status, a live feed of what the dialler is doing right now, call-level performance metrics, a paginated list of every contact with its full attempt history, the API integration reference, and a read-only snapshot of the campaign’s settings.Open it by clicking any campaign on the campaign list, or go directly to /dashboard/campaigns/{id}.The page has three areas this guide covers:
Detail / Monitor
The header action bar, live activity, stats, callbacks, and the call list with per-attempt trail.
Integration tab
API reference and copy-paste code for adding contacts (Trigger) and suppressing contacts (Exclude).
Config panel
A read-only, audit-friendly summary of every setting used for the current run.
The coloured badge next to the campaign name tells you what state the campaign is in. The status also decides which action buttons appear.
Status
Badge colour
Meaning
draft
Grey
Created but not dialling. Editable. Can be started, edited, cloned, or deleted.
running
Green
The dialler can pick up pending and retryable contacts. Can be paused, stopped, or have contacts added.
paused
Amber
Dialling is paused. Some in-flight calls may still finish. Can be resumed, edited, or stopped.
completed
Blue
The campaign stopped, or every contact reached a final state. Can be restarted or cloned.
failed
Red
The campaign hit a failure condition. Can be restarted or cloned. Escalate if the cause is unclear.
An Always-on · runs until stopped badge (purple) appears next to the status when the campaign is configured to never auto-complete. These campaigns stay running and accept new contacts over time until you stop them manually. See Always-on campaigns.
The top of the page shows the campaign name, status badge, the short Campaign ID with a copy-to-clipboard button, and a lifecycle grid. Below the name sit the action buttons. Which buttons appear depends on the status — you will never see all of them at once.
Copies the whole campaign (settings, number pool, contacts) into a new campaign and opens that new campaign’s detail page.
Activity (count)
Only if an activity log exists
Opens the Activity Log modal listing every start, pause, resume, and stop action with timestamps and user names.
Attempt Report
Always
Downloads an attempt-level CSV report. See Attempt report.
Restart
completed or failed
Asks you to confirm, then prepares a fresh run and returns the campaign to draft. It does not start dialling. See Restart a campaign.
Cancel Restart
Only when a restart is prepared but not started
Asks you to confirm, then discards the prepared run and restores the previous completed run. See Restart a campaign.
Start
draft
Begins dialling. The campaign moves to running.
Resume
paused
Continues dialling. The campaign moves back to running.
Pause (amber)
running
Stops placing new calls. The campaign moves to paused. In-flight calls may still finish.
Add contacts (CSV)
running
Opens a file picker; the chosen CSV is appended to the live campaign. The file must contain a phone_number column. See Add contacts to a live campaign.
Stop (red)
running or paused
Asks you to confirm, then ends the run and marks the campaign completed. This is irreversible for that run.
Delete (red)
draft, never run, no restart history
Asks you to confirm, then permanently deletes the campaign and its uploaded contacts.
Details tab
Always
Shows the stats, live activity, call list, and config panel. Active by default.
Stop and Delete are destructive. Stop ends the current run permanently — you cannot un-stop it, only restart into a new run. Delete removes the draft campaign and every contact you uploaded to it. Both ask you to confirm first.
The Edit button only shows for draft and paused campaigns. Once a campaign has run for the first time, its name, bot, and uploaded contacts are locked so that old and new attempts stay audit-safe. You can still rotate outbound numbers and adjust dialler settings before pressing Start. If you need a different bot or contact set, use Clone instead.
While a campaign is running or paused, a live activity panel shows what the dialler is doing in real time. It refreshes automatically every few seconds.The panel header changes colour to signal health at a glance:
Indicator
Meaning
Live Activity (green)
The dialler is actively placing calls. A green dot shows when calls are ringing.
Idle — Waiting for retries (amber)
No calls have been dialled recently (about 30 seconds). Usually means everyone callable is waiting on a retry delay.
Paused — Outside time window (orange)
The current time is outside the campaign’s calling window, so the dialler is holding.
The panel shows these live counters:
Counter
What it means
Ringing
Calls currently ringing but not yet answered.
In Progress
Calls connected to the bot right now.
Dials/sec
How many new calls are being placed per second. Shows -- when idle.
Connected/hr
The projected connected-call rate per hour. Shows -- when idle.
Avg Ring Time
Average time calls spend ringing before they are answered or give up.
Last Dial
How long ago the last call was placed (for example 8s ago, 3m ago). Turns orange if it has been more than 30 seconds, which is a hint that dialling has stalled.
Below the counters, a pass breakdown table shows how the campaign has progressed through its dialling passes. The dialler makes a full first pass over every contact before it begins retries, so a pass corresponds to a wave of attempts.
Column
What it shows
Pass #
Which dialling pass this row describes (Pass 1 is the first attempt for every contact).
Attempted / Eligible
How many contacts in that pass have been attempted versus how many were eligible.
Connected %
The share of that pass’s attempts that connected.
Time range
When the pass started and ended (or “still running”).
A pass row is green once it has started and grey before it begins.
If Last Dial is orange and Live Activity reads “Idle”, the campaign is usually just waiting for retry timers, not broken. If it stays idle far longer than your retry delay, check the troubleshooting guide.
A progress bar shows how much of the campaign is done. “Processed” means every contact that has reached a final outcome — completed, failed, abandoned, machine-detected, window-closed, or manually-stopped. For a finished campaign, the bar’s metadata switches to performance figures such as total connected, dials per second, connected per hour, and calls per minute. When the dialler can estimate one, an ETA appears as ~XhYm.
A green metrics strip shows the four numbers you will report on most:
Metric
What it means
Answer Rate %
Share of attempts that were answered.
Completion Rate %
Share of connected calls that completed a conversation.
Abandon Rate %
Share of answered calls abandoned because no worker was free.
AHT (seconds)
Average handle time — the average length of a connected conversation.
When you reconcile billing, always compare these in-console metrics against your carrier’s own call reports. The console counts conversations and outcomes; the carrier counts SIP minutes. They will not always match line-for-line.
When callback detection is enabled for the campaign, a callbacks panel appears with its own counters and a set of filters above the call list.The panel shows: Callbacks requested, Callbacks pending, Callbacks completed, and the average delay before a callback is dialled.The filter buttons restrict the call list to a callback state. The active filter is highlighted.
Filter button
Shows
All calls
Every call, no callback filter.
Callbacks requested
Calls where the customer asked to be called back.
Callbacks pending
Scheduled callbacks still waiting to be dialled.
Callbacks completed
Callbacks that reached a final state.
Callbacks cancelled
Callbacks that were cancelled — for example, a single-day window closed before they were due.
A small blue Callback badge appears next to a call’s status when a callback is scheduled for it. The full lifecycle is covered in Callbacks.
The callbacks panel and its filters only appear when callback detection is switched on in the campaign’s dialler configuration. If you do not see them, the campaign is not detecting callbacks.
The call list is a paginated table — 50 contacts per page — showing every contact and how its calls went.
Column
What it shows
Phone
The contact’s phone number.
Status
A badge showing the contact’s current call state (for example connected, completed, abandoned, excluded). A blue Callback badge sits alongside it when a callback is scheduled.
Attempts
How many attempts have been made out of the maximum, shown as X/max.
Attempt Trail
A compact grid of each attempt — its number, outcome, and time.
Last Result
The most recent outcome for the contact.
Variables
The contact’s metadata (the values uploaded with the contact or sent via the Trigger API).
The attempt detail includes the attempt number, the outcome, the timestamp, the last 8 characters of the attempt ID, and — when the failure is not one of the friendly mapped reasons — the raw SIP error code.
Common SIP reason codes
The dialler maps the most common SIP codes to friendly labels in the attempt trail. A few you will see often:
Code
Friendly meaning
408
No answer — the call rang and timed out.
486
Line busy.
Codes without a friendly label show the raw number. A SIP code is not always a “dead” number — many codes appear only after the call rang for some time, which means the contact simply did not pick up. Treat repeated, instant failures differently from failures that follow a long ring.
Depending on the campaign’s state, you may see one of these inline notices:
Notice
When it appears
What it tells you
Completion reason (blue)
Status is completed
Why the campaign finished — for example “All contacts reached a final state”, “Max retries completed”, “Calling window ended”, “Manually stopped”, or “No callable contacts”.
Manually stopped (yellow)
The campaign was stopped by hand
Who stopped it and when.
Prepared restart (inline)
A restart is prepared but not started
”Run #[N] is prepared, not started” with who restarted it and when, plus a Cancel Restart button. Review the editable settings, then press Start.
Restarting prepares a fresh run on the same campaign so the original and new attempts stay together under one campaign identity. It does not dial automatically — you press Start when you are ready.
1
Click Restart
On a completed or failed campaign, click Restart.
2
Confirm
A confirmation appears:
Prepare this campaign for a new run? This resets call attempts and returns it to draft. It will not start dialling until you press Start.
Confirm to proceed, or cancel to leave the campaign as it is.
3
Review the prepared run
The campaign returns to draft with a higher run number, and the prepared-restart notice appears. You can adjust the outbound number pool and dialler settings (but not the name, bot, or contacts).
4
Start, or cancel
Press Start to begin the new run. If you change your mind, click Cancel Restart — confirm the prompt (“Cancel the prepared Run #[N] and restore the previous completed run?”) and the previous completed run is restored.
For a running campaign, Add contacts (CSV) appends new contacts without interrupting dialling.
1
Click Add contacts (CSV)
A file picker opens.
2
Choose a CSV with a phone_number column
The file must contain a phone_number column, the same as a campaign upload. See Upload leads.
3
Contacts are appended
The new contacts join the live pool and become eligible for dialling.
Adding contacts by CSV is the manual equivalent of the Trigger API. Use the CSV when you have a batch on hand; use the Trigger API when a CRM should add contacts automatically.
The Attempt Report button exports an attempt-level CSV — one row per dial, not one per contact — for audit and client sharing.While the report builds you see Preparing…, then a streaming indicator showing rows and size (for example “Downloading 4,120 rows · 1.8 MB”). When it finishes, a toast confirms the row count. The button is disabled while a download is in progress, so you cannot start two at once.Use the attempt report for:
final campaign reconciliation
spotting SIP status patterns
diagnosing retry behaviour
finding numbers with repeated failures
confirming the dispositions returned by the bot’s post-call analysis
The Activity button (which shows a count) opens the Activity Log modal. It lists every start, pause, resume, and stop action in reverse chronological order — most recent first — with the user who performed each action and when. Close it with the × button in the top-right corner.
The Integration tab gives you API references and copy-paste code for managing a campaign’s contacts programmatically. It has two sections: Trigger (add contacts) and Exclude (suppress contacts).Each section provides code snippet tabs and a copy button:
Control
What it does
curl / Python / Node.js tabs
Switch the displayed code example between the three languages.
Adds one contact to the campaign and dials it (or queues it). Sample numbers are shown in international +91… format.Endpoint:POST /api/v1/campaigns/triggerRequest body
Field
What to send
campaign_id
The campaign to add the contact to.
mobile
The contact’s phone number in international format.
metadata
Key-value pairs that reach the bot prompt as variables.
Optional but recommended. Lets you retry safely without dialling the same contact twice.
Response status values
Value
Meaning
dialled
The contact was added and dialling started.
queued
The contact was accepted and is waiting (for example, until the calling window opens).
Error responses
Code
Meaning
401
Missing or invalid API key.
404
Campaign not found.
409
Conflict — for example, an out-of-hours trigger on a single-day campaign (see warning below).
422
The request body failed validation.
On a single-day campaign, the Integration tab shows a blue notice: triggers received outside the calling window are rejected with a 409, because they cannot survive the window-close sweep. If you need to queue out-of-hours triggers, use a multi-day campaign. See Create a campaign.
Marks contacts so the campaign will not dial them. You target by phone number or by a metadata account key.Endpoint:POST /api/v1/contacts/excludeRequest body
Field
What to send
campaign_id
The campaign to exclude the contact from.
mobile
The contact’s phone number, when excluding by number.
match
A metadata key (or up to two keys) to match on, when excluding by account key instead of number.
reason
An optional note recorded with the exclusion.
You can target by an account key from the contact’s metadata rather than the phone number. You may combine up to two keys; combined matching uses AND logic, so both keys must match for a contact to be excluded. The match keys are the same metadata keys you send with triggers and uploads.The response includes a matched count — how many contact rows the selector affected.Error responses
Code
Meaning
401
Missing or invalid API key.
404
Campaign not found.
422
The request body failed validation.
Whether an excluded contact can be re-added later depends on the campaign’s Sticky exclusion setting. With sticky exclusion on, an excluded contact stays suppressed even if it is re-added by CSV or API. With it off, deliberately re-adding a contact lets it dial again. You can see this setting in the config panel.
On the Details tab, a read-only Campaign Config panel summarises every setting used for the current run. The header shows Run #[N] so you know which run (original or restart) these settings belong to. Nothing here is editable — to change settings, use Edit (on a draft or paused campaign).The panel lays out settings in a two-column grid. Each entry shows a label, the value, and sometimes a small note (a timezone, a preview, or a count).
Setting
What it shows
Bot ID
The bot attached to the campaign.
Concurrency
The maximum number of simultaneous connected calls.
Time Window
The daily calling window, with its timezone as a note.
Working Days
”All days” when all seven are selected, otherwise the day abbreviations (Mon, Tue, …).
Number Pool
”1 outbound number”, “[N] outbound numbers”, or “No outbound numbers configured”. A preview lists the first four numbers, then ”+[N] more”.
Max Attempts
The retry ceiling per contact.
Retry Delay
Minutes between retry attempts.
Retry On System
System outcomes that trigger an automatic redial. “None” when empty.
Retry On Custom
Custom disposition names that trigger a redial. “None” when empty.
Stop Redials After
The “stop after a meaningful connect” threshold. Shown only when that rule is enabled.
Redial Only Under
The “redial after a short connect” threshold. Shown only when that rule is enabled.
Sticky Exclusion
Shown only when sticky exclusion is enabled.
Config URL
Shown only when the campaign uses an externally-managed config.
A details toggle. Expand it to reveal the full setup snapshot for the run — bot ID, number pool, config, config URL, run number, who created it, and the created and started timestamps. Collapse it to hide the block.
The raw setup JSON is the most precise audit record of how a run was configured. Copy it into a ticket when you escalate, so engineering sees the exact settings the run used.