> For the complete documentation index, see [llms.txt](https://docs.dapta.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dapta.ai/ai-text-agents/campaigns/message-logic-and-limits.md).

# Message Logic & Limits

Dapta text agent campaigns send WhatsApp messages through Meta's Business Platform. The rules that govern when messages go out, how many can be sent, and what happens when delivery fails are a combination of Dapta's own scheduling engine and **Meta's account-level messaging limits**. This page explains both.

## 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                                                                                                                   |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Queued**             | Campaign created but the dispatch workflow has not started yet.                                                               |
| **Running**            | Campaign is actively dispatching messages to contacts.                                                                        |
| **Waiting — Schedule** | The current time is outside all configured send windows. Dispatch resumes automatically when the next window opens.           |
| **Waiting — Tier**     | The campaign has reached Meta's daily messaging limit for your account. Dispatch resumes automatically when the limit resets. |
| **Paused**             | Campaign was manually paused. No messages are sent until you click **Resume**.                                                |
| **Completed**          | All contacts have been processed or the end date has passed.                                                                  |
| **Cancelled**          | Campaign was manually cancelled. Remaining contacts will not receive any messages.                                            |
| **Failed**             | An unrecoverable error stopped the campaign.                                                                                  |

{% hint style="info" %}
**Waiting — Tier** is a normal operating state, not an error. Your campaign will automatically resume once your 24-hour dispatch window resets with Meta.
{% endhint %}

***

## Send Windows

The send schedule controls **which days** and **which hours** your campaign is allowed to dispatch messages. All times follow the **time zone** configured on the campaign.

### Contact Days

Choose one of three options:

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

### Time Slots

Each active day has its own time slots with a start and end time. You can add multiple slots per day — for example, 9:00 AM – 12:00 PM and 2:00 PM – 6:00 PM.

The following rules apply:

* Slots **cannot overlap** within the same day.
* The **start time must be before the end time**.
* At least **one day must be enabled** with at least one time slot.

{% hint style="warning" %}
If the campaign is running and reaches a time outside all send windows, it transitions to **Waiting — Schedule** and resumes automatically when the next window begins. No contacts are skipped.
{% endhint %}

***

## WhatsApp Messaging Tiers

The number of unique contacts your campaign can message per day is not set inside Dapta — it is determined by **Meta's messaging tier system**, which is tied to your WhatsApp Business Account's quality reputation.

As of October 2025, messaging limits apply at the **business portfolio level**: all phone numbers under the same Meta Business Portfolio share a single daily limit.

### Tier Table

| Tier           | Daily Unique Contacts | Requirement                                        |
| -------------- | --------------------- | -------------------------------------------------- |
| **Unverified** | 250                   | Default for new, unverified accounts               |
| **Tier 1**     | 1,000                 | Meta Business Verification completed               |
| **Tier 2**     | 10,000                | Consistent volume at Tier 1 + quality maintained   |
| **Tier 3**     | 100,000               | Consistent volume at Tier 2 + quality maintained   |
| **Unlimited**  | No cap                | Sustained Tier 3 quality with no policy violations |

{% hint style="info" %}
These limits count **unique contacts per 24-hour rolling window**, not total messages. Sending multiple messages to the same contact within a day counts as one toward your limit.
{% endhint %}

***

## Quality Rating

Meta assigns a **quality rating** to your WhatsApp Business Account based on how recipients respond to your messages — primarily whether they block your number or report messages as spam.

| Rating     | Color     | Meaning                                                                                   |
| ---------- | --------- | ----------------------------------------------------------------------------------------- |
| **High**   | 🟢 Green  | Messages are well received. Tier upgrades are possible.                                   |
| **Medium** | 🟡 Yellow | Higher-than-average blocks detected. Tier is frozen — no upgrades until quality recovers. |
| **Low**    | 🔴 Red    | Significant negative feedback. Tier advancement is blocked. Account may be reviewed.      |

You can check your current quality rating and messaging tier in the **Meta Business Manager** under your WhatsApp Business Account settings.

***

## Advancing to the Next Tier

Tier upgrades happen **automatically** — you do not need to apply or request them manually. Meta evaluates your account every **6 hours**.

### Unverified → Tier 1

Complete **Meta Business Verification** in your Meta Business Manager. Once verified, your limit increases to 1,000 contacts/day immediately.

### Tier 1 → Tier 2 → Tier 3 → Unlimited

Automatic upgrades occur when **both** of the following are true:

1. Your account has used **≥ 50% of its current daily limit** consistently over the past **7 days**.
2. Your quality rating is **Green (High)** or **Yellow (Medium)** — not Red.

When both conditions are met, Meta upgrades your tier within approximately **6 hours**. Under optimal conditions, a single account can advance multiple tiers within the same business day.

{% hint style="success" %}
**Tip:** To climb tiers faster, focus on sending to opted-in contacts with personalized, relevant messages. Avoid blasting generic broadcasts — they drive blocks and suppress your quality rating.
{% endhint %}

***

## What Drops Your Quality Rating

Meta downgrades quality ratings when a significant share of recipients respond negatively. Common causes:

* **High block rates** — generally above 2–3% of recipients blocking your number.
* **Spam reports** — recipients tapping "Report" on a message.
* **Template violations** — using marketing-category templates for non-marketing content, or vice versa.
* **Frequency overload** — sending too many messages to the same user in a short period.

{% hint style="warning" %}
Meta enforces a general **frequency cap** of approximately 2 marketing messages per user per day across all businesses. Exceeding this returns error code `131049`. Dapta marks affected contacts and schedules a retry for the next dispatch window.
{% endhint %}

***

## Retry Logic

When a message fails to deliver, Dapta follows a structured retry policy based on the failure type.

| Failure Type                                            | Behavior                                                                       |
| ------------------------------------------------------- | ------------------------------------------------------------------------------ |
| **Transient error** (network, temporary provider issue) | Retry up to **3 attempts total**, scheduled at the next available send window. |
| **Rate limited / daily cap reached**                    | Dispatch pauses until the cap resets, then continues automatically.            |
| **Template paused or rejected**                         | Contact marked **Failed** immediately — no retries.                            |
| **Non-retryable provider error**                        | Contact marked **Failed** immediately — no retries.                            |

Once a contact reaches **3 failed attempts**, it is marked **Failed** and skipped for the remainder of the campaign.

***

## 24-Hour Deduplication Window

To prevent accidental double-sends, Dapta enforces a **24-hour deduplication window** per phone number per WhatsApp channel. If a message was already successfully sent to a phone number in the last 24 hours, any subsequent dispatch attempt to the same number is automatically skipped and logged as `dedup_skip`.

This applies **across all campaigns** that share the same agent channel.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.dapta.ai/ai-text-agents/campaigns/message-logic-and-limits.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
