Campaigns — Campaign Builder (Wizard)
URL:
/ou/{orgId}/campaign-builderPrerequisite: Active channel (WhatsApp) + Templates approved by Meta
1. Wizard Structure
The builder is a 6-step wizard with a visual progress indicator at the top:
① Import ② Preview ③ Select ④ Configure ⑤ Configuration ⑥ Summary
Contacts Contacts template templateEach step shows:
- A representative icon
- The step name
- A visual indication of the current step
2. Step 1: Import Contacts 👥
"Upload a CSV file with your leads' information"
2.1 Tab: Import CSV (default)
| Element | Type | Description |
|---|---|---|
| Upload area | Drag & drop | "Click to upload or drag and drop" |
| Choose File | Button | System file picker |
| Supported formats | — | CSV, XLS, XLSX |
| Maximum size | — | 4.5 MB |
2.2 Tab: Select Contacts (NEW)
| Element | Description |
|---|---|
| Function | Select contacts from the existing Darwin AI base |
| Status | NEW — recent feature |
How it works:
- Displays the full table of contacts in the base
- "All history" — counter of selected contacts
- "Select all contacts in the table" — checkbox for bulk selection
- Columns: Name, Type, Status, Channel, Lead, Pipeline, Stage, Created on, Transferred to, Transferred on, Next follow-up, Lead's last reply, Source, ✨ Custom Fields
- Full pagination
2.3 CSV Template
| Action | Description |
|---|---|
| Download the template file here | Download the CSV template to fill in |
2.4 Navigation
| Button | Initial state | Condition to enable |
|---|---|---|
| Next | Disabled | CSV upload OR contact selection |
3. Step 2: Preview Contacts 👥✅
"Make sure all columns are correctly labeled and indicate which column contains the leads' phone number."
3.1 Campaign Optimization
| Element | Type | Description |
|---|---|---|
| Toggle | Switch | Active/Inactive |
| Description | — | "Campaign Optimization automatically excludes contacts that match your filter rules. Add at least one rule to enable it." |
3.2 Contact Validation
| Element | Description |
|---|---|
| Success alert | "Your list is all set! We cross-checked the data and none of these contacts were inactive in previous campaigns." |
| Filter Contacts | Button with contact count |
3.3 Column Mapping
| Field | Type | Description |
|---|---|---|
| Phone number | Combobox | Selects which column contains the phone (e.g., "Phone Number") |
3.4 Table Preview
| Column | Description |
|---|---|
| Name | Editable textbox — name column mapping |
| Phone Number | Editable textbox — phone column |
| Channel | Editable textbox — source channel |
| ✨ Custom Fields | Editable textbox — custom fields |
3.5 Navigation
| Button | Description |
|---|---|
| Back | Returns to Step 1 |
| Next | Advances to Step 3 |
4. Step 3: Select Template 📋
"Select a template for your campaign""Please choose the channel and template you want to use to send your message to the leads you selected earlier."
4.1 Actions Bar
| Element | Type | Description |
|---|---|---|
| Search templates | Textbox | Search by name/content |
| Filters | Button with badge | Advanced filters |
| Number - Channel Name | Combobox | WhatsApp channel selector |
| Refresh templates | Button | Syncs templates with Meta |
4.2 Templates Table
| Column | Description |
|---|---|
| Radio | Select template |
| Template name | Name + Meta BM ID |
| Message | Preview + "See more" |
| Template Type | Marketing, Utility |
| Creation date | Approval date |
| Status | approved, pending, rejected |
4.3 Available Templates
| Name | Type | Message |
|---|---|---|
| Follow up 2 pt-pt | Marketing | "Não hesite em contactar-me caso necessite de apoio..." |
| Follow up 1 pt-pt | Utility | "Chegaste a ver a minha última mensagem?" |
| Contato inicial | Marketing | "Olá, tudo bem? Falamos do Mais Carros..." |
4.4 Actions
| Action | Description |
|---|---|
| Request new template | Submit a template for Meta approval |
| Back | Returns to Step 2 |
| Next | Disabled until a template is selected |
5. Step 4: Configure Template ⚙️
"Configure your template""Map the template placeholders to the CSV columns by clicking on them."
5.1 Message Preview
| Section | Content |
|---|---|
| Body | Full text of the selected template |
5.2 Variable Mapping
- If the template contains placeholders (e.g.,
{{nome}}), they appear here for mapping to CSV columns - Templates without variables skip straight through
5.3 Navigation
| Button | Description |
|---|---|
| Back | Step 3 |
| Next | Step 5 |
6. Step 5: Configuration 🎚️
6.1 Campaign Fields
| Field | Type | Required | Description |
|---|---|---|---|
| Campaign Name | Textbox | ✅ | Campaign identifier |
| Source | Textbox | ✅ | Placeholder: "Example: CRM, HubSpot, Sales Base 2023" |
| Initial Pipeline | Combobox | ✅ | Pipeline to process replies (e.g., "Sales Qualification") |
6.2 Start Date
| Option | Description |
|---|---|
| Start now (default) | Immediate send after confirmation |
| Schedule | Specific date and time |
6.3 Days of the Week
Toggle buttons for each day:
| Day | Default |
|---|---|
| Mon | ✅ Selected |
| Tue | ✅ Selected |
| Wed | ✅ Selected |
| Thu | ✅ Selected |
| Fri | ✅ Selected |
| Sat | ✅ Selected |
| Sun | ❌ |
Counter: "Selected: X days"
6.4 Sending Window
| Field | Default | Description |
|---|---|---|
| Start time | 09:00 | Hour/minute spinbuttons + clock |
| End time | 21:00 | Hour/minute spinbuttons + clock |
6.5 Total Leads
Displays: "Total leads selected: X"
6.6 Navigation
| Button | State | Description |
|---|---|---|
| Back | — | Step 4 |
| Next | Disabled | Tooltip: "Complete all the information to continue" |
7. Step 6: Summary ✅
"Campaign summary""Review the configuration before launching the campaign."
7.1 Summary (after loading)
| Field | Value (example) |
|---|---|
| Campaign name | Test KB |
| Channel | Mais Carros · 351934649174 |
| Recipients | 1 |
| First message | 14/07/2026 14:28 |
| Last message | 14/07/2026 14:28 (estimated) ℹ️ |
| Pace | - |
| Sending window | 09:00 - 21:00 |
| Sending days | Mon, Tue, Wed, Thu, Fri, Sat |
| Assignment | Sales Qualification |
| Message | Template: contato_inicial_ID + full text |
ℹ️ "Last message" tooltip: "This date is an estimate. It may change if another campaign is created on the same channel during this period."
7.2 Navigation
| Button | Description |
|---|---|
| Back | Returns to Step 5 |
| Confirm and launch 🚀 | Sends the campaign |
8. Complete Flow (Real)
Step 1: Import Contacts
├── Option A: Upload CSV (drag & drop, CSV/XLS/XLSX, max 4.5MB)
│ └── Download CSV template to fill in
└── Option B: Select Contacts from the base (NEW)
└── Checkbox in the table of existing contacts
Step 2: Preview Contacts 👥
└── Preview and validation
Step 3: Select Template 📋
└── Choose an approved WhatsApp template
Step 4: Configure Template ⚙️
└── Map the template variables
Step 5: Configuration 🎚️
└── Name, scheduling, speed, worker
Step 6: Summary ✅
└── Review and launch 🚀9. Post-Launch
After launch, the campaign appears in the Campaign List with:
- Real-time metrics (Delivered, Replied, Pending, Failed)
- Status updated automatically
- The ability to pause/resume └── Confirm → Next
Select Template ├── Choose an approved WhatsApp template └── Confirm → Next
Configure Template ├── Map the template variables └── Confirm → Next
Configuration ├── Campaign name ├── Scheduling ├── Sending speed └── Confirm → Next
Summary ├── Review all settings └── Launch campaign 🚀
---
## 10. Post-Launch
After launch, the campaign appears in the Campaign List with:
- Real-time metrics (Delivered, Replied, Pending, Failed)
- Status updated automatically
- The ability to pause/resume