Agentech Assistant

WhatsApp campaigns

A campaign sends one approved WhatsApp template message to many contacts at once, straight from your dashboard. You pick a template, add recipients, confirm they agreed to be messaged, and send. This guide covers the whole flow, what each status and failed-row message means, and the difference between Resend failed and Duplicate. For filling in recipients from a spreadsheet instead of typing them, see uploading your recipient sheet.


Who does what

WhoWhat they do
YouPick the template, add recipients (typed in or from a sheet), fix any that need fixing, confirm consent, review and send. Cancel a campaign that's still going, or resend/duplicate one that's finished.
MetaDelivers each message and can refuse any one of them — a number that isn't on WhatsApp, an opted-out contact, a payment problem on your WhatsApp Business account, and so on. Meta bills your WhatsApp Business account for what it accepts.
AgentechQueues the send, tracks every recipient's status as Meta reports it, translates Meta's failure codes into a plain sentence under each row, and automatically refunds anything Meta accepted and then failed to deliver.

Before you can send

Before any of this, a banner up top warns you when your Campaign messages are running low, used up, or ending soon — see Usage and plans.

A campaign needs:

  • WhatsApp connected. If it isn't, the Campaigns page shows "WhatsApp isn't connected yet." with a link to Connect WhatsApp.
  • Campaign messages on your plan. Every campaign uses them (see How a campaign counts). Without them, Usage shows Campaign messages as Not on your plan with a Request access button.
  • At least one approved template. A campaign can only send a Meta-approved template. With none, the page shows "No approved templates yet." with a link to Templates. Approval is usually minutes, sometimes up to 24 hours — see WhatsApp templates.

With both in place, New campaign opens the first of three pages: Template, Recipients, Review.

Which number sends? The number at the top of Campaigns in the Number list. With one number, it's already picked. With more than one, pick it. A new campaign sends from that number, and you can change it on the Template page. The template list only shows that number's templates. A campaign always sends from the number it was created with, Resend failed included, and each campaign in the list says "Sent from" and the number.


Campaign statuses

StatusWhat it means
DraftSaved but not sent yet. A new campaign is saved as a draft when you press Next: Recipients, so going back, refreshing or leaving keeps it. In the campaigns list a draft shows Continue, which opens its Recipients page.
QueuedHanded to the send engine, about to start.
SendingGoing out to recipients now.
On holdYour WhatsApp campaigns access ended partway through sending (for example a plan lapsed). The recipients who hadn't been reached yet stay waiting — press Send to the rest once access is back to finish them.
CompletedEvery recipient was reached one way or another (sent or failed).
FailedStopped partway, usually because the account's message quota ran out.
CancelledYou cancelled it.

A recipient row moves through its own statuses: Pending → Sent → Delivered → Read, or Failed. "Sent" means the message was handed to Meta, not that it arrived — Delivered and Read only move once WhatsApp itself confirms them, and not every message gets a delivered or read receipt back.


Step by step

A new campaign is three pages: Template → Recipients → Review. You can go back and forth with Back, and nothing is lost: the campaign is a Draft from the end of the first page until you send it.

1. Template

  1. Open Campaigns in the left menu and click New campaign.
  2. With more than one WhatsApp number, pick the Number to send from.
  3. Give it a Campaign name.
  4. Pick a Template from the list. Only Approved templates can be picked — anything else is shown but disabled.
  5. If the template's header shows a picture, video or file, you're asked to choose that file here — one file for the whole campaign, shown to every recipient. If you try to move on without one, you see "This template needs a [picture/video/file] in its header. Choose one for this campaign."
  6. Click Next: Recipients. The campaign is saved as a Draft.

Changing the template of a draft that already has contacts shows "A new template checks every contact on this draft again. Some may then need fixing." — a contact whose values don't fit the new template's blanks moves to Need fixing.

2. Recipients

Add contacts in either tab, or both:

  • Type contacts — a card with Number on top (the country code, then the number, e.g. 201012345678), then one labelled box for each blank in the template. Fill it and press Add to the list. There's no limit of a few contacts here: type as many as you need, one card at a time.
  • Upload a sheet — Download sheet, fill one contact per row, then Upload filled sheet (or drop the file on it). See uploading your recipient sheet. A summary card says what happened: Rows read, Added as ready, Need fixing, Already on the list.

