ZyanDocs

Voice campaigns

Create a campaign, import leads, move it through approval and launch, read the lead roster, and dial a single lead straight from the CRM.

A campaign answers four questions: who gets called, by which agent, from which number, and inside which hours. It is the most configuration-dense screen in the voice surface, and every field on it is a compliance decision wearing a plain label.

Before you start

You need a published agent version and a published product version. Both. Creating and editing campaigns needs the voice edit permission.

The voice campaigns list with a running campaign and one awaiting approval, each showing its lead count and opt-outs
Status is the whole story here. Nothing dials until a campaign is approved, and preflight re-runs at approval, at launch and before every dial.

Draft

Edit anything

Pending approval

Configuration locks

Approved

Configuration snapshotted

Running

Pause and resume return here

Completed

Terminal, with stopped and archived

Scheduled sits between approved and running. Approve needs a passing preflight and start re-runs it — an approved campaign can still be refused at launch.

Create the campaign

Click New campaign

From CRMVoice AgentsCampaigns. The subtitle sets the expectation: Draft first — approval and launch run compliance preflight server-side.

Fill Campaign name, Purpose and Audience description

Purpose and audience are prose. Write them for the person who has to approve this, including future you.

Choose the Audience classification

The single most consequential field on the form. See below.

Select the Agent and Product

Both pickers offer published versions only.

Select a Caller number

A draft may sit at — none —, but preflight will want a real one.

Tick any Campaign context packs

These are added on top of the agent's own packs.

Set the calling window and the caps

Days, start and end time in the lead's local time, then the five caps.

Leave Test campaign on and save the draft

Test mode restricts live dialing to allowlisted numbers. Turn it off deliberately, not by habit.

Audience classification

SettingWhat it changesDefault
Internal testYour own numbers. No extra preflight burden.Selected
Consent backedLeads with a consent record. Preflight checks each lead for valid, unexpired consent before dialing it.
B2B counsel approvedBusiness calling your counsel has reviewed. Raises a warning at approval that you must acknowledge by typing.
Consumer coldCold consumer telemarketing. Denied by default policy with no in-app override.

Consumer cold is default-deny

Selecting it shows an inline red warning immediately, and preflight blocks the campaign with audience_policy_denied. There is no override in the product. Use consent-backed leads, internal test numbers, or a counsel-approved B2B classification instead.

Calling windows, caps and retries

SettingWhat it changesDefault
Timezone fallbackUsed when a lead has no timezone of its own.America/New_York
Calling window (lead-local time)The days and the start and end time, interpreted in each lead's local time. The end time is exclusive.Mon–Fri, 09:00 to 17:00
Daily capMaximum dials per day across the whole campaign.25
Max concurrencyHow many calls may be in progress at once.1
Max attemptsAttempts per lead before it is exhausted.2
Cooldown (min)Minutes that must elapse between two attempts on the same lead.240
Max call (sec)Per-call duration cap.600
Voicemail behaviorHang up, leave a message, or schedule a retry.Hang up
Test campaignRestricts live dialing to allowlisted numbers.On

Retries are configured for you: a lead is retried on busy, no answer and provider failure. The Cooldown (min) is what stops that becoming harassment.

The calling window is per lead, not per workspace

A 09:00–17:00 window means 09:00–17:00 where the lead is. A campaign spanning four time zones dials for twelve hours of your day. That is intended — but plan your Daily cap around it.

Import leads

Open the campaign and click Import leads

From the campaign detail page.

Paste CSV or choose a file

A phone column plus an optional name. The placeholder shows the shape: phone,name then +15550100001,Ada Lovelace.

Submit

Suppressed numbers are skipped server-side — they never enter the roster at all.

The lifecycle

A campaign has nine statuses. Which buttons appear depends on where it is.

ButtonWhat it does
Submit for approvalDraft → pending approval. Configuration edits lock until the decision
Approve…Opens the approval dialog. Disabled until a passing preflight exists
Schedule…Sets a future start on an approved campaign
StartBegins dialing. Preflight re-runs server-side; launch is refused if any check fails
PauseIn-flight calls finish, no new dials until you resume
ResumePreflight re-runs; resume is refused if any check fails
StopCannot be undone. Remaining leads are never dialed by this campaign
EditAvailable while draft or paused. Changes require re-approval when the checks demand it

The statuses are draft, pending approval, approved, scheduled, running, paused, stopped, completed and archived. Stopped, completed and archived are terminal.

Approving

Click Run preflight

Each row shows a code, a severity, a message, remediation text and how many leads it affects.

Resolve every error

Warnings do not block. Errors do.

Click Approve…

Preflight re-runs inside the dialog — a stale pass is not good enough.

Type the acknowledgment if there are warnings

The label reads Type “…” to continue. It is matched exactly.

Click Approve

Approval snapshots the configuration into an immutable version.

The acknowledgment phrase is byte-exact

It is an API contract, not free text. Extra spaces, different capitalisation or a smart quote will all leave Approve disabled with nothing visibly wrong. Copy the phrase from the label.

Arm queue: the shortcut for agent dial queues

A dial queue created from a lead gets a single confirmation instead of the full ladder. Click Arm queue — the dialog runs preflight automatically and reads One confirm approves and starts this agent's dial queue. Read any warnings, then click Arm queue & start calling.

It stays disabled until preflight passes: Preflight must pass before the queue can be armed. Once armed you get Queue armed — dialing proceeds within its calling windows. Ordinary campaigns keep the full submit → approve → schedule → start path.

The lead roster

The Leads table shows every lead with its membership status, attempts made, next attempt, last disposition and — the useful one — Block reason.

Lead statuses are pending, queued, dialing, in call, completed, retry scheduled, exhausted, opted out, suppressed, blocked and canceled.

Dial now dials one lead immediately. Its tooltip is precise: Dial this lead now (skips the schedule; every safety check still runs). It skips the schedule, not the per-dial preflight.

Call a lead from the CRM

You do not have to build a campaign to call one person.

Open the lead and find the Voice section

It is on Leadsthe leadActivity.

Click Assign voice agent

Then pick the Voice agent.

Choose a Call schedule

Call at suggested time shows the suggested lead-local time. Now only appears when it is allowed. Pick a time… lets you choose.

Confirm

The button reads Start call now, Start queue and call or Schedule call depending on what you chose.

Your chosen time may be moved

A time outside the agent's calling windows is snapped forward, with a note: Adjusted to … (lead time) — the picked time falls outside the agent's calling windows. If nothing opens near it you get No calling window opens near that time — pick another. Bulk assignment is always dispatcher-scheduled and shows no schedule chooser.

Troubleshooting

SymptomCauseFix
Approve is greyed out with Run a passing preflight firstNo passing preflight result exists yetClick Run preflight and resolve every error
The Approve dialog will not submit and nothing is failingWarnings are present and need the typed acknowledgmentType the phrase from the label exactly
Leads sit at pending and never get dialedOutside the calling window, cooldown not elapsed, or the daily cap is reachedRead the Block reason column; widen the window, lower the cooldown, or raise the cap
Leads show blocked as suppressed or opted outThe number is in the opt-out registry or marked do-not-contactSuppressed leads are never dialed — remove them, or restore opt-in from the call detail page
Imported rows are missingSuppressed numbers are skipped server-sideExpected — they never enter the roster
The campaign was stopped by mistakeStop cannot be undoneCreate a new campaign; the remaining leads are not dialed by the stopped one
Dialing has not started although the campaign is runningThe dispatcher works on a tick, inside each lead's local windowWait for the window; check Block reason if it persists