> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Dialer, retries & compliance

> Parallel dialing, retry logic, calling windows, DNC lists, and voicemail handling

The dialer runs **server-side** — no browser tab needs to stay open. It ticks continuously, reconciling finished calls and dispatching new ones within your rules.

## Parallel dialing (concurrency)

* Set a **concurrency** per campaign: how many calls run simultaneously.
* The effective limit is the *lower* of the campaign setting and your plan's `max_parallel_calls`.
* Stale calls (stuck in ringing) are detected and freed automatically, so slots never leak.

## Retry logic

Unanswered leads are retried automatically:

* **Max attempts** (`retry_max`) per lead (e.g. 3).
* **Delay between attempts** (e.g. 120 minutes) — the retry lands at a *different time of day*, which measurably improves reach.
* A lead that answers stops being retried; `busy`, `no answer`, and `failed` outcomes schedule the next attempt until the budget is exhausted.
* The full attempt history is visible per lead.

`retry_max` is the hard ceiling for **every** retry policy below. The voicemail and goal options don't create unbounded loops — once the additional attempts are exhausted, the lead is finalized with a terminal status (`failed` / `no_answer`).

### Retry until a human answers

Enable **`retry_on_voicemail`** (default off) to *continue calling until a human answers (skip voicemails)*. When on, a call whose [AMD result](#amd--voicemail) is a machine category (`machine-vm`, `machine-ivr`, `machine-unavailable`) does **not** count as reached — the lead is rescheduled for another attempt instead of being marked done, up to `retry_max`. Only a `human` result (or an exhausted retry budget) finalizes the lead.

This is a retry *policy*. What the assistant actually does when it hits a machine — hang up silently or leave a message — is configured on the **assistant** (Settings → Conversation → Voicemail), not on the campaign.

### Retry until the goal is achieved

Two settings work together to keep dialing a lead until a defined outcome is met:

* **`retry_until_goal`** (boolean, default off) — *Continue calling until the goal is achieved.* A lead is marked `completed` only when its goal variable evaluates to `true` on the finished call; otherwise the dialer schedules another retry (bounded by `retry_max`).
* **`goal_variable`** (text) — *Variable that must be true to mark a lead as completed.* The name of a boolean post-call evaluation field. Options come from the campaign assistant's post-call analysis fields (the `boolean` fields in its analysis config), plus the built-in **`success`** flag. The dialer reads the value from the finished call's analysis data (or the call's `success` flag when the variable is `success`).

If `retry_until_goal` is on but the goal variable never becomes `true`, the lead is retried until `retry_max` is reached and then finalized with a terminal status — the goal policy never overrides the retry ceiling.

## Calling windows

Define **when the campaign may dial**, per weekday, in the campaign's **timezone** — e.g. Mon–Fri 09:30–18:00. Outside the window the dialer pauses and resumes automatically.

<Note>
  In Germany, unsolicited calls outside reasonable hours violate the UWG. Calling windows aren't just a courtesy feature — configure them for every campaign that dials consumers.
</Note>

## Do-not-call (DNC)

A central workspace suppression list hard-blocks opted-out contacts before
proactive marketing outreach:

* **Universal mode** blocks every linked channel after an opt-out on any one
  channel.
* **Per-channel mode** blocks only the channel where the opt-out was received.
* Phone, email, contact identity, scope, source, reason, and the mode at
  opt-out are retained for auditability.
* Campaign dialing checks the active voice suppression immediately before
  dispatch and fails closed when consent status cannot be verified.

Manage the mode and records under **Settings → Data → Suppression**. See
[Consent & compliance](/settings/consent-compliance) for cross-channel
behavior, restoration semantics, REST examples, and MCP tools.

* `GET /api/v1/suppression-list` — list active records
* `POST /api/v1/suppression-list` — record an opt-out
* `DELETE /api/v1/suppression-list/{id}` — restore consent without deleting
  the audit history

The same operations are available through MCP.

## AMD & voicemail

**Answering machine detection** classifies who picked up into one of five categories:

| AMD result            | Meaning                                                                  |
| --------------------- | ------------------------------------------------------------------------ |
| `human`               | A person answered — the conversation proceeds normally                   |
| `uncertain`           | Couldn't be classified — treated like a human, the conversation proceeds |
| `machine-vm`          | Voicemail / answering machine                                            |
| `machine-ivr`         | An IVR / phone menu system                                               |
| `machine-unavailable` | Number unavailable / operator message                                    |

What the assistant *does* on a machine — hang up silently, or leave a message after the beep — is configured on the **assistant** (Settings → Conversation → Voicemail), not on the campaign.

The AMD result is stored on the call and feeds the lead status, so retry logic can distinguish "mailbox" from "never picked up". Turn on [`retry_on_voicemail`](#retry-until-a-human-answers) to keep dialing until a human (rather than a `machine-*` category) answers.

<Tip>
  Voicemail message + retry at a different hour is the highest-ROI combination for cold outreach: the mailbox message primes the lead, the retry catches them live. Pair the assistant's voicemail message with the campaign's `retry_on_voicemail` toggle.
</Tip>
