Campaigns
Send WhatsApp and Telegram broadcasts, drip sequences, and A/B tests to opted-in audiences, with consent gating and Shopify cart recovery.
Objective
Reach your contacts at scale over WhatsApp and Telegram, then let your AI agent handle the replies. Campaigns lets you send one-off broadcasts, multi-step drip sequences, and A/B tests to a saved audience, with consent and frequency rules enforced automatically before anything goes out. It also includes two-click retargeting of a completed campaign and a Shopify cart-recovery card that closes abandoned carts over WhatsApp.
Access
Sidebar -> Customers -> Campaigns
Route:
- Campaigns: /app/{tenant}/campaigns
Related setup lives in other modules:
- Audiences (segments) and consent: /app/{tenant}/contacts/audiences
- WhatsApp message templates: /app/{tenant}/whatsapp
Roles
- owner, admin — full access: create, schedule, pause, resume, cancel, retry, retarget, and manage the Shopify connection.
- agent, viewer — no access. Campaigns does not appear in the sidebar and its actions are blocked server-side.
- Campaigns is part of a gradual rollout. If it is not yet enabled for your workspace, contact support.
Prerequisites
- A paid plan that includes campaigns. Without it, the page shows an upgrade panel instead of the module.
- owner or admin role.
- At least one active sender for your chosen channel:
- WhatsApp: a number connected through the Meta Cloud API (Twilio numbers are not supported for campaigns). See WhatsApp.
- Telegram: an active Telegram account. See Telegram.
- At least one saved Audience (segment), created in Contacts -> Audiences and consent.
- For WhatsApp: at least one APPROVED marketing or utility template in the WhatsApp module. Authentication templates cannot be broadcast.
- For marketing sends: contacts with a recorded marketing opt-in. Consent is captured and managed in Contacts -> Audiences and consent.
Plan and usage
The header shows how many campaign messages you have used this cycle against your monthly cap (for example, 120 of 5,000 campaign messages, or Unlimited campaign messages). The cap is per calendar month; sends that would exceed it are blocked at preview and at schedule time.
If conversations have arrived from click-to-WhatsApp ads, a strip also shows how many (N conversations from ads), so you can build an audience or retarget those people.
Create a campaign
Press New campaign to open the composer, fill in the fields, then press Save as draft. Nothing is sent until you review the draft and press Schedule & send from the list.
| Field | Channel | Notes |
|---|---|---|
| Campaign name | Both | Internal name only; never shown to recipients. |
| Channel | Both | WhatsApp or Telegram. |
| Send from | Both | An active sender for the channel. If none appears, connect one first. |
| Audience (segment) | Both | A saved segment. If none appears, create one in Contacts first. |
| Template | Pick an approved template. Each option shows its name, language, and type (Marketing or Utility). | |
| Personalize the template variables | Map each numbered placeholder to Contact name, Contact company, Contact email, Contact phone, or Fixed text. | |
| Message | Telegram | Free text up to 3,800 characters. |
Template name, language, and type are always chosen from your approved list, never typed by hand — so a template's type cannot be changed to dodge the consent gate.
Preview audience
Press Preview audience in the composer to see, for the selected segment and message type:
- how many contacts are sendable out of the total,
- how many are skipped — no marketing opt-in,
- how many are skipped — policy or frequency cap,
- an estimated WhatsApp cost (billed by Meta), and
- a warning if the send would exceed your plan's monthly limit.
The preview resolves the segment's real rules on the server, so the numbers match exactly what scheduling will enqueue.
Schedule and send
From the campaign list, press Schedule & send on a draft. This materializes the recipient list, applies consent and frequency checks, and moves the campaign to Scheduled. Messages then send in the background at a throttled rate.
A/B testing
In the composer, enable A/B test two versions to send two variants:
- Provide a second variant (Variant B template name for WhatsApp, or Variant B message for Telegram).
- Set Pick winner after (minutes) — at least 30.
- The audience is split 50/50. After the window, the higher-performing variant is sent to the rest. The winning metric is reply for marketing and read for utility.
A/B and drip cannot be combined in one campaign.
Drip sequences
In the composer, enable Add follow-up steps (drip) to send a sequence:
- Add up to 10 steps.
- For each step, set Send after (minutes) — between 5 minutes and 30 days — and choose a template (WhatsApp) or write a message (Telegram).
- Each step sends only if the contact has not replied yet. A reply cancels the remaining steps.
Drip and A/B cannot be combined in one campaign.
Manage campaigns
Each row shows the campaign name, status, channel, type, and a delivery funnel: queued, sent, delivered, read, replied, plus counts of skipped and failed recipients.
Statuses
| Status | Meaning |
|---|---|
| Draft | Saved but not yet scheduled. |
| Scheduled | Recipients enqueued; sending is about to begin. |
| Sending | Messages are going out at the throttled rate. |
| Paused | Sending is stopped and can be resumed. |
| Completed | All recipients processed. |
| Failed | The campaign could not continue (for example, a sender credential problem). |
| Canceled | Stopped manually; remaining recipients are not sent. |
Actions by status
| Status | Available actions |
|---|---|
| Draft | Schedule & send, or delete the draft. |
| Scheduled / Sending | Pause, or Cancel. |
| Paused | Resume, or Cancel. |
| Completed / Failed / Sending (with failures) | Retry failed — re-queue recipients that failed. |
| Any (with quota skips) | Retry (quota) — re-queue recipients skipped for the monthly limit. |
| Completed (with sends) | Retarget: unread and Retarget: no reply. |
Retargeting
After a broadcast completes, Retarget: unread and Retarget: no reply each create a ready-to-review draft aimed at that campaign's unengaged contacts (delivered-but-not-read, or read-but-not-replied). The new draft reuses the source campaign's channel, sender, and message, so retargeting is two clicks: create the draft, then Schedule & send.
Consent and frequency caps
Consent is enforced automatically at send time and cannot be bypassed:
- Marketing messages go only to contacts with an explicit marketing opt-in on that channel. Anyone else is skipped as no marketing opt-in.
- Utility messages go to everyone except contacts who have opted out.
- A tenant-side frequency cap allows at most 3 marketing messages per contact, per channel, per 7 days, counted across all your campaigns. Utility messages are never capped.
Opt-ins and opt-outs are recorded and managed in Contacts -> Audiences and consent (from keyword replies, manual entry, or an opt-in CSV import).
Shopify cart recovery
The Shopify cart recovery card connects a store and sends one consent-gated WhatsApp message when a cart is abandoned. The reply lands on your AI agent, which closes the sale.
Connect a store
In your Shopify admin, go to Settings -> Apps and sales channels -> Develop apps, create a custom app with read_checkouts and read_orders scopes, then paste into the card:
- your store's myshopify.com domain,
- the Admin API access token, and
- the API secret key.
Both secrets are encrypted at rest and never returned to the browser. The number of connected stores is limited by your plan.
Configure recovery
Enable Send a recovery message for abandoned carts, then set:
| Setting | Notes |
|---|---|
| Wait (minutes) | Delay before the message is sent — between 15 minutes and 3 days. |
| Template | A marketing WhatsApp template (Meta classifies cart recovery as marketing). |
| Send from | The WhatsApp number to send from. |
The card shows a health badge (Connected or Attention needed) and a funnel: carts watching, recoveries sent, recovered, plus skipped and failed. Only one message is ever sent per cart, and marketing consent still applies.
Good practices
- Build and reuse audiences in Contacts, and keep marketing opt-ins current so more contacts are sendable.
- Reserve utility templates for genuinely transactional messages; use marketing for promotions.
- Always Preview audience before scheduling to catch consent, frequency, and quota issues.
- Use A/B to test copy on a 50/50 split; use drip for gentle follow-ups that stop as soon as someone replies.
- After a broadcast completes, retarget unread or no-reply contacts in two clicks.
Common errors
- Campaigns are on paid plans — the module is locked; upgrade from the billing page to unlock it.
- No active sender — connect one first — connect a Meta Cloud API WhatsApp number or an active Telegram account.
- No segments — create one in Contacts first — create a saved audience in Contacts -> Audiences and consent.
- This segment has no matching contacts — widen the segment's rules.
- This send would exceed your monthly campaign message limit — wait for the next cycle or upgrade your plan.
- Only draft campaigns can be scheduled / Only draft campaigns can be deleted — the campaign already left the draft state.
- No approved templates / The template must already be approved in your WhatsApp Business account — get the template approved in the WhatsApp module first.
- Could not load your templates — a temporary problem; try again in a moment.
- Enter your store's myshopify.com domain / Shopify rejected the token — check the custom app domain and credentials.
- You've reached your plan's connected-store limit — disconnect a store or upgrade your plan.