Everything you add goes into the list under the tabs, and you can mix typed contacts and sheets on the same campaign: a second upload is added to the list already there, not instead of it.

  • A number already on the list isn't added twice. Typing a number that's already there as a ready contact shows "That number is already on the list." In a sheet, a number repeated in the same file, or already on the list as a ready contact, is dropped and counted in Already on the list.
  • A number that comes back for a row that needs fixing replaces that row. Typed again or in a new upload, it's checked again: it counts as added (ready) when it's right now, or stays under Need fixing if it still isn't.
  • Rows that need fixing are kept, marked Fix, and never sent. Tap a row to open it as a card: How to fix says what's wrong, then change it and press Save, or press Remove. Close leaves it as it is.
  • The chips All · Ready · Need fixing filter the list, and Search a number finds a contact by any part of their number. The list shows 50 contacts at a time; use Previous and Next to move through it.
  • Clear list removes every contact after you confirm "Remove all [n] recipients?".

Click Next: Review · [n] (n is the number of ready contacts) once you have at least one ready contact.

3. Review & send

This page shows:

  • The Message exactly as WhatsApp will draw it — header, body, footer and buttons — with the first ready contact's values filled in. Every contact gets their own values.
  • Recipients: the ready contacts who will get it, and Skipped (need fixing) when some rows still need fixing. Those rows are removed from the campaign when you send — go back to Recipients first if you want to fix them.
  • Campaign messages: what the campaign will use, and Left after sending — see How a campaign counts. For a marketing template you also see "Meta also charges its own fee for each marketing message, billed to your WhatsApp Business account."
  • If you don't have enough left, a warning with Top up — see Not enough Campaign messages. It never blocks sending.
  • The consent checkbox: "I confirm these contacts opted in to receive WhatsApp messages from this business." Sending is not offered without it.

Click Send to [n]. The button reads Recording consent…, then Sending….

A draft you don't want

On the Recipients and Review pages, Discard draft deletes the draft after you confirm "Discard "[name]"? The draft and every contact on it are deleted." A draft you simply leave stays in the campaigns list with Continue until you send or discard it.


Cancel a campaign

