> 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/create-a-campaign.md).

# Create a campaign

Creating a campaign takes four steps. Each step saves automatically so you can pick up where you left off at any time.

## Navigate to Campaigns

In the left sidebar, click **Campaigns**. Then click **Create campaign** in the top-right corner.

<figure><img src="/files/9SE2CFVSAcwcazUNJtcJ" alt=""><figcaption></figcaption></figure>

***

## Step 1 — Basic Data

This step defines the identity of your campaign and links it to a WhatsApp channel and message template.

<figure><img src="/files/pRsWal3iw3FkkIHPgpXQ" alt=""><figcaption></figcaption></figure>

**1.** Enter a **Campaign Name**. This name is only visible to your team — contacts never see it.

**2.** Optionally fill in the **Campaign Objective** (up to 500 characters). Use this to describe the goal of the campaign for your team's reference.

**3.** Select a **Channel** — the WhatsApp number that will send the messages.

<figure><img src="/files/7T5RAlZs7k3qIc37p9I1" alt=""><figcaption></figcaption></figure>

**4.** Select a **Template** — the approved WhatsApp message template to send. Only templates with **Approved** status appear in this list.

<figure><img src="/files/qi9ELbZSrBjTbYRNcAwK" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Templates must be approved in your Meta Business Manager before they appear here. If the list is empty, check that your channel has approved templates linked to it.
{% endhint %}

**5.** Click **Save and continue**.

<figure><img src="/files/WsqaLl2RxbRniZbPg8TZ" alt=""><figcaption></figcaption></figure>

***

## Step 2 — Schedule Your Campaign

This step defines when your campaign is allowed to send messages.

<figure><img src="/files/0jLavNfmMvH17xKpzXCl" alt=""><figcaption></figcaption></figure>

**1.** Set a **Start date** (required). The campaign will not dispatch any messages before this date.

**2.** Set an **End date** (optional). If left empty, the campaign runs for one year from the start date.

**3.** Choose **Contact days** — when messages can be sent:

<figure><img src="/files/cRPWe59WLeM3AkKnrfg2" alt=""><figcaption></figcaption></figure>

* **Every day** — dispatch runs seven days a week.
* **Weekdays** — dispatch runs Monday to Friday only.
* **Custom** — enable specific days of the week.

**4.** Select the **Time zone** for the campaign. All send windows are evaluated in this time zone.

**5.** For each active day, set one or more **time slots** (start time – end time). Messages will only be sent during these windows.

{% hint style="warning" %}
If the campaign is running and reaches a point outside all configured windows, it pauses automatically and resumes when the next window opens. No contacts are skipped.
{% endhint %}

**6.** Review the **Campaign summary** at the bottom of the form, then click **Save and continue**.

***

## Step 3 — Upload a File

Upload a CSV or XLSX file containing your contacts. Each row in the file represents one contact.

<figure><img src="/files/hEDBzpOVZhAe86xBu9Bb" alt=""><figcaption></figcaption></figure>

**1.** Click the upload area or drag and drop your file. Accepted formats: **CSV**, **XLSX**. Maximum size: **5 MB**.

**2.** Your file must include a `phone_number` column. A `name` column is recommended. Any additional columns can be mapped to template or conversation variables in the next step.

**3.** Click **Download template** to get a ready-to-fill CSV with the correct headers.

{% hint style="info" %}
You can click **Skip** to save the campaign as a draft and upload contacts later from the campaign's **Settings** tab.
{% endhint %}

**4.** After the file uploads, review the import summary (rows received, inserted, duplicates, invalid). Click **Save and continue**.

***

## Step 4 — Variables Mapping

Map the columns from your file to the variables in your WhatsApp template and to your agent's conversation context.

<figure><img src="/files/xTi6IWsyFA9gpZBEeSkG" alt=""><figcaption></figcaption></figure>

### Template Variables

These map file columns to the dynamic placeholders inside your WhatsApp template — for example, `contact_name` → the column `name` in your file.

**1.** For each template variable, select the matching column from your file using the **Columns in your file** dropdown.

<figure><img src="/files/gjNpQARgPVODDW4mz3jR" alt=""><figcaption></figcaption></figure>

**2.** Click **Auto-map** to let Dapta automatically match template variables to file columns by name.

### Conversation Variables

Conversation variables are optional. They pass additional context from your file to your text agent so it can reference that data during reply conversations.

**3.** For each conversation variable your agent uses, select the matching file column — or leave it as **Select column** to skip it.

**4.** Click **Finish**. Your campaign is created and contacts begin importing immediately.

{% hint style="success" %}
Once you click **Finish**, the campaign starts dispatching messages according to your schedule. You can monitor progress from the **Conversations** tab on the campaign detail page.
{% endhint %}


---

# 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/create-a-campaign.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.
