2026-09-05 The first real calls have been placed: five ended normally, six failed. Here is what broke.

Guide

An outbound campaign, from list to report

From a CSV to a report, with calling windows and compliance rules.

25 minutes 6 steps

What you end up with

A campaign that dials inside permitted hours, with a written reason for every contact it did not call.

§00 What you need first
  • A published assistant and a number or trunk for outbound calls.
  • A CSV with a phone column. The header can be phone, phone_number, number, mobile, telephone or to.
  • Credit in the wallet: a call only starts if a minute of it can plausibly be covered.
§01 Step

Create the campaign and say who answers

The first two wizard steps are short: name, description, campaign variables, then the assistant or squad that takes the call.

Engage → Campaigns → Create → Details · Who answers

§02 Step

How it dials: number, caller id, concurrency

Choose between a number and a trunk. You can set a pool of caller ids that rotate. Concurrent calls start at one — raise it slowly, because a dialler that is too fast looks like a dialler that is too fast to the carrier and to the person being called.

Dial through: A number / A SIP trunk · Caller ID pool · Max concurrent calls 1 · Ring for 30 s

§03 Step

When it dials: days, hours, timezone

The defaults are weekdays between 09:00 and 20:00 in the timezone you pick. There is a panel showing the national rules for the countries on your list, and a switch that lets you ignore them. That switch exists because some teams hold written consent; do not touch it if you do not.

Days · “Not before” 09:00 · “Not after” 20:00 · default timezone UTC

§04 Step

Control: suppression, consent, budget, attempts

This is where suppression lists go, along with the maximum attempts per contact — three by default — and the budget cap. Require consent and observe holidays are off by default, so turn them on yourself if you work in the EU. There is also a dry-run switch that walks the entire dispatcher and calls nobody.

Max attempts 3 · Exponential backoff · base delay 15 min · dry run

§05 Step

Import the contacts and read the preview

Import takes a CSV and shows a preview with the column mapping and per-row errors before it writes anything. Columns it does not recognise become per-contact variables, available in the prompt as {{variable}}. If no column maps to a phone number, the import stops.

Campaign page → “Import contacts” → CSV + default country + skip suppressed

§06 Step

Start it, then read the report

Start, pause, resume and cancel live on the campaign page. Pause and cancel ask whether to end calls in progress too, with a live count, and let you write the closing line spoken before hangup. Progress shows as five figures; per-contact detail is in the contacts tab, which refreshes every fifteen seconds.

Start · Pause · Resume · Cancel · “Export results”

§OK Check

How to tell it worked

  • The completed counter climbs and the failed counter stays small.
  • Contacts that were not called carry one of the 19 named skip reasons, not just a “skipped” state.
  • The results export downloads and holds one row per contact.
§!! Caveats

What does not work yet

Every guide has this section. If it were missing, it would mean we had not looked hard enough.

  • National calling rules are shown as information and can be overridden with a switch. The liability stays yours.
  • The dispatcher runs every minute and is built so two overlapping runs cannot dial the same contact twice. That was proven with concurrency tests, not with a real campaign at volume.