Create a campaign
Build an outbound calling campaign in the Ori console using the five-step wizard, from bot selection to review.
A campaign is a list of contacts that the Ori dialler calls automatically using a chosen bot, within rules you set for pacing, time windows, and retries. You build one through a five-step wizard.
Before you start
Confirm the following so the campaign runs cleanly:
- the bot has passed test calls and is ready for live use
- the outbound numbers you want to dial from are configured under Carriers
- your contact CSV has clean phone numbers and a
phone_numbercolumn - the calling time window and working days are approved for the client
- the concurrency you plan to use is safe for available capacity
To start, open Campaigns in the sidebar and select New Campaign. This opens the wizard at /dashboard/campaigns/new.
The same wizard is used to edit a campaign. Editing is only allowed while a campaign is in draft or paused status. Once a campaign has run, its name, bot, and contacts lock for audit safety — see Locked fields after the first run.
The wizard at a glance
The wizard has five steps, shown as pills across the top. The current step is highlighted in the brand colour; completed steps turn green. You can click back to revisit a step, but the wizard checks required fields before letting you move forward.
Basics
Name the campaign and pick the bot.Number Pool
Choose which outbound numbers the dialler calls from.Dialler Config
Set concurrency, the calling window, retries, callbacks, and redial rules.Upload CSV
Upload the contact list.Review
Check every value, then create.Wizard buttons
These buttons appear across the wizard. Not all are visible on every step.
| Button | Where it appears | What it does |
|---|---|---|
| Back link (arrow) | Top of page, all steps | Returns to the campaign list or campaign detail, depending on where you came from. Leaves the wizard. |
| Back | Steps 2–5 | Returns to the previous step. Your entries are kept. |
| Next | Steps 1–4 | Advances to the next step once required fields pass validation. Stays disabled (greyed out) until they do. |
| Browse | Step 4 (Upload CSV) only | Opens your computer's file picker to choose a CSV. |
| Create Campaign | Step 5 (Review) only | Submits the campaign. On success you are taken to the campaign detail page. Shows "Creating…" or "Saving…" while it works. Disabled if the campaign is not editable (for example, already running or completed). |
Tip
If the Next button looks greyed out, a required field on the current step is empty or invalid. There is no error pop-up — the button simply stays disabled until the step is complete.
Step 1 — Basics
Name the campaign and choose the bot that will speak to contacts.
| Field | Required | What to enter | Default / validation |
|---|---|---|---|
| Campaign Name | Yes | A clear, human-readable name. Combine client, segment, date, and purpose, for example "Q2 Renewal Drive". | None. Disabled if identity is locked. |
| Bot | Yes | The bot that runs the conversation. Pick the one already tested for this campaign. | None. Disabled if identity is locked. |
The bot list is drawn from your existing bots. If the bot you need is missing, create it first — see Create a bot.
Locked fields after the first run
Once a campaign has been started or restarted, the Campaign Name and Bot fields become read-only and a notice appears:
These fields stay fixed so old and new attempts remain audit-safe.
If you need a different name, bot, or contact set on an already-run campaign, use Clone from the campaign list or detail page to copy it into a fresh draft you can edit freely.
Step 2 — Number Pool
Choose the outbound numbers (DIDs) the dialler will place calls from. The list is drawn from your configured carriers.
| Field | Required | What to enter | Notes |
|---|---|---|---|
| Select outbound numbers | Yes (at least one) | Tick the checkbox next to each number you want to dial from. Each row shows the number and, where set, a label such as "(Support team)". | Scrollable list. The dialler rotates across all ticked numbers during the run. |
Operations guidance:
- choose numbers approved for this client and campaign
- avoid inbound-only DIDs
- select enough numbers to support your intended concurrency
- carrier dial-rate (CPS) capacity is configured separately under Carriers, not here
Step 3 — Dialler Config
This step controls pacing, the calling schedule, and how the dialler retries and re-dials contacts. It is the longest step.
Concurrency and mode
| Field | Required | What to enter | Default / validation |
|---|---|---|---|
| Concurrency Limit | Yes | The number of calls allowed to run at the same time. | Defaults to 50 if left blank or below 1. Clamped to at least 1 when you click away. |
| Campaign Mode | Yes | Single Day — the campaign stops when the time window ends and does not resume. Multi Day — dialling pauses at the cutoff and resumes the next working day; the campaign stays running. | Default: Single Day. |
| Always-on | No | Only shown when mode is Multi Day. When enabled, the campaign never auto-completes and stays running until you stop it manually. The CSV becomes optional, so you can feed contacts over time via the API or by appending CSVs. | Off by default. |
Concurrency is the seat budget — how many conversations can be live at once. It is the protection limit for available capacity, not the rate at which new calls are launched. The carrier's own dial-rate limit also applies, and the tighter of the two wins.
Time window and working days
| Field | Required | What to enter | Default |
|---|---|---|---|
| Time Window: Start | Yes | The earliest time of day dialling may begin, in 24-hour HH:MM format. | 09:00 |
| Time Window: End | Yes | The latest time of day dialling may run, in 24-hour HH:MM format. | 18:00 |
| Time Window: Timezone | Yes | The timezone the window is measured in. Options include Asia/Kolkata (IST), Asia/Dubai (GST), Asia/Singapore (SGT), Asia/Tokyo (JST), Europe/London, Europe/Berlin, America/New_York, America/Chicago, America/Los_Angeles, and UTC. | Matches your display timezone when you create the campaign. |
| Working Days | Yes | Tick the days of the week the campaign may dial within the window. | All seven days selected. |
Retries
| Field | Required | What to enter | Default / validation |
|---|---|---|---|
| Max Attempts | Yes | The most times a single contact may be called, including the first attempt. | Defaults to 3 if blank or below 1. |
| Retry Delay (minutes) | Yes | How many minutes to wait before a contact becomes eligible for its next attempt. | Defaults to 30 if blank or below 1. |
| Retry on System Dispositions | No | Tick which automatic call outcomes should trigger a redial: no_answer, rejected, RNR, error, timeout. | None ticked by default. |
| Custom Retry Dispositions | No | A comma-separated list of business disposition names from post-call analysis that should also redial, for example callback_requested, not_available. | Saved as a list. |
Tip
The most common retryable outcomes are no_answer, rejected, RNR, error, and timeout. Tick the ones that match how the client wants unreached contacts handled.
Redial and stop rules
These two optional rules adjust retry behaviour based on how long the last connected call lasted. They help you avoid re-dialling people you genuinely reached, and re-dial people who only connected for a moment.
| Field | Required | What to enter | Default / validation |
|---|---|---|---|
| Stop redials after a meaningful connect | No | When enabled, cancels any remaining redials if the last connected call lasted longer than the threshold below. | Off by default. |
| Connected longer than (seconds) | No | The duration that counts as "meaningfully reached". Only shown when the stop rule is enabled. | Defaults to 30 if blank or below 1. |
| Redial after a short connect | No | When enabled, redials whenever the last connected call was shorter than the threshold below — a brief connect is treated as not yet a real conversation. | Off by default. |
| Connected shorter than (seconds) | No | The duration below which a connect counts as "too short". Only shown when the redial rule is enabled. | Defaults to 15 if blank or below 1. |
If you enable both rules and set the stop-after threshold below the redial-under threshold, the wizard shows a warning. Connects that fall between the two values are ambiguous and the stop rule wins, so contacts in that range will not be redialled. Set the stop-after value at or above the redial-under value to avoid this.
Callbacks and exclusion
| Field | Required | What to enter | Default |
|---|---|---|---|
| Callback Detection | No | When enabled, post-call analysis detects when a customer asks to be called back and schedules that callback inside this campaign. | Off by default. |
| Sticky exclusion | No | When enabled, a contact that has been excluded stays suppressed even if it is later re-added through the API or by re-uploading a CSV. When off, a deliberate re-add will be dialled again. | Off by default. |
Callback detection is the campaign half of a double gate. For the bot to actually schedule callbacks, the bot's own callback setting must also be enabled. See Callbacks.
There is no answering-machine detection toggle in this wizard. Calls that reach a machine are still counted on the campaign detail screen, but machine detection is not switched on or off here.
Step 4 — Upload CSV
Upload the contact list. You can drag a file onto the dropzone or use Browse to pick one.
| Field | Required | What to provide | Limits and behaviour |
|---|---|---|---|
| Contacts (CSV upload) | See note | A CSV that includes a phone_number column. Any other columns become per-call variables the bot can use. | Maximum 100 MB or 500,000 rows. |
When you select a valid file, a preview table shows the header and the first few rows so you can confirm the columns are correct before continuing.
Whether the CSV is required depends on the campaign:
- Single Day, or Multi Day without Always-on — a CSV is required.
- Always-on (Multi Day) — the CSV is optional, because contacts can be added over time.
For column formatting, accepted phone-number formats, and how skipped rows are handled, see Upload leads.
Step 5 — Review
The final step shows a read-only grid of everything you configured: name, bot, selected numbers, the CSV, concurrency, mode, always-on, the time window, max attempts, retry delay, callback detection, and sticky exclusion.
Before you click Create Campaign, confirm:
- the bot name is correct
- the number-pool count matches what you intended
- the CSV preview looks right
- concurrency is safe for available capacity
- the time window and working days are correct
- the retry and redial rules match the campaign brief
Click Create Campaign. On success a toast confirms "Campaign created" (or "Campaign updated" when editing) and you land on the campaign detail page.
A newly created campaign stays in draft status and does not dial anything until you press Start on the campaign list or detail page. This gives you a final chance to review before live calls begin.
Edit-mode notices
When you open the wizard to edit an existing campaign, you may see one of these notices:
| Notice | Meaning |
|---|---|
| "Only draft and paused campaigns can be edited. Current status: [status]." | The campaign cannot be edited in its current state. Pause it first, or clone it. |
| "Campaign name, bot, and contacts are locked after the first run. You can rotate outbound numbers and adjust dialler config before pressing Start." | The campaign has run before. You can still change the number pool and dialler settings, but not the identity or contacts. |
What's next
- Upload leads — CSV formatting, phone-number rules, and per-call variables
- Callbacks — how detected callbacks are scheduled and tracked
Campaign list
View every campaign with its status and progress, and start, pause, resume, stop, clone, restart, or delete a run.
Upload leads
How the Upload CSV step of the campaign wizard works in the Ori console — the required phone_number column, size and row limits, how extra columns become per-call variables, what gets validated or skipped, and the preview table.