Campaigns
Campaigns are bulk sends: you pick a channel connector, choose the message (an approved WhatsApp template, a custom email or an SMS text), load a list of recipients with their variable values, and send to everyone at once. Each recipient's reply is routed into a conversational flow you choose, so the campaign is not just a blast — it is the entry point of a conversation.
The list view shows every campaign with its delivery metrics; the detail view shows the configuration, the recipient table with per-recipient status and error, and the send actions.
Creating a Campaign
Configuration Fields
| Field | Description |
|---|---|
| Name | Display name of the campaign |
| Channel | WhatsApp, Email or SMS — locked after creation |
| Connector | The channel connector that sends the messages (a WhatsApp number, an email inbox or an SMS number) — locked after creation |
| Template (WhatsApp) | An approved template pulled from the connector; its variables and examples load automatically |
| Subject and Body (Email) | Free-text subject and HTML body; {{placeholder}} tokens become variables |
| SMS message (SMS) | Free-text body; {{placeholder}} tokens become variables |
| Target Flow | The conversational flow that handles recipient replies. For SMS it is only offered when the connector can receive replies (two-way) |
Variables
You do not map variables manually. For WhatsApp, they come from the template definition; for email and SMS, they are parsed from {{placeholder}} tokens in the message. The extracted variable names become the column headers your recipient file must provide.
Adding Recipients
File Upload
Upload an .xlsx, .xls, or .csv file. The required columns are:
phone(WhatsApp) oremail(Email) — the destination- One column per template variable, matching the variable name exactly
metadata(optional) — a JSON object attached to the recipient
You can download a pre-built CSV template from the campaign with the correct headers and an example row. After upload, the file is validated in real time; validation errors are reported per row (up to 40 shown).
Manual Entry
Add recipients row by row in the UI: destination, one field per variable, and an optional metadata JSON field. Invalid JSON in the metadata field blocks the row from being added.
Recipient Metadata
The metadata object travels with the recipient: when the message goes out, it is attached to the recipient's conversation as campaign metadata. The AI collector node reads it as context for the agent, so you can hand it the amount due, the product or the branch without asking the customer again.
Flow variables are a different thing: nothing inside the flow writes a value that comes from the campaign, so when you publish the target flow the gate may warn about a variable that a node reads and no node assigns:
Reads variable 'name' but no node in this flow assigns it a value. If another flow fills it before jumping here, or it arrives in a campaign's metadata, you can ignore this warning; otherwise the node will run without that data.
That warning never blocks publishing. Read it as a question — who fills this variable? — and ignore it only when you know the answer; otherwise the node runs with the variable unset.
Sending
The Send action delivers the message to every recipient still in pending status. Sending is immediate — there is no scheduler and no separate test send. The Send button is disabled when there are no pending recipients, and while a send is in progress.
From the recipient table you can also:
- Send to selected — tick one or more recipients and send only to them, whatever their status (except discarded).
- Resend failed — one button above the table resends to every recipient in
failed. Copy phone numbers next to it copies the failed destinations to the clipboard. - Discard — per-row action that takes a recipient out of the campaign without deleting the row. Discarded recipients are excluded from sends and from the campaign counters.
When Meta Limits the Sending Number
Meta limits a WhatsApp business number in three ways that matter to a campaign: how many conversations it can start per day, whether it is restricted for spam, and how fast it can send. The campaign reacts to each one differently.
Daily Conversation Limit
Every WhatsApp number has a tier that caps how many conversations it can start per day. A new number from a business that is not verified with Meta starts at 250. Before a WhatsApp send, the confirmation adds a line when the pending recipients exceed that limit, for example: Heads up: this number can start up to 250 conversations per day and you are sending to 688. Meta will hold back the rest, and a large send from a new number can get it restricted.
The warning only informs; you can still send. If the number's tier cannot be read at that moment, the confirmation shows no warning and the send goes ahead as usual. To stay under the limit, split the list into several days, or ask for a higher tier in 360dialog.
Automatic Stop When the Number Is Restricted for Spam
When Meta answers 131048 (Spam rate limit hit), it is restricting the number, not refusing one recipient: too many earlier messages were blocked or reported. That answer arrives in the delivery report after the send, so the campaign used to keep sending, and every further send lowers the number's quality and can get a new number blocked.
Now the first 131048 stops the campaign on its own:
- The send in progress stops within seconds. Recipients that had not been sent yet stay
pending, notfailed, so they are still there for a later send once the number recovers. - The campaign detail shows a banner, Campaign stopped on {date}, with the reason. Without a reason it reads Meta restricted the number that sends this campaign. The recipients it had not reached yet are still pending.
- Sending again asks for confirmation. Any send from a stopped campaign, to all pending recipients or to the selected ones, first shows: This campaign stopped because Meta restricted the number for spam (131048): many earlier messages were blocked or reported. Sending more can lower the number quality or get it blocked. Send anyway? Only if you accept does the send go out, and the stop is cleared.
Other codes do not stop the campaign. 131049 (Meta's marketing cap per user) is a normal per-recipient answer and the campaign keeps going.
What to do: check the number's quality in the WhatsApp Manager, wait for it to recover, and resume with a smaller list. Sending right away to the rest of the list is exactly what Meta restricted.
Sending Too Fast
Meta also caps how many messages per second a number or an account can send (130429 and 80007, the number reached its sending limit). This limit is temporary, so the campaign handles it on its own:
- Each message is retried for a short while before it counts as failed.
- The whole campaign slows down. A rate-limit refusal makes every remaining recipient wait, longer after each refusal, and the pace recovers little by little as messages go out again.
- A recipient whose message still could not go out ends in
failedwith that reason in its error column, for example[130429] WhatsApp no entregó el mensaje: el número alcanzó su límite de envíos. - If the refusals keep coming with no message going out, the campaign gives up instead of pushing the rest of the list against the limit. The recipients it did not try are marked
failedwith the reason Campaña detenida: Meta rechazó por límite de tasa N envíos seguidos sin que ninguno saliera..., which also tells you to send them later.
Meta lifts this limit with time, not with retries. Wait a while and use Resend failed; to avoid it, send smaller or staggered batches, or ask 360dialog to raise the number's tier.
Failed Recipients
A recipient ends up in failed in two moments: when the provider rejects the send, or later, when WhatsApp reports that the message never reached the phone.
Rejected at Send Time
When the connector refuses a message, the recipient's row keeps the reason in its error column: the provider code in brackets followed by a readable title, for example [131047] WhatsApp no entregó el mensaje: la ventana de 24 horas está cerrada. The table shortens the most common ones to a one-line hint (24-hour window, marketing frequency limit, number not on WhatsApp, spam restriction, invalid connector credential). One failed recipient never aborts the batch; the rest of the list is still sent and the campaign ends in partial.
If the recipient was already linked to a conversation by an earlier send, that conversation gets a warning notice reading La campaña '{name}' no pudo enviar el mensaje a este destinatario ("Campaign '{name}' could not send the message to this recipient"), whose reason is the rejection's code and title. The full explanation and the action to take arrive through the delivery-failed notice when Meta reports the message status.
Failed After Sending
WhatsApp accepts a message first and can report hours later that it was not delivered. When that happens the recipient moves from sent, delivered or read to failed, its error column keeps Meta's code and title, and the campaign counters are recalculated. The recipient's conversation gets two notices:
- A
delivery_failednotice with the rejection explained: what happened, what to do, and Meta's original line. Its level comes from the cause — a known, expected rejection is awarning; a broken token or an unregistered number is anerror. - A
warningreading El mensaje de la campaña {id} no llegó a este destinatario; el destinatario quedó como fallido ("The campaign message did not reach this recipient; the recipient was marked as failed").
The rejections you will see most often in a campaign:
| Code | What it means | What to do |
|---|---|---|
131047 | A free-form message was sent outside the 24-hour window after the customer's last message | Only an approved template reaches the customer outside the window; check that the follow-up your flow sends is a template |
131049 | Meta capped marketing messages to this user for the period | Do not resend; it will not go through until Meta frees the quota. Use a utility template if the content is transactional |
131050 | The customer opted out of marketing from this business | Mark the contact as not reachable for marketing; only utility or authentication templates can reach them |
131048 | The sending number is restricted for spam | The campaign stops on its own (see Automatic Stop When the Number Is Restricted for Spam). Check the number's quality in the WhatsApp Manager before sending again |
130429 / 80007 | The number or the account hit its sending limit | The campaign slows down on its own (see Sending Too Fast). Send smaller or staggered batches; if it recurs, ask 360dialog to raise the tier |
131026 | The number is not on WhatsApp or cannot receive messages | Clean the contact from the list |
Every code, its level and its action are listed in the notice codes catalog. Read one recipient's notices in the Chat notices panel; to see how many conversations of a flow hit the same rejection, open Conversational > Flow Notices — the Flow Notices screen groups them by flow and node.
Paused or Disabled Templates
Meta pauses a template (132015) when too many customers block or report it, and disables it permanently (132016) after repeated pauses. Both states, together with rejected and flagged, reach the hub through the template webhook and through the template sync of the connector, so the template's status in WhatsApp Templates reflects what Meta decided.
A campaign that still uses that template fails on every recipient with the explanation and the action, for example: WhatsApp no envió la plantilla: Meta la pausó por baja calidad — "Wait for Meta to reactivate it or create a new version with different text. Pause the campaigns that use it." A disabled template will never work again: create and approve a new one and update the nodes and campaigns that used it.
When the template status changes, the system also records which campaigns in draft, sending or partial still use it. That record is an operational log for support, not a notice in the hub: what you see in the hub is the failed recipients and their reason.
To recover a campaign whose template was paused or disabled, the Resend failed block shows a template selector with the approved templates of the same connector. Pick one and resend; the campaign keeps the new template for later sends. The new template must declare the same variables in the same order, since the recipient values are filled by position.
Replies and the Target Flow
Every reply from a recipient enters the campaign's Target Flow from its first node, on the same conversation the message went out on. The campaign remembers its flow on the conversation, so a reply still reaches it even after the conversation timed out for inactivity.
If the target flow was deleted or set inactive between the send and the reply, the conversation does not break:
- The connector has a default bot. The conversation restarts in that bot and gets a
warningnotice: El flujo {id} ya no existe o está inactivo; la conversación se redirigió al bot por defecto {default} ("Flow {id} no longer exists or is inactive; the conversation was redirected to the default bot {default}"). - The connector has no default bot. Nothing is sent back and the conversation gets an
errornotice saying the customer wrote, the flow no longer exists and the connector has no default bot, so the message was ignored — configure a default bot or reassign the conversation.
Both notices name the flow, so Flow Notices shows at a glance how many recipients replied to a campaign whose flow is gone.
Lifecycle and Statuses
Campaign Statuses
| Status | Meaning |
|---|---|
draft | Configured but not sent; still editable |
sending | Send in progress |
sent | All messages were sent |
partial | Some messages sent, some failed |
failed | The send operation failed |
The final status is recomputed after every send and after every delivery report: a campaign in sent moves to partial when a delivery failure arrives later.
Recipient Statuses
| Status | Meaning |
|---|---|
pending | Waiting to be sent |
sent | Handed off to the provider |
delivered | Delivered to the recipient |
read | Read by the recipient (WhatsApp only) |
failed | Send or delivery failed, with the error message |
responded | The recipient replied |
discarded | Taken out of the campaign by hand; excluded from sends and counters |
Actions
| Action | Availability |
|---|---|
| Edit | Draft campaigns only |
| Send | When there are pending recipients |
| Send to selected | When at least one recipient is ticked |
| Resend failed | When there are failed recipients |
| Discard | Any recipient that is not already discarded |
| Add Recipients | Any time before/between sends |
| Reuse | Duplicates the campaign as a new draft with the same channel, connector, message and target flow, without recipients |
| Delete | Removes the campaign |
Metrics
The campaign list shows aggregate counters per campaign: total recipients, sent, delivered, read, and responded. The detail view breaks this down per recipient, including the first response text when the recipient replied.
Gotchas
- Channel and connector are locked after creation, and Reuse keeps them. To send through a different number or inbox, create a new campaign.
- Variable columns must match by name. The file's headers must match the template's variable names exactly — download the CSV template to get them right.
- Read receipts are WhatsApp-only. Email campaigns will not show
readstatus. - All replies land in one flow. Every recipient response is routed to the campaign's target flow; there is no per-recipient routing.
- WhatsApp templates must be approved. The template picker only offers templates already approved on the connector's WhatsApp account, and a template Meta pauses or disables afterwards fails the send with that reason.
- A spam restriction stops the campaign; a speed limit only slows it. After
131048the unsent recipients staypendingand sending again asks for confirmation. After repeated130429refusals the campaign gives up and the untried recipients end infailed, ready for Resend failed later. - Marketing limits are not retryable. A recipient rejected with
131049or131050will fail again if you resend; take it out of the list instead. - A campaign's failures are also notices. If a flow's numbers look wrong in Flow Notices, check whether a campaign pointing at it is the source.
Chat
Real-time inbox where agents monitor conversations, take over from bots, read the notices a flow left behind, and respond to customers.
Channel Connectors
Configure the channels that receive customer messages — credentials, default responder, timeout, keywords, support hours, and what each channel accepts.