# Call Logic & Limits

Dapta voice campaigns are built around a set of timing rules, batch controls, and retry logic that work together to maximize contact rates while protecting call quality. This page explains every mechanism that governs how and when your contacts are called, so you can configure campaigns with confidence.

## Campaign Statuses

Every campaign moves through a lifecycle represented by its status. You can see the current status on the campaign list and on the campaign detail page.

| Status             | Description                                                              |
| ------------------ | ------------------------------------------------------------------------ |
| **Draft**          | Campaign created but not yet scheduled or activated.                     |
| **Scheduled**      | Campaign is set to run at the configured date and time.                  |
| **Running**        | Campaign is actively placing calls to contacts.                          |
| **Completed**      | All contacts in the campaign have been processed.                        |
| **Failed**         | Campaign encountered an error and stopped.                               |
| **Paused**         | Campaign was manually paused by a user.                                  |
| **Manual Running** | Campaign is running a manual test triggered by the **Run** button.       |
| **Waiting**        | Campaign is between batches or waiting for the next available time slot. |

{% hint style="info" %}
A campaign in **Waiting** status has not finished — it is simply idle until the next batch or time slot opens.
{% endhint %}

***

## Batch Processing

Dapta processes contacts in batches rather than all at once. This gives the system time to handle responses and keeps call pacing predictable.

**Batch size** is configurable from **1 to 500 contacts** per batch. The default value is **100**. You can adjust it in the **Advanced Settings** accordion on your campaign's **Settings** tab.

Within each batch, contacts are called sequentially at a fixed rate of **1 call every 3 seconds**. Once every contact in the current batch has been attempted, Dapta moves on to the next batch.

> **💡 Tip:** Smaller batch sizes give you more granular control and quicker feedback during testing. Larger batches are better for high-volume production campaigns.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-380e593b951581ca64c7e34c8de6b7c5c7a96a73%2Fcampaign-detail-advanced-settings.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Calling Schedule

The calling schedule determines **which days** and **which hours** your campaign is allowed to place calls. All times follow the **time zone** configured on the campaign.

### Calling Days

Choose one of three options:

* **Every Day** — the campaign runs seven days a week.
* **Weekdays (Mon–Fri)** — the campaign runs only on business days.
* **Custom** — pick the specific days of the week you want.

### Weekly Schedule

The schedule is configured through a **day-by-day table** where each day of the week can have its own independent time slots. This means you can set different calling windows for different days — for example, 8:00 AM – 6:00 PM on weekdays and 10:00 AM – 2:00 PM on Saturdays.

For each active day, you can:

* **Enable or disable** the day using the checkbox.
* **Set one or more time slots** with a start and end time.
* **Add additional time slots** by clicking the **+** button (for example, a morning window and an afternoon window).
* **Remove a time slot** by clicking the delete button next to it.

### Time Slot Rules

The following rules apply to time slots:

* Slots **cannot overlap** with each other within the same day.
* The **start time must be before the end time** within each slot.
* Times use the **HH:MM AM/PM** format.
* At least **one day must be enabled** with at least one time slot.

{% hint style="warning" %}
If the campaign reaches a point where no time slot is open, any remaining calls are automatically rescheduled for the next available slot. No contacts are skipped.
{% endhint %}

***

## Attempt Limits

You can control how aggressively Dapta retries contacts that do not answer or cannot be reached.

| Setting                      | Range  | Description                                                                                                                                            |
| ---------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Max Attempts Per Contact** | 1 – 40 | Total number of call attempts across the entire campaign lifetime. The available range adjusts dynamically based on your **Attempts Per Day** setting. |
| **Attempts Per Day**         | 1 – 5  | Maximum attempts allowed for a single contact within one calendar day.                                                                                 |

If an attempt cannot be made because the current time slot has closed, it is **not counted as a failed attempt**. Instead, it is rescheduled for the next available slot.

> **💡 Tip:** A common starting configuration is **3 max attempts** with **1 attempt per day**, spreading retries across multiple days to improve answer rates without overwhelming contacts.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-e62c03c827d0542eb2f1810545c8b56993f51d9e%2Fcampaign-detail-settings.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Contact Cooldown

To prevent contacts from receiving back-to-back calls, Dapta enforces a **1-hour cooldown** per contact. This rule applies **globally across all campaigns** — if a contact was attempted in any campaign within the last hour, no other campaign will call them until the cooldown period has passed.

This protects the recipient experience and reduces the risk of your numbers being flagged as spam.

***

## Parallel Execution

You can run **multiple campaigns simultaneously** without any conflicts. Each campaign operates independently with its own batch queue, schedule, and call pacing.

Every active campaign places **1 call every 3 seconds**, regardless of how many other campaigns are running at the same time.

{% hint style="info" %}
The 1-hour contact cooldown still applies across campaigns. If two campaigns share contacts, the cooldown prevents a contact from being called by both campaigns within the same hour.
{% endhint %}

***

## Phone Number Rotation

Phone number rotation distributes your outbound calls across multiple phone numbers, reducing the likelihood that any single number gets flagged as spam.

**How to enable it:**

1. Open your campaign's **Settings** tab.
2. Expand the **Advanced Settings** accordion.
3. Toggle **Phone Number Rotation** on.
4. Select two or more outbound phone numbers from the list. Each number displays its nickname and SIP trunk status tag.

When enabled, Dapta automatically rotates between the selected numbers as it places calls. This is especially useful for high-volume campaigns where a single number might otherwise accumulate too many outbound calls in a short period.

<figure><img src="https://3835013762-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCy5rSNtQmtqYCGzJlNEB%2Fuploads%2Fgit-blob-380e593b951581ca64c7e34c8de6b7c5c7a96a73%2Fcampaign-detail-advanced-settings.png?alt=media" alt=""><figcaption></figcaption></figure>

***

## Manual Test / Run

Before activating a campaign for automatic execution, you can run a **manual test** to verify that everything works as expected.

**Step 1:** Make sure the campaign is **not active** — toggle the activation switch off.

***

**Step 2:** Click the **Run** button on the campaign detail page to start the manual test.

***

**Step 3:** Monitor progress using the progress bar, which shows the completion percentage and the phone number of the contact currently being called.

***

**Step 4:** Click **Stop** at any time to halt the test. The campaign will return to its previous status automatically.

After the manual test completes (or is stopped), the campaign returns to whatever status it had before the test began. No permanent state changes are made.

{% hint style="warning" %}
You cannot run a manual test while the campaign is active. Deactivate the campaign first, then click **Run**.
{% endhint %}
