CX Outbound Campaigns¶
Outbound campaigns dial leads from a list and connect answered calls to agents on a bound queue. Use Preview when agents should review lead details before accepting, Progressive when the dialer connects the customer first and bridges to an agent when one is available, or Predictive when the dialer paces multiple outbound lines ahead of free agents to raise occupancy while holding a target abandon rate.
Campaigns share the bound queue’s agent hunt strategy, login/logout, wrap-up, skills routing, and disposition rules. Inbound queue calls always take priority — the dialer runs only when no customers are waiting in the bound queue and agents are available.
Architecture¶
flowchart LR
A[Leads CSV or CRM API] --> B[Campaign]
B --> C[Dialer]
C --> D[Lead phone]
D --> E{Answered?}
E -->|Preview| F[Agent preview UI]
F --> G[Agent accepts]
E -->|Progressive or Predictive| H[Customer connected]
H --> I[Queue bridges agent]
G --> J[Bound queue]
I --> J
| Component | Role |
|---|---|
| Campaign | Stores dial settings, schedule, caller ID, and lead source configuration in the Portal. |
| Leads | Per-number records with priority, retry/cool-off counters, and CRM metadata. |
| Dialer | QVOICE Platform queues service selects leads, places outbound calls, and respects campaign schedule and timezone windows. |
| Bound queue | Agents who handle connected campaign calls; queue strategy and member list apply. |
| Agent desktop (UCP) | Shows lead name, number, ticket ID, and campaign context on preview or connect. See User Guide. |
Campaign types¶
| Type | Customer experience | Agent experience |
|---|---|---|
| Preview | Phone rings; on answer the call is held until an agent accepts. | Lead card appears first; agent reviews details and clicks to connect. |
| Progressive | Phone rings; on answer the customer is connected immediately. | Agent is rung after the customer answers; optional greeting plays if agent SLA is exceeded. |
| Predictive | Same connect path as Progressive after answer. | Same agent hunt after answer; the dialer places extra outbound lines timed to free agents so occupancy stays high under an abandon-rate goal. |
Progressive-only options¶
When Type is Progressive or Predictive, additional SLA fields appear:
| Option | Description |
|---|---|
| Customer wait for Agent SLA (s) | Seconds the customer may wait in silence for an agent to answer before optional greeting audio plays. Default 3. |
| Greeting post Lead wait SLA | Media file played to the customer when agent SLA is exceeded (optional). Without it, the customer waits in silence until Agent Dial Timeout. |
| Agent Dial Timeout (s) | Maximum seconds to ring agents for this lead. If no agent answers, the customer is transferred into the campaign queue with hold music. For Predictive, a typical starting value is 15. |
Predictive dialing¶
Predictive campaigns keep agents busy by dialing ahead of free capacity: the system estimates how many agents will be free when leads answer, admits unbridged outbound lines accordingly, and slows or stops overdial when measured abandon approaches the campaign goal (for example 3%).
Use Predictive when you have enough logged-in agents for stable pacing (often 15+ recommended) and want higher occupancy than one-at-a-time Progressive dialing. Prefer Progressive or Preview for small teams, highly regulated lists that must stay 1:1, or when agents must review every lead before connect.
What Predictive does¶
| Behavior | Description |
|---|---|
| Goal-driven pacing | Max abandon rate is a setpoint. Under goal, the dialer may raise its dial level; near goal it tapers; only panic collapses to true 1:1. |
| Warm start | Cold campaigns dial conservatively (near 1:1 in answer units) until enough live answers and handle-time samples exist. An empty answer-rate window uses a 1.0 prior (true 1:1), not a fictional low answer rate. |
| Free-agent forecast | Estimates how many agents will free within the answer horizon (linear, exponential, or empirical talk-time model), then applies hit/miss forecast bias when enabled (on by default). |
| Line sizing | Converts free-agent capacity into a target count of unbridged lines (mean, tail default, or rate-based). |
| Burst capacity latch | Every placed dial opens or joins a burst cohort that freezes expected agent demand until those legs drain or the burst TTL expires — so mid-burst idle refill cannot strand agents or double-authorize. |
| Idle floor | When fill is done, the dialer still climbs toward enough lines to keep idle agents busy (including an AR-aware floor when answer rate is low), without ignoring abandon brakes. |
| Abandon treatment | If a live answer cannot be bridged in time: play safe harbor media then disconnect, or hang up immediately. |
| Inbound still wins | Same as other campaign types — waiting inbound queue customers pause outbound dialing. |
An abandon for pacing is a live-answered lead that never reaches an agent (true abandon), or — if you select the compliance definition — also bridges that exceed Customer abandon wait. Both rates can be reported; only the selected definition drives brakes.
Modes (what operators see)¶
| Mode | When | Behavior |
|---|---|---|
| Warm-up | Cold samples / below min agents for predictive | Conservative admit; trusted answer rate converts to 1:1 in answer units. |
| Predictive | Warm and under the soft abandon band | Forecast E_free, size lines, adapt dial level upward when safe. |
| Taper | Soft band, or latched hard band | Dial level steps down; hard band keeps predictive answer-unit sizing and continues updating forecast bias (it does not pin the target to idle). Dial level cannot step up while hard-latched. |
| Panic 1:1 | Abandon ≥ goal × panic ratio (sticky) | Target pins to idle agents; placement still capped per tick; cohort claim is true 1:1 until recover hysteresis clears. |
Hard band is a brake, not panic
Hard-band taper is meant to back off overdial while hit/miss bias corrects the forecast. Only panic forces line 1:1. If abandon sits just under the panic trip while mode stays panic, that is sticky hysteresis working — not a stale reading.
How the algorithm works¶
At each pacing tick the dialer roughly:
- Measures logged-in / idle agents, unbridged outbound lines (bridged talks do not block refill), answer rate, average handle time, and governing abandon rate in a sliding window.
- Chooses a mode — warm-up, predictive, taper (soft or hard), or panic 1:1 when abandon is severely over goal (panic is evaluated first).
- Forecasts free agents at the expected answer time (
E_free), corrected by hit/miss forecast bias when enabled (bias stays live in hard-band taper; frozen in warm-up / panic). - Sizes lines from that capacity and answer rate, applies the idle floor when needed, then caps (max calls per agent, max dials per tick, optional CPS, target step-up slew).
- Adapts dial level on a wall-clock interval (not every tick): step up when safely under goal, step down when abandon rises (no headroom-up while hard-latched).
- Places or denies the next lead dial inside a burst cohort (AR-scaled claim for predictive/taper; 1:1 claim for panic / strict warm-up); telephony after answer reuses the Progressive connect path (immediate idle agent or queue hunt, greeting SLA, safe harbor).
flowchart TD
Tick[Pacing tick] --> Measure[Measure agents AR AHT abandon]
Measure --> Mode{Mode}
Mode -->|Cold samples| Warm[Warm-up near 1:1 answers]
Mode -->|Under soft band| Pred[Forecast E_free and size lines]
Mode -->|Soft or hard band| Taper[Taper dial level keep answer units]
Mode -->|Far over goal| Panic[Panic 1:1]
Warm --> Admit[Admit via burst cohort]
Pred --> Admit
Taper --> Admit
Panic --> Admit
Admit --> Lead[Place outbound lead]
Lead --> Answer{Live answer?}
Answer -->|Yes| Bridge[Immediate agent or hunt / safe harbor]
Answer -->|No| Clear[Release cohort claim]
Configure Predictive in the Portal¶
- Set campaign Type to Predictive.
- Complete Progressive SLA fields as needed (greeting, customer wait, agent dial timeout).
- Open the Predictive Configuration section (same collapsible style as General Configuration).
- Set Core knobs for abandon goal, pacing profile, and treatment.
- Optionally click Predictive Advanced for windows, brakes, estimators, and forecast bias (button becomes Hide Predictive Advanced while open). Labels turn bold when a value differs from the product default. Some planned fields are read-only until the dialer wires them.
Core fields¶
| Field | Default | Why it exists | How it is used |
|---|---|---|---|
| Max abandon rate (%) | 3 |
Regulatory / business abandon goal. | Saved as a fraction (0.03). Measured abandon is compared to this goal to raise or lower dial level and to open soft, hard, and panic bands. |
| Customer abandon wait (s) | 5 |
How long a live answer may wait for an agent. | Late bridges beyond this count toward compliance abandon when that definition is selected. |
| Abandon rate definition | True abandon | Which abandon rate governs pacing. | True abandon = answered, never bridged. Compliance abandon = true abandon plus bridges slower than customer abandon wait. |
| Pacing profile | Balanced | How hard to chase occupancy vs headroom. | Fills brake ratios and dial-level steps: Compliance first (conservative), Balanced, Occupancy first (aggressive). Explicit Advanced keys override the profile. The abandon goal itself is never changed by a profile. |
| Max calls per agent | 2 |
Overdial ceiling while under goal. | Caps concurrent attempts per logged-in agent and feeds the unbridged line ceiling. |
| No-answer timeout (s) | 30 |
How long a lead may ring. | Releases capacity on no-answer; also bases default burst-claim TTL. |
| Min agents to dial | 1 |
Do not dial into an empty pool. | Blocks new predictive dials below this logged-in count. |
| Abandon treatment | Safe harbor | Customer experience when bridge fails. | Safe harbor plays media then disconnects; Hangup clears immediately. |
| Safe harbor media | — | Audio for safe-harbor treatment. | Played before kick when treatment is Safe harbor. Length is detected from the media file automatically. |
Advanced fields¶
Open Predictive Advanced for tuning. Prefer Core + a pacing profile unless lab or production metrics show a clear need.
Measurement and warm-up
| Field | Default | Why / how used |
|---|---|---|
| Answer rate window dials / (s) | 100 / 900 |
Sliding window for answer-rate (AAR). Whichever bound fills first. AAR scales line targets and per-tick dial caps. Shorter windows react faster; longer windows are smoother. |
| AHT window calls | 50 |
Recent bridged calls for average handle time used by the free-agent forecast. |
| Warmup live answers | 8 |
Live answers required before leaving conservative warm-up. |
| Warmup exit ratio | 0.6 |
Sticky warm-up exit so the campaign does not flap in and out of warm-up and re-lock dial level at 1:1. |
| Min AHT / answer samples | 5 / 10 |
Minimum samples before AHT or AAR is trusted for aggressive pacing. |
Admit rate and dial level
| Field | Default | Why / how used |
|---|---|---|
| Max dials per tick | 2 |
Hard cap on new dials per tick at AAR 1.0 (scaled by 1/AAR at lower answer rates). |
| Max CPS | empty | Optional calls-per-second limit; empty = no CPS clamp. |
| Burst claim TTL (s) | empty | Max age of a frozen burst capacity claim; empty → no-answer timeout + 15s. Predictive/taper claims scale with answer rate; panic / strict warm-up claim 1:1. |
| Adapt interval (s) | 15 |
Seconds between dial-level step up/down adjustments. |
| Min dial level | 1 |
Floor on the overdial multiplier and idle-floor behavior (1 = keep agents busy; values below 1 allow under-dial). |
| Dial level step up / down | 0.1 / 0.2 |
How fast dial level rises under goal or falls when abandon rises (asymmetric by design). Hard-band latch blocks step-up. |
| Max target step up | 2 |
Limits how fast the unbridged line target may grow in one admit tick (reductions are never slewed). |
Abandon brakes and panic
| Field | Default | Why / how used |
|---|---|---|
| Abandon soft / hard / recover ratios | 0.7 / 0.8 / 0.9 |
Soft opens taper early; hard latches stronger taper with hysteresis. Hard band does not force 1:1 — see Modes. |
| Panic abandon / recover ratios | 2 / 0.75 |
Enter 1:1 panic at goal × panic ratio (e.g. 6% on a 3% goal); sticky until recover ratio clears. |
| Abandon min samples | 20 |
Hard/panic entry ignores tiny denominators that would look like 100% abandon; exit is never blocked by the sample floor. |
Free capacity and line sizing
| Field | Default | Why / how used |
|---|---|---|
| Free estimator | Linear | linear, exponential, or empirical model of agents freeing within the answer horizon. |
| Line sizing | Tail | mean, tail, or rate conversion from free agents to unbridged line targets. |
| Line sizing alpha | 0.12 |
Overshoot budget for tail/rate sizing (hybrid occupancy); empty uses the abandon goal. |
| Max line scale | 4 |
Safety ceiling when low answer rate widens line targets. |
Agents and forecast bias
| Field | Default | Why / how used |
|---|---|---|
| Min agents for predictive | 0 |
Pin progressive-style warm-up below this logged-in count (0 = off). |
| Recommended min agents | 15 |
Operator guidance; warns when the pool is small (does not hard-block dialing). |
| Forecast bias enabled | On | Calibrates free-agent forecast from recent hit/miss (IMMEDIATE connect success vs park-for-hunt). Child fields (gain, max, window, target miss rate, miss weight) appear only when enabled. Miss weight default is 1; Bias gain default is 0.5. Bias keeps updating during hard-band taper so over-prediction backs off without collapsing to panic. |
Read-only today (not wired in the dialer)
| Field | Notes |
|---|---|
| Allow idle zero overdial | Planned flag; admit path does not read it yet (idle floor already refills when agents are free). |
| AMD enabled / AMD not-sure action | Reserved for answering-machine detection Phase 2. |
| Max target step down | Reductions are not slewed; braking uses dial-level and abandon bands. |
Start simple
Set Max abandon rate, choose Pacing profile = Balanced, configure Safe harbor media, leave Forecast bias on, and leave other Advanced knobs at defaults unless occupancy or abandon metrics justify a change. Compliance-sensitive accounts should prefer Compliance first and True abandon or Compliance abandon per policy.
Create a campaign¶
Navigate to the QVOICE Platform Portal:
- Open Call Center on the top bar.
- Open Campaigns on the left bar.
- Click + Add to open Campaign Builder.
The builder is organized into collapsible sections: General Configuration, Predictive Configuration (when Type is Predictive), Select Queue, Schedule, Caller ID, and Leads.
General configuration¶
| Option | Description |
|---|---|
| Name | Campaign display name. Use a name that identifies the list or business purpose. |
| Note | Internal description of the campaign goal or audience. |
| Type | Preview, Progressive, or Predictive. See Campaign types and Predictive dialing. |
| Retries | Maximum dial attempts per lead while in cool-off/retry cycle before the lead is marked Failed. |
| Cooloff (s) | Seconds to wait after a failed dial before the lead becomes dialable again. Default 3600 (one hour) is a common starting point. |
| 2nd Cooloff (s) | Optional longer cool-off after the second failed attempt. Overrides per-lead CSV value when set on the campaign. |
| 3rd Cooloff (s) | Optional cool-off after the third failed attempt. |
| Dial Cycles | Number of full passes through the active lead list per dial cycle window. 0 means no cycle limit. |
| Dial Cycles Time | Time of day (hh:mm) when dial cycles reset. Used with Dial Cycles. |
| Mask Lead Caller ID | When on, agents do not see the lead’s real caller ID on the agent leg (privacy / blind preview). |
Select queue¶
| Option | Description |
|---|---|
| Queue | Required. Queue whose agents receive connected campaign calls. The queue must exist and have Outbound Calls enabled if your deployment requires it. All queue settings apply: strategy, wrap-up, skills routing, dispositions, and agent login state. |
Queue readiness
Configure agents, strategy, greeting/hold audio, and wrap-up on the bound queue before starting a campaign. See CX Queues.
Dialing capacity and shared agents¶
For Progressive campaigns, every outbound dial reserves one idle agent of the bound queue before the lead's number is called. That agent stays reserved for this dial until the call is connected or ends, so the number of leads a campaign can dial at the same time is limited by the number of idle agents in its queue.
The reservation belongs to the agent, not to the queue. An agent who is a member of several queues is still a single dialing slot: while a campaign on one queue is using it, campaigns on every other queue skip that agent. This also applies when the agents are only placeholders for calls handed to an AI voice agent rather than to a person.
| Bound queues | Agents | Campaigns can dial at the same time |
|---|---|---|
| Queue A, Queue B and Queue C all contain the same 14 agents | 14 | 14 in total, shared — the first campaign to start can take all 14 and the others wait for agents to free up |
| Queue A has agents 1–13, Queue B 14–26, Queue C 27–32 | 32 | 13 + 13 + 6 = 32, independently |
Running several campaigns in parallel
To run campaigns side by side at a predictable rate, give each bound queue its own agents. Adding the same agents to more queues does not add capacity.
Schedule¶
Campaign Schedule time groups restrict when the dialer may place calls (account timezone). Add one or more rows with Add.
| Field | Description |
|---|---|
| Weekday | Days the window applies (mon … sun). Multi-select. |
| Start Time | Window start (hh:mm, 24-hour). |
| End Time | Window end (hh:mm, 24-hour). |
| Month Day Start / Finish | Optional day-of-month range (1–31). |
| Month | Optional month filter (1–12). Multi-select. |
A campaign can be Running, Stopped, or Scheduled (running but outside the current schedule window). Use the Play/Stop control on the campaigns list to start or stop dialing.
Caller ID¶
| Option | Description |
|---|---|
| Enabled | Turn on campaign-specific outbound caller ID. When off, the dialer uses the queue phone number, then account default caller ID. |
| Type | Account — pick a number from account main numbers. Custom — enter name and E.164 number. |
| Add | Multiple caller ID rows can be configured; the dialer rotates or selects per deployment rules. |
Leads¶
Import leads from a CRM API, a CSV upload, or Add Lead. While a campaign is Running, you cannot upload, sync, add, or delete leads.
Import from CRM API¶
| Field | Description |
|---|---|
| Method | GET, POST, or PUT. The Portal calls this URL when you click Sync. |
| URL | HTTPS endpoint that returns a JSON object (not a bare array). |
| Parse Response Body | JSON mapping. Values are field paths in the CRM response, not the lead data itself. |
Click Sync on a saved campaign that is not running (disabled while the campaign is running, while the mapping is invalid, or while mapping edits are unsaved). Save the campaign after you change the map. The request sends no Authorization header and no request body. If the CRM needs an API key (8x8, Salesforce, and most hosted CRMs), point URL at a webhook you control (for example n8n). That webhook authenticates to the CRM and returns the JSON shape below.
What leads_array is¶
leads_array is the path to the array of lead objects in the HTTP response. It is not a column on the lead.
The other keys (first_name, number, number_2, …) are paths inside each object in that array. Dot notation and array indexes are supported (data.leads, phones[0].phone, phones[1].phone).
The editor shows an error until leads_array, first_name, and number are non-empty.
Mapping to fill in¶
Copy this into Parse Response Body when the webhook returns a contacts array with fname, lname, phone, and optional extra phones (same example as the info tooltip on the campaign form):
{
"leads_array": "contacts",
"first_name": "fname",
"last_name": "lname",
"number": "phone",
"number_2": "phone_2",
"number_3": "phone_3",
"number_4": "",
"priority": "crm.priority",
"ticket_id": "",
"dial_retries": "",
"first_cooloff": "",
"cooloff": "",
"notes": ""
}
| Mapping key | Required | Meaning |
|---|---|---|
leads_array |
Yes | Path to the lead list in the response |
first_name |
Yes | Path to first name on each lead (must be a JSON string) |
number |
Yes | Path to the phone number on each lead (must be a JSON string; E.164 recommended) |
number_2 |
No | Path to the first extra phone. Dialed only after number is not answered. Leave "" when the CRM has one phone |
number_3 |
No | Path to the second extra phone. Dialed after number_2 |
number_4 |
No | Path to the third extra phone. Dialed after number_3. An empty path is not dialed |
last_name |
No | Path to last name |
priority |
No | Path to priority. CRM value may be a JSON number (1) or a string ("1") |
ticket_id |
No | CRM or ticket reference shown to the agent |
dial_retries |
No | Path to per-lead retry override (JSON number or string) |
first_cooloff |
No | Path to first cool-off in seconds (JSON number or string) |
cooloff |
No | Path to second cool-off in seconds (JSON number or string) |
notes |
No | Free-text note |
skill |
No | Skill name, comma-separated skills, or a JSON array of strings |
extension |
No | Agent or destination extension |
Leave unused optional keys as "".
API response the URL must return¶
HTTP 200. Top level must be a JSON object. first_name and number must be strings (a numeric phone fails the sync). priority, dial_retries, first_cooloff, and cooloff may be JSON numbers or strings.
Response that matches the mapping above:
{
"contacts": [
{
"id": "1",
"fname": "Paul",
"lname": "Doe",
"phone": "+147987987",
"phone_2": "+1479000001",
"phone_3": "+1479000002",
"crm": { "priority": 0 }
},
{
"id": "2",
"fname": "John",
"lname": "Dax",
"phone": "+147987597",
"crm": { "priority": 10 }
}
]
}
The first contact is stored as number +147987987 and alt_numbers ["+1479000001", "+1479000002"]. The empty number_4 path is not dialed. John is stored with only number +147987597, because phone_2 and phone_3 are absent. A missing index such as phones[2].phone is skipped the same way. A present extra phone must be a JSON string. A numeric phone fails the sync. An old map that has no number_2 key still imports a single number.
When the webhook uses the same key names as the Portal (common for n8n), this mapping and response also work. Integer fields may be JSON numbers:
{
"leads_array": "leads_array",
"first_name": "first_name",
"number": "number",
"last_name": "last_name",
"priority": "priority",
"ticket_id": "ticket_id",
"dial_retries": "dial_retries",
"first_cooloff": "first_cooloff",
"cooloff": "cooloff",
"notes": "notes"
}
{
"leads_array": [
{
"first_name": "Quinten",
"last_name": "Rowland",
"number": "+27623182874",
"priority": 1,
"ticket_id": "TICKET-1001",
"dial_retries": 3,
"first_cooloff": 60,
"cooloff": 300,
"notes": "Imported from CRM"
}
]
}
If the CRM returns a top-level array, wrap it ({ "contacts": [ ... ] }) and set "leads_array": "contacts". Nested lists use a dotted path, for example "leads_array": "data.leads".
8x8¶
Do not put api.8x8.com in URL. Sync cannot send the 8x8 bearer token. Use a webhook that calls 8x8 and returns JSON.
Recommended: reshape 8x8 contacts in the webhook to the contacts / fname / phone example, then use the mapping in Mapping to fill in.
If the webhook forwards 8x8 Directory contacts unchanged (list under items, name fields, phones array):
{
"items": [
{
"firstName": "John",
"lastName": "Doe",
"phones": [
{ "phone": "+18005551234", "primary": true }
]
}
]
}
{
"leads_array": "items",
"first_name": "firstName",
"last_name": "lastName",
"number": "phones[0].phone",
"number_2": "phones[1].phone",
"number_3": "phones[2].phone",
"number_4": "",
"priority": "",
"ticket_id": "",
"dial_retries": "",
"first_cooloff": "",
"cooloff": "",
"notes": ""
}
phones[1].phone is stored as the first alternate. If that contact has no second phone, the index is skipped and the lead keeps only number.
If the webhook forwards 8x8 Connect contacts (list under items, phone at addresses.msisdn), set "leads_array": "items" and "number": "addresses.msisdn". Each item still needs a string first-name field. Add one in the webhook if 8x8 does not provide it.
Check the webhook first
Open the URL in a browser or with curl. Copy the array path into leads_array and the per-lead keys into first_name and number.
Import from CSV¶
Drag and drop or select a .csv file, then click Upload on an existing campaign.
CSV columns:
| Column | Required | Description |
|---|---|---|
number |
Yes | Lead phone number |
number_2 |
No | First alternate phone. Dialed only after number is not answered |
number_3 |
No | Second alternate phone. Dialed after number_2 |
number_4 |
No | Third alternate phone. Dialed after number_3 |
priority |
Yes | Dial priority (lower or higher per your list sort — higher priority leads dial first) |
first_name |
Yes | Shown on agent preview |
last_name |
No | Shown on agent preview |
retries |
No | Per-lead retry override |
ticket_id |
No | CRM or ticket reference passed to the agent |
cool_off |
No | Per-lead first cool-off override (seconds) |
cool_off_2nd |
No | Per-lead second cool-off override |
cool_off_3rd |
No | Per-lead third cool-off override |
note |
No | Free-text note on the lead card |
type |
No | Lead type tag (optional classification) |
Download sample CSV — qvoice-campaign-leads-sample.csv
Use Export Leads on the campaign editor to download the current lead list.
Add Lead¶
On a saved campaign that is not running, Add Lead sits with the CSV actions. Each line has first name, last name, number, and priority. Add number reveals up to three extra phones on that line. Add line appends another lead. A completely empty line is skipped. A line that is partly filled still needs a first name, last name, number, and priority before it is saved.
Add is disabled while the campaign is running, the same as Upload and Sync. The button is hidden until the campaign has been saved.
Alternate numbers and agents¶
The dialer, not the agent, decides which of a lead's numbers to dial. When number is not answered, it moves on to number_2, then number_3, then number_4 before the lead goes into cool-off.
From UCP, an agent:
- Sees only the number on the current call. The lead's other numbers are not listed, and the agent cannot pick which one the dialer tries next. With Mask Lead Caller ID on, the agent does not see the number at all.
- Can schedule a callback to the number on the current call. Pick a disposition with Follow Up - Type and Follow Up - Date. At that time, a follow-up card appears in UCP with a Call button for that number. The callback goes to the agent who set it, not back through the campaign dialer. A follow-up can also be scheduled for any number, with a reason instead of a disposition, from the dial row or the search bar, and every open one is listed in the Scheduled tab of Last Activity (see the User Guide, Schedule a Follow-up).
- Can dial any number by hand from the dialpad. That call is a normal outbound call. It is not logged against the lead and does not change the lead's status or retries.
- Cannot add or change a lead's numbers.
Admins set a lead's numbers in the Portal, while the campaign is not running, through Upload, Sync or Add Lead. There is no field to edit a single lead's numbers. To replace a lead's alternate numbers, use Add Lead with the same number and the new alternates. The existing lead is updated rather than duplicated, and it is reset to Active, so its retries start over. If the alternates are left empty, the stored ones are kept.
Dial By Timezone¶
Restrict dialing to a single daily window evaluated in each lead’s timezone (from phone number or account default).
| Option | Description |
|---|---|
| Enabled | When on, dial only between From and To times in the lead’s local timezone. Mutually exclusive with Dial by Schedule by Timezone. |
Dial by Schedule by Timezone¶
Fine-grained retry schedule per lead timezone — define allowed days and one or more time windows per day.
| Option | Description |
|---|---|
| Enabled | When on, the dialer dials a lead only when local time falls inside a configured window. Mutually exclusive with Dial By Timezone. |
| Window Duration (hours) | Default length of each dial window (hours). Default 1. |
| Day N | Day offset from lead creation (0 = same day). Empty day = skip. |
| Times | One or more start times (HH:MM, 24-hour) per day. Add time / Add day (up to 7 days). |
Timezone source
Lead timezone is derived from the phone number when possible; otherwise the account default timezone applies.
Lead status¶
Call Center → Status → Leads shows real-time dialer state per lead.
| Status | Description |
|---|---|
| Active | Lead is ready to be dialed (new). |
| In Progress | Lead is currently being dialed or awaiting retry (dialing, retry). |
| Cool Off | Lead was dialed but not connected; waiting for cool-off timer (cooloff). |
| Voicemail | Agent or dialer marked voicemail; treated like cool-off until timeout. |
| Successful | Lead answered and connected to an agent (success). Shows Agent (name + extension), answer time, and talk time for Progressive and Predictive. |
| Failed | Retry limit exhausted; lead will not be dialed again unless reset. |
Agents can set Voicemail from the desktop when they reach an answering machine.
Start and stop¶
| Action | Behavior |
|---|---|
| Start (Play) | Campaign status becomes Running (or Scheduled if outside schedule window). Dialer begins selecting eligible leads. A start after Stop cold-resets Predictive pacing state (new warm-up / dial level). |
| Stop | In-progress dials are stopped and moved to retry. Leads in cool-off remain in cool-off until their timer expires, even after restart. For Predictive, the last pacing KPIs remain available on live dashboards until the next start (the dialer instance is not wiped on stop alone). |
Inbound priority
The campaign dialer dials only when no customers are waiting in the bound inbound queue and agents are available. High inbound volume pauses outbound dialing automatically.
Campaign activity¶
Call Center → Campaigns → Activity provides a cradle-to-grave report for dialed leads: dial result, agent name/extension, ring time, talk time, and (for Progressive / Predictive) customer wait SLA and agent SLA columns.
Campaign calls on the Live Calls Panel¶
Status → Live Calls Panel lists campaign calls together with every other active call. A campaign call shows Direction Outbound and, under Queue, the queue the campaign is bound to.
- Caller shows the lead's number for the whole call: while it rings, once the lead is connected, and after it is transferred to the campaign's post-action flow (for example a CSAT menu).
- Callee shows where the call is at that moment. Once the lead is in the post-action flow, that is the post-action extension.
Live queue / agent dashboards can show Predictive pacing KPIs while a campaign is running (and retain the last snapshot after Stop until the next Start): pacing mode, abandon vs goal, dial level, forecast bias / hit-miss, burst capacity, and measured dial CPS. Use those tiles together with Leads Status when tuning profiles or Advanced brakes.
Operational checklist¶
- Create and configure the bound queue (agents, strategy, audio, wrap-up).
- Create the campaign — set type, retries, cool-off, queue, schedule, caller ID.
- For Predictive: set Core abandon goal, pacing profile, and safe-harbor media; confirm enough agents are logged in (recommended 15+).
- Upload or sync leads; verify Leads Status shows Active rows.
- Start the campaign during the schedule window.
- Monitor Activity, Leads Status (Successful rows should show the answering agent), and live Predictive KPIs — watch abandon vs goal, mode (warm-up / predictive / taper / panic), and adjust profile or Advanced brakes if needed.
Related documentation¶
- CX Queues — queue configuration used by campaigns
- Skills Routing — route campaign queue calls by agent skills
- Campaigns API — REST API for leads, status, and activity