While a campaign is Queued, Sending or On hold, a Cancel button is on its detail page. (A draft hasn't sent anything: use Discard draft instead.) Confirming asks "Cancel '[name]'? Stops before the next recipient. Messages already handed to Meta cannot be recalled." — cancelling stops the campaign before it reaches its next recipient; anyone it had already sent to keeps whatever message they got, and that can't be pulled back.


Resend failed vs. Duplicate

These are two different ways to act on a campaign that's already Completed or Failed, and they do different things.

Resend failed appears when at least one of that campaign's failed rows can actually be retried — for example the WhatsApp Business account's payment method was fixed, or WhatsApp was reconnected. It shows the count, e.g. Resend failed (3), and asks you to confirm consent again before it sends. Only those specific recipients are messaged again; nothing else on the campaign is touched. Not every failure is retryable this way — a number that isn't on WhatsApp, a contact who opted out, or a template that no longer matches can't be fixed by resending, since sending the same thing again would just fail the same way (or message someone who said no). When none of a campaign's failures are retryable, Resend failed doesn't appear at all.

A resend always goes out from the campaign's own WhatsApp number. If that number has been disconnected, you see "WhatsApp is disconnected. Reconnect it, then send again." Reconnect that number, or Duplicate the campaign and send it from another number.

Duplicate is for messaging the same people again on purpose — the same offer with a small change, or the exact same send a second time. It makes a new Draft named after the original with " copy" added (e.g. "August launch copy"), with the same number, template, header file and every one of its recipients, and opens its Recipients page. Everything is editable before you send: add, fix or remove contacts there, or press Back to change the number, name, template or file. The copied contacts are checked again against the template, so any that no longer fit show under Need fixing. Meta only keeps an uploaded header file for about 30 days, so on an older campaign choose the file again on the Template page. Duplicate is always available on a finished campaign (when Campaign messages are on your plan), whether or not anything failed.


How a campaign counts

A campaign uses your Campaign messages, and each recipient counts by the template's category — Meta's own name for it, shown next to the template:

  • Marketing (offers, announcements): 5 per recipient.
  • Utility (order updates, reminders) and Authentication (verification codes): 1 per recipient.

So 5,000 Campaign messages are 1,000 marketing messages, or 5,000 reminders, or any mix. A marketing message counts as 5 because Meta charges a marketing message far more than the others. Templates you send from the Inbox use the same Campaign messages (see Messaging a customer after 24 hours). Your API messages are a separate allowance: a campaign never uses them, and the two never borrow from each other. Meta's own fee for each message is billed to your WhatsApp Business account, apart from this.

A campaign can hold up to 50,000 recipients; past that, split them into more than one campaign. Otherwise it's bounded only by the Campaign messages you have left. The review step shows the cost before you send, and the campaign's report says what it used: "Used 2,410 Campaign messages: 482 marketing × 5. The 18 that failed were given back." (for a utility or authentication template, "Used 500 Campaign messages.").

Not enough Campaign messages

"This campaign needs 6,000 messages and you have 3,100. It will reach the first 620 people, then stop. Top up first to reach everyone, or send now and resend the rest later."

You have fewer Campaign messages left than this campaign needs. This never blocks you: Send to [n] still starts the campaign, it reaches the first people on the list, and when your Campaign messages run out it stops with "Stopped partway: the account's message quota ran out". The people it didn't reach stay in the report. The warning is on the Review page.

Fix: press Top up first to reach everyone. Or send now, top up, and press Resend failed on the campaign's report to send the rest.

Meta changed a message's category

Meta sometimes counts a message under another category than the template's — for example it counts a marketing template as utility. The difference moves inside your Campaign messages: a marketing message Meta counted as utility gives 4 back; a utility message Meta counted as marketing uses 4 more. It never moves to or from your API messages.

Fix: nothing to do. The report and the split on Usage update by themselves.

Meta's daily limit per number

Meta also has its own daily limit on how many new chats a number can start. It's set per number, so with more than one number the review step shows the limit of the number you picked. This limit doesn't block the campaign: over it, Meta holds back the rest, you send them again from the campaign's report the next day, and the held-back messages are given back to your Campaign messages.


The campaign's report

Open a sent campaign from the list to see its report. The chips All · Read · Delivered · Sent · Failed · Can resend filter the recipients (each chip's count is for the whole campaign), Search a number finds one by any part of the number, and the list shows 50 at a time with Previous and Next. A failed row shows why under it; Can resend lists the ones Resend failed would send again.


Problems while building a campaign

"That number is already on the list." / "[number] is already on the list"

The contact you typed, or the number you changed a row to, is already on this campaign's list as a ready contact. Each number gets the message once. Fix: nothing to add — search the number to find the contact that's already there, and edit that one if its values need changing.

"A number in this list is already on the campaign. Check the list and try again."

Rarely, two changes reached the same draft at the same moment (for example from two tabs or two teammates), and a number you added was already put on the campaign by the other one. Nothing from your change was added. Fix: refresh the page, check the list, and add again what's missing.

"A campaign can have up to 50,000 recipients. Split it into more than one campaign."

This draft already holds 50,000 contacts, or the sheet you uploaded would take it past that. Fix: send this campaign as it is, and put the rest in a New campaign with the same template.

"A campaign needs at least one recipient"

You pressed send while no contact on the draft was ready — every row is under Need fixing, or the list is empty. Fix: go back to Recipients, fix or add contacts until at least one is Ready, then send.

"This campaign is no longer a draft (status: Sending)."

(or another status in place of Sending.) The draft was already sent, for example from another tab or by a teammate, so it can't be changed as a draft any more. Fix: go back to Campaigns and open it from the list to see its report. To send it again with changes, use Duplicate.

"Recipient not found: [id]" / "Unknown recipient filter: [name]"

The page is out of date: the contact was already removed (for example in another tab or by a teammate), or the page was open across an update. Fix: refresh the page.


Why was I charged for a message that failed?

You aren't. A campaign message is only ever charged once Meta has actually accepted it — a message that fails before reaching that point (the number is invalid, the template no longer matches, and so on) was never charged in the first place. If Meta accepts a message and then fails it afterwards — the most common case is a payment problem on your WhatsApp Business account — whatever was charged for that send is given back to your Campaign messages automatically the moment the failure comes back (a marketing message gives back 5), and the report says so: "The 18 that failed were given back." There's nothing to request and nothing to email us about for this specifically.


Why did a recipient fail?

Each failed row shows a plain-English reason under it, translated from what Meta reported. Here are the ones you'll actually meet.

"This WhatsApp number isn't activated for sending yet"

Meta hasn't switched your number on for sending, even though your templates are approved. See connect-whatsapp.md for the fix — reconnecting WhatsApp activates the number, then Resend failed reaches this row.

"A payment problem on your WhatsApp Business account stopped this message"

See connect-whatsapp.md for the fix. Once the card is added, Resend failed reaches this row.

"WhatsApp is disconnected. Reconnect it, then send again."

Your number's connection to WhatsApp dropped. With more than one number, it's the campaign's own number, since a campaign never switches to another number on its own. You can also see this when you send or resend, before anything goes out. Fix: reconnect WhatsApp from the Connect page, then use Resend failed. Or Duplicate the campaign and send it from another number.

"This template belongs to a different WhatsApp number. Pick a template for this number."

Templates belong to a WhatsApp Business account, and this template is on a different account from the number the campaign sends from. Meta would refuse every message. Fix: switch the Number at the top of Campaigns to the number the template was made on, or create the template on this number from Templates (with this number picked there).

"This template is no longer on WhatsApp. Press Sync from Meta on Templates, then pick another one."

Meta no longer has this template on your number's WhatsApp Business account. It was deleted, or your number is now on a different account. We stop before sending, so nothing is used. Fix: press Sync from Meta on Templates, then Duplicate the campaign and pick a template that's there. If the one you need is gone, create it again and wait for Meta to approve it.

"Choose which WhatsApp number to use first."

Your workspace has more than one WhatsApp number, and this action needs to know which one. Fix: pick a number in the Number list at the top of the page, or on the campaign's Template page, then try again.

"Too many messages to this contact in a short time. Try again later." / "WhatsApp held this marketing message back to protect the recipient's experience. Try again later."

WhatsApp is temporarily limiting how many messages this contact, or your account, can send or receive right now. Fix: wait a while, then use Resend failed — these rows can be sent again.

"This contact stopped marketing messages from your business."

The recipient opted out. Fix: nothing to send again — respect it and leave them off future recipient lists. This one can't be resent.

"WhatsApp couldn't deliver to this number. It may not use WhatsApp."

The number likely isn't on WhatsApp at all. Fix: check the number with the contact directly. It can't be resent as-is.

"WhatsApp didn't send this, to protect the recipient's experience."

Meta blocked this particular message on its own judgment, without a more specific reason. Fix: it can't be resent through Resend failed; if you still want to reach this contact, use Duplicate to send a fresh campaign later.

"The template's variables don't match what was filled in." / "This template isn't available in this language on WhatsApp anymore."

The template itself is the problem for this send — its blanks don't line up with what was sent, or Meta no longer offers it in that language. Fix: press Sync from Meta on the Templates page, check the template there, fix or recreate it if needed, then use Duplicate to send a corrected campaign; Resend failed won't fix a template-level mismatch.

"Meta locked this WhatsApp account. Check WhatsApp Manager for the reason."

Meta has restricted your WhatsApp Business account. Fix: open Business Support Home in Meta Business Suite to see why and appeal — see connect-whatsapp.md. We can't lift a Meta restriction. This row can't be resent until the account is clear.

"This number isn't on your test number's allowed recipients list."

This only happens while sending from a temporary Meta test number (during setup or review), which can only message numbers explicitly added to its list. It shouldn't appear once you're sending from your own connected number.


"I had Marketing messages or Other messages"

They're now Campaign messages (everything sent from Campaigns, and templates sent from the Inbox) and API messages (everything sent through the Developer API), with a marketing message counting as 5 in both. Nothing you paid for was lost: what was left moved to your balance, and we sent you a one-time notice saying how much. See I had Marketing messages or Other messages. Fix: nothing to do. If the number looks wrong, email us.

When to email us

For anything a fix above doesn't resolve, see When to email us. Include the campaign's name and, for a specific recipient, the phone number and the message shown under that row.