Campaigns
Website campaigns, WhatsApp campaigns, HSM templates and variables.
Campaigns overview
Overview ConversaLabs Campaigns let you reach your contacts proactively β instead of waiting for them to start the conversation. In one place you create, schedule and track outbound message sends to defined audiences, with delivery and outcome metrics. There are two main families of campaign: - Website campaigns: proactive messages shown in your site's chat widget, triggered by rules (for example, which page the visitor is on and for how long). Great for engaging people who are browsing right now. - WhatsApp campaigns: sends to contact lists (audience defined by labels), using approved HSM templates or messages with variants, with scheduling and send pacing. Each type has its own article in this category, with the full walkthrough. Depending on the channels enabled in your account, you may also find SMS campaigns, which follow the same logic as WhatsApp ones. Prerequisites - Access to the Campaigns module (may depend on your access role β talk to an administrator). - For website campaigns: an active website/widget inbox. - For WhatsApp campaigns: a connected WhatsApp inbox and, for templates, approved templates. - Organized contacts (especially labels, used to define the audience). Step by step 1. Open Campaigns in the sidebar. 2. Choose the campaign type (website or WhatsApp). 3. Click Create campaign. 4. Give it a title and select the inbox (channel) that will send it. 5. Build the content (message, template or proactive message) and define the audience or the trigger. 6. Choose when to send (now, scheduled, or save as draft) and confirm. 7. Track the campaign status and metrics in the list. Settings & options - Campaign type: website (proactive in the widget) or WhatsApp (for lists). - Channel / inbox: defines where the message is sent from. - Audience or trigger: audience by labels (WhatsApp) or page/time rule (website). - Content: HSM template, message with variants, or proactive message. - Scheduling: send now, schedule for later, or keep as a draft. - Status and metrics: track sent, delivered, read and replied. Use cases - Greet visitors on a pricing page and offer help in real time (website campaign). - Announce a promotion to a list of labeled customers (WhatsApp campaign). - Re-engage old contacts with a segmented, scheduled message. - Communicate important notices (hours change, new feature) to the right audience. Tips, limits & best practices - Start with small, well-segmented audiences by labels β quality beats volume. - On WhatsApp, respect Meta's rules and anti-ban best practices (send pacing, relevant content, opt-out option). - Keep messages clear and useful to reduce blocks and increase replies. - Test your content with a small audience before a large send. Troubleshooting - I don't see Campaigns: the module may not be enabled for your account or role β talk to an administrator. - I can't pick an inbox: confirm the right channel is connected (website for website campaigns; WhatsApp for WhatsApp campaigns). - Empty audience: check whether there are contacts with the selected label. See also - Website campaigns - WhatsApp campaign for contact lists - HSM templates and variables
Website campaigns (proactive widget messages)
Overview Website campaigns (also called live campaigns) show a proactive message in your site's chat widget to a visitor who is browsing. Instead of waiting for the contact to open the chat, the platform starts the conversation when a rule is met β for example, when the person spends some time on a specific page. It's the ideal way to offer help at the right moment: answer questions on a pricing page, recover a cart, or present a promotion to someone showing interest. Prerequisites - Access to the Campaigns module. - An active website/widget inbox, with the widget installed on your site. - A defined agent or bot to send the message. Step by step 1. Open Campaigns in the sidebar and select the website type (live campaigns). 2. Click Create campaign. 3. Fill in the title (an internal name so you can identify the campaign). 4. Write the message that will appear in the widget. 5. Select the inbox (the website widget where the message will be shown). 6. Choose the sender (the agent or bot that signs the message). 7. Define the trigger: the page URL where the campaign should fire and the time on page (in seconds) before showing the message. 8. Adjust the preferences (enable the campaign, trigger only during business hours) and save. Settings & options - Title: internal identifier for the campaign. - Message: the proactive text shown in the widget. - Inbox: the website widget that will display the message. - Sent by (sender): the agent or bot shown as the author. - URL: the page on which the campaign is eligible to fire. - Time on page (seconds): how long the visitor must stay before the trigger. - Enable campaign: turn the campaign on or off without deleting it. - Trigger only during business hours: avoids starting conversations off-hours. Use cases - Offer help on the pricing page after a few seconds of browsing. - Present a coupon to someone visiting a product page. - Invite a demo to people on the plans page. - Reduce abandonment on checkout pages with a supportive message. Tips, limits & best practices - Use short, specific messages tailored to the page where they appear. - Tune the time on page so you don't interrupt too early β give the visitor time to read. - Enable business hours only if you don't have 24/7 coverage, to avoid unanswered conversations. - Create different campaigns for different pages instead of a single generic message. Troubleshooting - The message doesn't appear: confirm the campaign is enabled, the URL matches the visited page, and the time on page has been reached. - It shows off-hours: check the trigger only during business hours option and the hours configured on the inbox. - The widget doesn't load: verify the site widget is installed correctly. See also - Campaigns overview - WhatsApp campaign for contact lists - HSM templates and variables
WhatsApp campaign for contact lists
Overview A WhatsApp campaign sends a message to a contact list at once. You define the audience (by labels), choose the content (an approved HSM template or a message with variants), and decide when to send. The platform sends at a controlled pace and shows progress (sent, delivered, read and replied). It's the right tool for announcements, promotions, notices and contact re-engagement β always respecting WhatsApp's rules for bulk messaging. Prerequisites - Access to the Campaigns module. - A connected WhatsApp inbox. - Contacts with labels that define the audience. - For template-based campaigns: approved HSM templates on the inbox (see the templates and variables article). Step by step 1. Open Campaigns in the sidebar and select the WhatsApp type. 2. Click Create campaign and give it a title. 3. Select the WhatsApp inbox that will send it. 4. Define the audience by selecting the labels of the contacts who should receive it. 5. Build the content: - HSM template: pick the template and language, then fill in the variable values; or - Message with variants: write the message (using the variable picker) and, if you want, add variants so each contact receives slightly different wording. 6. Adjust the send settings (min/max delay between messages, batch size and randomization) for a more natural send. 7. In Conversation created by the campaign (when the feature is enabled on the account), choose the status of each contact's conversation, what happens when the customer replies, the assignment, the labels and what to do with a conversation that already exists. 8. Choose when to send: send now, schedule for a date/time, or save as draft. 9. Confirm and track the status and progress in the campaign list. Settings & options - Title: internal identifier for the campaign. - Inbox: the WhatsApp number that will send the messages. - Audience: contacts selected by labels. - Content: HSM template (with variables) or a message with variants. - Send settings: min and max delay (seconds), batch size and variant randomization β these help reduce the risk of blocking. - Scheduling: send now, schedule, or draft. - Status: draft, scheduled, sending, paused, completed or failed. - Actions: pause, resume or cancel a running campaign. On the official API (WhatsApp Cloud), a campaign can be cancelled before it starts, during the send or while paused; pause and resume live on the campaign detail page. Pausing is reversible and, on resume, only whoever is still waiting receives it. Cancelling is permanent and asks for a confirmation that shows the campaign name and how many contacts are still waiting and will be skipped. If Meta refuses the template in the middle of the send, the campaign pauses automatically (see WhatsApp campaign results). - Progress: sent, delivered, read, replied and failed. Conversation created by the campaign Each contact receives the message inside a conversation. This section defines what happens to it: | Option | Values | Default for a new campaign | | --- | --- | --- | | Status of the created conversation | Pending Β· Open Β· Resolved | Pending | | When the customer replies | Open the conversation Β· Keep the conversation pending | Open the conversation | | Assignment when it opens | Inbox rules Β· Specific agent Β· Specific team Β· No assignment | Inbox rules | | Conversation labels | none, or up to 10 labels of the account | none | | Contact's existing conversation | Keep its current status Β· Apply status and labels | Keep its current status | - Pending: the conversation stays out of Open and does not notify the team. When the customer replies for the first time, it opens, receives the chosen assignment and the inbox team is notified once. Automations, flows and webhooks receive the opening like any other status change. - Automations on the Conversation Created event receive this conversation already pending, and the event does not repeat when it opens. To act when the customer replies, use the Conversation Opened event. - Notifications and lead score in batched sending. When the campaign is sent in batches, the conversation it creates, open or pending, does not notify the team or add the support event to the contact's lead score at send time. Both happen once, when the customer replies for the first time. Assigning an agent still notifies that agent as usual. - Open: the usual behavior β the conversation enters Open as soon as the campaign is sent. Campaigns created before this feature keep working this way. - Resolved: the conversation is created resolved and reopens on its own when the customer replies, following the regular inbox rules. - Assignment: happens at the first reply and never replaces an agent who is already assigned. - Existing conversation: by default the campaign reuses the conversation without changing its status. Applying the status does not accept Resolved, because resolving a conversation in progress would send the satisfaction survey to the customer right before the campaign message. With Pending, applying the status takes a conversation that is being handled out of the agent's Open list until the customer replies, and each reused conversation notifies webhooks and automations of the status change. - On the campaign detail page, the Opened by a reply card shows how many pending conversations the customer's reply opened. Use cases - Announce a promotion to customers in a specific label. - Send an important notice (hours change, new product) to the right audience. - Re-engage inactive contacts with a segmented offer. - Confirm attendance at an event or remind people of a date. Tips, limits & best practices - To start conversations with people outside the 24-hour window, WhatsApp requires an approved HSM template β free-text messages only work inside the service window. - Use the send settings with delays between messages and smaller batches: very fast sends increase the risk of blocking (anti-ban). - On the official API, the pace follows the number's limit at Meta: 80 messages per second at first, up to 1,000 once Meta releases the number, and 20 on a number that also uses the WhatsApp Business app (coexistence). Campaigns use up to the limit minus 5: 75, 995 or 15 messages per second. The limit covers the sum of every automated send from the number (campaigns, follow-ups, flows, distribution and sales recovery). While Meta has not confirmed the number's level in the last 24 hours, the default limit of 80 applies. The campaign detail shows the pace in use. - Segment well by labels and send only relevant content to reduce opt-outs and reports. - Test with a small audience before a large send. - Track the progress and pause the campaign if you notice many failures. - If an official API campaign stops advancing for more than 15 minutes, the campaign is paused and administrators get a notice; just use Resume, and nobody receives it twice. With batched sending enabled on the account, the platform first tries to resume the dispatch on its own, up to 3 times within an hour. - For large campaigns, prefer Pending: the team is only told about the conversations in which the customer actually replied, and the Open list is not flooded. - If a bot serves the inbox, the pending conversation stays with it when the customer replies; the bot hands it over to the team when needed. - No assignment only stops the campaign from assigning. If the inbox has automatic assignment turned on, the inbox can still assign the conversation later, in its next distribution. Troubleshooting - I can't select the inbox: confirm there is a connected WhatsApp inbox. - Empty audience: check whether contacts exist with the chosen label. - Template doesn't appear: verify there are approved templates on the selected inbox. - Many send failures: lower the pace (increase the delays and reduce the batch size) and check the health of the WhatsApp number. - The conversation did not open when the customer replied: check that the campaign uses Open the conversation on reply and whether a bot serves the inbox β in that case the conversation stays pending with the bot. Pending conversations appear in the Pending list. - I can't apply the status to existing conversations: the option is disabled with the Resolved status; choose Pending or Open. See also - HSM templates and variables - Campaigns overview - Website campaigns
HSM templates and variables (the {{var}} picker)
Overview HSM templates (Highly Structured Messages) are WhatsApp message models approved by Meta. They are required to start a conversation outside the 24-hour window β for example, in a campaign to a contact list. Many templates have variables (placeholders like {{1}}, {{2}} or named ones like {{name}}) that are filled with each contact's data. In ConversaLabs, you fill these variables with the variable picker ({{var}}), and the value is resolved for each recipient at send time. Prerequisites - A connected WhatsApp inbox. - Approved HSM templates on the inbox (approval is handled with Meta). - Contacts with the data you intend to use in the variables (for example, the name). Step by step 1. In a WhatsApp campaign (or when sending a message that requires a template), select the inbox and choose the template. 2. Select the template language (and check the category, set during approval). 3. If the template has a media header, select the image, video, or document to be sent. The platform keeps that file in the conversation history even when WhatsApp uses a temporary media reference to deliver it. 4. For each template variable, provide the value: - type fixed text; or - use the variable picker ({{var}}) to insert a dynamic field (such as the contact's name), which will be substituted per recipient. 5. Review the template preview with the filled values. 6. Complete the send (or schedule the campaign). The platform resolves the variables per contact at send time. Settings & options - Template: the approved model that will be sent. - Language: the language version of the template. - Category: the template's purpose, set at approval (for example, marketing or utility). - Variables: the {{...}} placeholders in the template, filled with fixed text or the variable picker. - Media header: the image, video, or document selected for that specific send. The file shown in the history matches what was sent, not the sample media used when the template was approved. - Variable picker ({{var}}): inserts dynamic fields (contact, account, etc.) that are resolved individually for each recipient. - Preview: shows how the message will look with the values applied. Use cases - Personalize the greeting with the contact's name in a bulk send. - Send a specific code or link per contact inside a template. - Reuse the same template across several campaigns, changing only the variable values. Tips, limits & best practices - Fill all the template variables β empty fields can block the send to that contact. - Use dynamic variables with reliable data; if a contact lacks the data, prefer a fixed fallback value so the message isn't left incomplete. - Remember the template content is fixed (approved by Meta) β you only change the variable values, not the model's text. - Variables are resolved on the server, per recipient β you don't need to build a different message for each contact. Troubleshooting - The template doesn't appear: confirm it is approved and on the correct inbox. - The send fails for some contacts: check whether any variable was left without a value for those contacts. - The name (or other data) doesn't show: confirm the field exists on the contact and that the right variable was selected in the picker. - The header has no media: confirm the file was selected before sending and that its format matches the approved header. The platform does not replace an unknown file with Meta's sample media. See also - WhatsApp campaign for contact lists - Campaigns overview - Website campaigns
WhatsApp campaign results and analytics
Overview After a WhatsApp campaign is dispatched, open the campaign detail page to see its full performance: a delivery funnel (sent, delivered, read and replied), the rates for each stage, the average delivery and read times, the cost (when applicable), trend charts over time and the recipients table, where you can retry the ones that failed. It is the right screen to measure a send, reprocess failures and decide whether to pause, resume or cancel a running campaign. Prerequisites - Access to the Campaigns module. - A WhatsApp campaign already sent or sending (per-recipient metrics only exist for WhatsApp campaigns). - To see cost: the campaign must use a WhatsApp Cloud number (WhatsApp Web is not billed by Meta, so no cost is shown). Step by step 1. Open Campaigns in the sidebar and select the WhatsApp type. 2. In the list, click the campaign you want to analyze. 3. Read the header: title, status (draft, scheduled, sending, paused, completed or failed), the inbox used and the send/schedule date. 4. In the Analytics section, read the delivery funnel and the rates. 5. Check the average delivery time and average read time cards and, for Cloud campaigns, the estimated cost and actual cost cards. 6. If there is enough data, follow the trend charts (delivery, read and reply). 7. Scroll to the recipients table to see each contact's status and retry the failed ones. Settings & options Delivery funnel and rates The funnel shows, cumulatively, how many contacts advanced through each stage (a contact who read the message also counts as delivered and sent). Rates are calculated over the total sent. | Stage | What it means | | --- | --- | | Sent | Messages dispatched to WhatsApp | | Delivered | Reached the contact's device (rate = delivered Γ· sent) | | Read | Opened by the contact (rate = read Γ· sent) | | Replied | The contact answered (rate = replied Γ· sent) | States that sit off the funnel appear only when they occur: - Failed: could not be delivered. - Skipped: the contact was skipped (for example, no valid number). - Queued: still pending/processing, i.e. waiting to be dispatched during an active send. Average times - Average delivery time: the mean between the send and the delivery confirmation. - Average read time: the mean between the send and the read confirmation. Cost (WhatsApp Cloud only) - Estimated cost: calculated at creation time, over the audience. - Actual cost: measured over the billed recipients (delivered, read and replied), updated as the campaign progresses. Shown in currency (default BRL). Trend charts They show how the delivery, read and reply rates evolve over time, based on periodic captures (snapshots) of the campaign's performance. They appear once there are at least two capture points. Recipients table - Paginated list with contact, status, sent and delivered times and, on error, the failure message. - Status filter (all, pending, processing, sent, delivered, read, replied, failed, skipped). - Retry: a per-row button on failed messages and a Retry failed button to reprocess all failures at once. The retry runs in the background: a notice tells how many resends were scheduled and how many recipients were left out, and why. The table follows the resends on its own for about a minute, and Retry failed stays disabled meanwhile. - Resend anyway: shows in the explanation of the failures that depend on a fix of yours (a paused or rejected template, an invalid number, an invalid variable). Once the cause is fixed, use it to resend that recipient; the confirmation reminds you why the send failed. - Meta marketing limit (error 131049): the contact received too many marketing messages. Meta asks for at least 24 hours before resending, and resending earlier can block delivery to that contact for up to 24 hours, enforced for the whole account. So the platform holds that resend back until 24 hours have passed since the failure, the row's button included, and the notice counts how many recipients are waiting. - Contact who stopped marketing (error 131050): when the contact taps stop on marketing messages from this number, a campaign with a marketing template skips that contact before sending (it shows as skipped, with no charge). Utility and authentication templates still arrive. If Meta refuses with 131050 a send that had already left, the row shows as failed and should only be resent on purpose after the contact opts back in. When you create the campaign with a marketing template, the audience count and the cost estimate already leave these contacts out, and the form says how many stopped receiving marketing from this number. If the contact stops marketing after a failure, Retry failed does not resend to them: the row becomes skipped, and the notice counts how many recipients were left out for that reason. - Template still syncing (error 134101): a marketing template that was just created or changed takes up to 10 minutes to reach the Marketing Messages API, and Meta refuses the send in that time. The platform resends that message by itself once, 10 minutes later, through the same API; if it still fails, use the row's Retry. - Authentication template for a contact without a phone number: Meta does not accept authentication templates for the WhatsApp ID, so that contact shows as skipped. Send it to a contact with a phone number. Campaign lifecycle - Pause: stop a send in progress. On an official API (WhatsApp Cloud) campaign the button shows while the status is Processing. Sending stops within seconds, and whoever has not received yet keeps waiting. Messages that were already queued when you paused do not go out and are not charged: they return to the campaign queue. - Resume: continue a paused send. Only the contacts still waiting receive it; whoever already received it, or had the send refused, never receives it again. - Cancel: end the campaign for good, including in the middle of the send. The confirmation shows how many contacts are still waiting; none of them will receive the campaign, and none of it is charged. Automatic pause when Meta refuses the template If Meta refuses the template in the middle of the send, the platform pauses the campaign on its own at the first refusal, instead of spending the rest of the audience on sends that would be refused the same way. Administrators get a notification and the campaign page shows a notice with the reason: | Meta error | What it means | |---|---| | 132015 | Meta paused the template, usually after a drop in its quality rating. | | 132016 | Meta disabled the template; it can no longer be sent. | | 132001 | The template does not exist in this language (it was deleted or renamed). | | 132005 | The text of the template, which has no variables, was longer than allowed. When the template has variables, the error applies only to that contact: it shows as a failure in the recipients table and the campaign keeps going. | This also applies right after the campaign shows as completed: messages still in the sending queue stay protected for a few hours, and a refusal in that window pauses the campaign again. The pause also happens when Meta reports that the template was paused, disabled or archived, even before the next refusal. While the template is not approved again, Resume stays locked and the notice explains the next step; as soon as Meta reactivates the template, Resume unlocks automatically and continues only with whoever is still waiting. Automatic pause when Meta refuses the whole account Some refusals do not depend on the template or on the contact: they apply to the whole WhatsApp account or to the business portfolio. Every recipient would be refused the same way, so the platform also pauses the campaign on the first refusal and notifies the administrators: | Meta error | What it means | |---|---| | 131063 | Marketing templates are disabled for the Cloud API on this account. Send marketing through the Marketing Messages API, or turn that block off. The platform tries the same send once through the Marketing Messages API; the campaign only pauses if that attempt fails too. | | 131064 | The account reached its messaging limit for template classification violations. Meta lifts the limit automatically after the enforcement period. | | 135000 | Meta dropped messages it was holding for a quality review of the portfolio. While the review lasts, the portfolio cannot send templates. | | 131042 | There is a problem with the account payment method. Check billing in WhatsApp Manager. | | 131031 or 368 | The account is restricted or disabled for a policy violation. | The campaign also pauses when Meta answers a send saying the message was held for a quality review of the portfolio: Meta delivers held messages gradually and may drop them. Fix the cause in WhatsApp Manager before using Resume. Since the cause is not in the template, Resume does not wait for the templates to synchronize: the button stays available, and resuming is your call once the cause is fixed. In the recipients table these refusals are left out of Retry all failed; you can still resend a recipient on purpose after fixing the cause. Automatic pause when the send stops moving If the send of an official API campaign stops making progress for more than 15 minutes (for example, after a server restart in the middle of the dispatch), the platform acts on its own. With batched sending enabled on the account, it resumes the dispatch automatically, up to 3 times within an hour, and only pauses the campaign if it still does not move. Without batched sending, the campaign is paused at the first check. When the campaign is paused automatically, administrators get a notification and the campaign page shows a notice. Use Resume whenever you want: only the contacts still waiting receive it, and nobody receives it twice. Use cases - Measure the read rate and reply rate of a send to assess engagement. - Reprocess the ones that failed without recreating the campaign, using Retry failed. - Pause the send when you notice many failures and check the number's health before resuming. - Track the actual cost versus the estimated cost on Cloud campaigns. - Compare how the rates evolve through the trend charts. Tips, limits & best practices - Resume re-resolves the audience: if the segment, label or list gained contacts while the campaign was paused, those new contacts also receive it. Whoever already received it does not receive it again. - A message held back in the conversation because of the pause shows as not sent and cannot be retried from the conversation: when the campaign resumes, it sends a new message to that contact. - Retry failed is unavailable while the campaign is sending or paused; use it once sending ends. - Retry affects only recipients with the failed status β those already delivered, read or replied are not resent, and a retry never duplicates a contact. - Failures that only clear after a fix of yours (a paused, disabled or missing template, an invalid number, an invalid variable) are left out of Retry failed, because they would fail again. Once the cause is fixed β for example, the template is approved again β resend each one with the row's Resend anyway. - Failures that no resend can fix are never resent: a cancelled send, a contact without a phone, a refused consent and a deleted contact. A send whose outcome is uncertain (WhatsApp did not confirm whether the message went out) is not resent either, so the contact never receives it twice. If the contact lost its phone, refused consent or was deleted after the failure, the retry marks it skipped. - Trend charts and snapshots exist only on WhatsApp campaigns and need at least two captures to appear. - Cost is shown only on WhatsApp Cloud campaigns (WhatsApp Web is not billed by Meta). - Many failures usually mean an aggressive sending pace or a number with poor health β slow the pace down (larger delays and smaller batches) on the next campaign. - Rates are always over the total sent, not over the initial audience. Troubleshooting - The campaign paused on its own: Meta refused the template, or the send stopped making progress. Read the notice at the top of the page. If it was the template, check its status in the inbox templates and resume once it is approved again; if the send stopped moving, just Resume. - Retry failed scheduled fewer recipients than the table's failures: the others have an error that a resend cannot fix, or one that depends on a fix of yours. The notice shows how many were left out and each row explains why; once the cause is fixed, use Resend anyway on the row. - "This retry is already being scheduled": the same retry was requested less than a minute ago (a double click, or another administrator at the same time). Wait for the table to update; there is no need to repeat it. - Resume is locked: the template is not approved yet, or the platform is still confirming its current status with Meta. The page refreshes on its own and unlocks the button when possible. - No trend charts appear: there are not enough snapshots yet (at least two points are needed). Wait for the next captures and refresh the page. - No cost cards: the campaign is not WhatsApp Cloud, or there is no billable cost yet. - Many failures: check the number's health and the sending pace; use Retry failed after fixing the cause. - Empty table: confirm the campaign has already been dispatched (draft or scheduled campaigns have no processed recipients yet). See also - WhatsApp campaign for contact lists - HSM templates and variables - Campaigns overview
WhatsApp dispatch cost calculator and campaign estimate
Overview The dispatch cost calculator shows how much a WhatsApp campaign will cost before you send it and how much it cost afterward. The math is based on the per-message tariff Meta charges per template category (marketing, utility and authentication) and the recipient's country, converted from USD to BRL at the current exchange rate. Only WhatsApp Cloud is billed by Meta. WhatsApp Web inboxes have no per-message Meta cost, so they show up as free (billable: false). The calculator covers the three categories that are sent in campaigns: marketing, utility and authentication. Service messages (free-form text inside the 24-hour customer service window) are not sent in campaigns, so they have no row in the calculator. A service rate applies since 2026-10-01. The platform estimates an allowance of 1,000 free service messages per month for each number, without treating that limit as an official Meta rule. Estimated monthly allowance; Meta does not publish this limit in the documentation tracked here. Track that usage in the WhatsApp cost center. The platform uses this same number in two places: the calculator (a what-if simulation) and the audience cost estimate shown in the campaign composer. Prerequisites - Access to the Campaigns module. - For a billed cost: a connected WhatsApp Cloud inbox (Web generates no Meta cost). - The campaign's template category β marketing, utility or authentication. The category is what sets the per-message tariff. Step by step 1. Open Campaigns in the sidebar. 2. Open the Dispatch calculator (the calculator button on the campaigns screen). 3. Choose the recipients' country from the selector (e.g., BR, US, MX...). 4. For each category (marketing, utility, authentication), enter the quantity of messages. 5. Per row, review the per-message tariff (in USD) and the total in BRL. 6. Check the highlighted estimated total cost (USD and BRL) and the number of billable messages. In the campaign composer, when you set the audience and the category, the platform also shows the estimated cost of the resolved audience (labels, specific contacts, saved segments or all), already in BRL. Settings & options - Per-category tariffs (USD): each category has a per-message tariff per country, following Meta's official rate card in effect, currently the 2026-10-01 card. For Brazil it did not change from the previous one: marketing US$ 0.0625 and utility or authentication US$ 0.0068 per message (on Meta's BRL rate card, R$ 0.3217 and R$ 0.0350). Other markets did change, such as Mexico, Saudi Arabia, the United Arab Emirates, Pakistan, Peru and South Africa. - Rate card date: the calculator shows the date of the official rate card it is using. If no official rate card is loaded, it says it is using the platform's internal reference rate card instead of showing a date. - Utility inside the window: since 2026-10-01 Meta also charges a utility message sent to someone whose 24-hour customer service window is open. It used to go out free in that case. - USD β BRL conversion: uses the live exchange rate of the day (cached ~1h). Use Refresh to fetch a fresh quote bypassing the cache, or Adjust to enter a manual what-if rate. - Rate source: the badge shows whether the rate is live, estimated (a fallback used when the quote is unavailable) or manual. - Admin-editable tariff (override): Meta has no pricing API, so an administrator can edit the tariff per category/country with the real negotiated price. The row gets a custom badge. Leaving the tariff field blank and saving restores the official/synced rate. - Sync (official): reads Meta's own published rate table (the USD rate card linked from the developer pricing page) and refreshes the per-country, per-category tariffs. Updated rows then show the synced source. An admin override still wins over a synced rate β syncing never erases the price you negotiated. If the read fails, nothing changes: the editable/base table stays in force. - Alternative rate source: to feed the tariffs yourself, point the WHATSAPP_PRICING_SOURCE_URL environment variable at a JSON or CSV endpoint carrying the rate per country and category. The platform uses that source instead of the official page. - Audience cost estimate (in the composer): when you pick audience + category, the platform resolves the phone-bearing contacts and returns the estimated cost in BRL and whether it is billable. - Estimated vs. actual cost on the campaign: the campaign stores the estimated cost (estimated_cost), the actual cost (actual_cost) and the currency (currency, default BRL). The estimate is written at creation (Cloud only); the actual cost accrues as billable messages (delivered/read/replied) are counted. - With the WhatsApp cost center turned on: the actual cost becomes the sum of the messages Meta confirmed as delivered and billable, priced message by message with the official rate card, in the number's market and the WABA currency, and it refreshes in about 10 seconds. Failed and skipped messages never add up, and a retry adds to the recipient. The price frozen at dispatch stays visible as Estimate at dispatch. The calculator keeps working as before (USD per country); the rate per market and currency is edited in Reports β WhatsApp costs β Rate cards. Use cases - Budget a promotion: simulate 10,000 marketing messages to Brazil and see the BRL total before approving. - Compare categories: see the price difference between marketing, utility and authentication to pick the best format. - Validate billing: record the real price negotiated with Meta in the editable tariff and compare the estimated cost with the actual cost at the end of the campaign. Tips, limits & best practices - WhatsApp Web has no Meta cost: Web rows and campaigns show up as free (billable: false) and don't add to the budget. - Restore the official tariff: to undo an override, leave the tariff field blank and save β this reverts to the official/synced rate. - Tariff = real price: since Meta exposes no pricing via API, keep the editable tariff aligned with your contract so the estimate matches the invoice. - Exchange rate: if the rate is marked estimated, it's a fallback β refresh to get the live quote before closing a budget. Troubleshooting - Cost shows R$ 0 or is missing: the campaign is on WhatsApp Web (no Meta billing) or the audience is very large and exceeded the estimate limit (above ~5,000 contacts), in which case the estimate is skipped so creation never hangs β the actual cost is still counted during sending. - Synced but the tariff didn't change: there is an admin override for that country and category β the override wins over the synced rate. Clear the field and save to restore it. - The table won't sync: the message says why β the source returned an error, could not be reached, or answered without readable rates. In every case the platform keeps the editable/base table as the source of truth. If it persists, point WHATSAPP_PRICING_SOURCE_URL at your own JSON/CSV endpoint or set the tariff manually. - Rate marked "estimated": the live quote wasn't available; use Refresh or enter a manual rate. - The calculator says it uses the internal reference rate card: no official rate card is loaded right now. The platform loads the official rate cards on its own; an administrator can force a read in Reports β WhatsApp costs β Rate cards β Sync official rate card, which shows the real result, failures included. See also - WhatsApp campaign for contact lists - HSM templates and variables - Campaigns overview - WhatsApp cost center
SMS campaign for contact lists
Overview An SMS campaign sends a text message to a contact list at once, following the same logic as WhatsApp campaigns. You define the audience (by labels), write the message, and decide when to send. The platform iterates over the audience and sends the SMS to every contact that has a phone number. It's the right tool for short notices, confirmations and reminders β especially to reach people who don't use WhatsApp, using your account's SMS number. Prerequisites - Access to the Campaigns module. - A connected SMS inbox (of type Twilio SMS or SMS). - Contacts with a phone number filled in β contacts without a phone number are skipped on send. - Labels applied to contacts to define the audience. Step by step 1. Open Campaigns in the sidebar and select the SMS type. 2. Click Create campaign and give it a title. 3. Select the SMS inbox that will send it. 4. Define the audience by selecting the labels of the contacts who should receive it. 5. Write the text message. You can insert variables (for example, the contact's name) to personalize each send. 6. Choose when to send: send now, schedule for a date/time, or save as draft. 7. Confirm and track the campaign status in the list. Settings & options - Title: internal identifier for the campaign. - Inbox: the SMS number (Twilio SMS or SMS) that will send the messages. - Audience: contacts selected by labels; only contacts with a phone number are reached. The composer shows a preview of how many contacts will be reached. - Message: free text, with support for variables for personalization. SMS is text only β it does not send images or attachments. - Scheduling: send now or schedule for a future date/time. - Status: draft, scheduled, sending and completed β track progress from the campaign list. Use cases - Send a short notice (hours change, maintenance, reminder) to the right audience. - Confirm an appointment, order or attendance. - Remind people about a date, due date or commitment. - Reach people who don't use WhatsApp, ensuring delivery over SMS. Tips, limits & best practices - SMS has a character limit per message and a per-message cost charged by the provider (for example, Twilio). Long messages may be split into more than one SMS and billed accordingly β keep it concise. - Segment well by labels and send only relevant content to reduce opt-outs and complaints. - Include an opt-out option (for example, instructions to stop receiving messages), in line with best practices and local regulations. - Test with a small audience before a large send. Troubleshooting - I can't select the inbox: confirm there is an SMS inbox (Twilio SMS or SMS) connected to the account. - Empty audience: check whether contacts exist with the chosen label and with a phone number β contacts without a phone number are skipped. - Send failures: check the SMS provider configuration (Twilio credentials and balance, for example) and that the origin number is active. Each failed send is logged and the next contact continues normally. See also - WhatsApp campaign for contact lists - Campaigns overview
Defining the campaign audience (labels, contacts, segments, CRM and companies)
Overview The audience defines who receives a campaign. In ConversaLabs you can target by labels (applied to contacts or to conversations), specific contacts, a saved segment (of contacts, conversations or companies), a CRM pipeline, companies, or everyone. In the campaign composer the audience picker shows, in real time, how many contacts with a phone number would be reached β before you save β and, when a template and category are set, the cost estimate. The distinction that trips people up: a label applied to a conversation does not land on the contact. They are two different places. That is why the Labels mode asks where the label was applied β picking the wrong source is the most common cause of an audience that comes back zero. Prerequisites - Access to Campaigns and a connected inbox (WhatsApp, SMS or API). - Contacts with a phone number β on phone-dispatch channels only those enter the count and the send. The exception is WhatsApp Cloud: a contact who hides the number behind a username and has already chatted with the inbox is reached through their business-scoped WhatsApp ID (BSUID). An authentication template does not reach these contacts, because Meta does not accept it for a BSUID, and they show as skipped in the results. The platform's operations team turns this reach on after validating a test send. Until then, these contacts are left out of the campaign, as they always were. - Depending on the audience type: - Labels: labels applied to contacts and/or to conversations. - Saved segment: a segment/folder already saved (see Where segments are created, below). - CRM pipeline: a pipeline with open deals. - Companies: companies registered under Companies. Step by step 1. Open Campaigns, create or edit a campaign and go to the Audience field. 2. Pick the audience type: Labels, Specific contacts, Saved segment, CRM pipeline, Companies or All contacts. 3. Fill it in according to the type: - Labels: choose where the label was applied (On contacts Β· On conversations Β· On both). When conversations are included, a conversation status picker appears (All Β· Open Β· Pending Β· Snoozed Β· Resolved). Then select one or more labels. - Specific contacts: type at least 2 characters to search and click to add; the chosen ones become removable chips. - Saved segment: choose the source (Contact segments Β· Conversation folders Β· Company segments) and tick one or more. - CRM pipeline: choose the pipeline and, optionally, a stage. - Companies: choose between a company saved segment or specific companies (search by name, 2 characters minimum). - All contacts: no further selection. 4. Check the live count (and the cost estimate, where applicable). 5. Finish the campaign and save. Settings & options The audience types: | Type | Who is included | |---|---| | Labels | Contacts carrying any of the labels, read on contacts, on conversations, or both | | Specific contacts | The contacts hand-picked in the search | | Saved segment | Whoever satisfies a contact segment, a conversation folder or a company segment | | CRM pipeline | Contacts of the pipeline's open deals (optionally a single stage) | | Companies | Everyone linked to the chosen companies | | All contacts | The whole account | - Label source: On contacts is the historical behaviour (older campaigns keep resolving exactly as before). On conversations reaches the contacts behind the labeled conversations. On both unions the two readings. - Conversation status: only shown when the source includes conversations. All is the default. - CRM β open deals only: a pipeline targets the deals still in play. Won, lost and archived deals do not enter. - Companies β everyone, not just the primary: includes the contact marked as primary as well as everyone else linked through a company membership. - Union of criteria: a contact matching more than one criterion is included once. Picking several labels widens the reach (any of them), it does not narrow it. - Live count: green when at least 1 contact is reachable, amber when it is 0. On phone-dispatch channels it only counts contacts with a phone number. - Cost estimate: with the template category and provider set, the preview also shows the estimated cost in BRL. It applies to WhatsApp Cloud only (billed by Meta); WhatsApp Web is not billed. Above 5,000 contacts on Cloud the estimate is skipped so the screen never stalls. Meta charges by the country of the recipient's phone number. For a contact reached only through the WhatsApp ID, the estimate uses the country shown in the ID itself, and that amount is an approximation. - Opt-out list: whoever is on the account's campaign opt-out list never receives a campaign, of any category or channel, and the preview says how many were left out. - No WhatsApp (131026, WhatsApp Cloud): whoever had their last campaign message refused with 131026 in the last 90 days, and has not written since, is left out by default. The preview shows how many, and Include contacts without WhatsApp adds them back. - Consent (LGPD): when the account requires consent, anyone who refused data processing is removed from the audience β and the preview says how many were excluded. - Who stopped marketing (WhatsApp Cloud): with a marketing template, the count and the cost estimate leave out the contacts who stopped receiving marketing from the inbox number, and the preview says how many they are. - Contacts without a phone number (WhatsApp Cloud): the preview says how many contacts without a phone number have a WhatsApp ID. Once this reach is turned on, they are reached through that ID, and the campaign results show how many recipients were sent that way. Before that, the preview says they are left out until the send is validated. Where segments are created Each kind of segment is born on a different screen, and each has its own name in the interface. That is why a segment created under Conversations does not show up in the Contacts list: | Audience | Where to create it | What it is called | |---|---|---| | Contacts | Contacts β Filter β apply β Save segment | Segments | | Conversations | Conversations β Filter β apply β save | Folders | | Companies | Companies β filter β save | Segments | Once saved, it shows up under the matching source in the audience picker. Use cases - Reach whoever was helped and labeled during the conversation (e.g. quote-sent), without labeling contact by contact. - Re-engage only the resolved conversations of a label, to ask for a review. - Send to a saved segment of active customers. - Notify every open deal in a specific stage of the pipeline. - Communicate a contract change to everyone at a group of companies. - Send to a one-off list of hand-picked contacts. Tips, limits & best practices - Check the live count before saving β it prevents empty sends. - Got zero with a label? Switch the source to On conversations and watch the number change. - For precise filters (combined conditions), create a segment and use the Saved segment type. Several labels add up (any of them), they never intersect. - Keep contact phone numbers filled in and valid. - Use All contacts carefully on large bases, and pair it with the campaign's anti-ban send rate. - The cost estimate is a reference (Cloud); the real cost is measured over the recipients actually billed. Troubleshooting - Count is 0 with a label: almost always the wrong source. If you label conversations, pick On conversations (or On both). - Count is 0 with a conversation status: the chosen status may hold no labeled conversation. Go back to All and check. - Segment missing from the list: check the selected source β conversation folders never appear among contact segments, and vice versa. If it does not exist yet, create it on the screen listed in Where segments are created. - Segment resolves to nothing: check the saved filter's conditions. A broken filter never blocks the campaign, it simply contributes zero contacts. - Empty pipeline: the pipeline may hold no open deals β won and lost ones do not count. - Empty company: check whether any contact is linked to that company. - No cost shown: the estimate only appears with a category and provider set; WhatsApp Web is not billed. See also - WhatsApp campaign for contact lists - Campaign opt-outs - Quality protection, warm-up and hygiene in WhatsApp campaigns - Campaigns overview - Flow Builder mass runs
Quality protection, warm-up and hygiene in WhatsApp campaigns
Overview Meta rates the quality of every WhatsApp number and every template. The rating uses customer feedback from the last 7 days, with more weight on recent days: blocks, reports, muted and archived chats. When quality drops, Meta acts on its own: - a template rated red is paused for 3 hours the first time, 6 hours the second time and disabled the third time (errors 132015 and 132016); - a number that keeps sending low-quality templates may have its own rating lowered. So that a campaign does not find this out too late, after most of its audience was already refused, the platform acts first: 1. Preventive pause: while the campaign sends, it checks the number and template quality every 5 minutes and pauses the campaign when the number leaves green or the template falls to yellow or red. 2. Confirmation at the start: it does not start a campaign on a number that is not green without your confirmation, and it never starts on a red number or template. 3. Warm-up (optional): it starts slowly and only speeds up while everything is green, with an optional daily cap. 4. Parallel sending warning: it warns you when another campaign is already sending from the same number. 5. 131026 hygiene: it leaves out, by default, the contacts whose last send failed with 131026 (number without WhatsApp, terms not accepted or outdated app). The Meta rules quoted here were checked in the official documentation on 10/01/2026. Prerequisites - A WhatsApp inbox connected through the official API (Cloud). - Administrator access to create, resume and configure campaigns. Step by step Check quality before sending 1. Open Campaigns β WhatsApp and create a campaign. 2. When you choose the inbox, see the number quality (green, yellow, red or not rated yet) and the quality of the chosen template. 3. If the number is yellow or not rated yet, or the template is yellow, the platform asks you to confirm that you want to send anyway, and shows the reason. 4. If the number or the template is red, the campaign does not start. Wait for the quality to recover or switch templates. When the campaign is paused for quality 1. On the campaign page, a banner explains the reason, for example "the number quality dropped to yellow" or "the template dropped to red", and repeats Meta's rule. 2. The contacts who have not received the campaign yet keep waiting: nobody receives it twice. 3. When the quality is green again, click Resume. To continue at a yellow level, use Resume anyway and confirm. The campaign only pauses again if the quality drops further. Turn on the warm-up 1. In the campaign form, open Quality protection and turn on Warm-up. 2. Set the starting speed, how often it increases and, if you want, a daily cap of messages. 3. The speed never goes above the number's limit at Meta. When the daily cap is reached, the campaign waits and continues on its own after midnight, in the account time zone. Contacts without WhatsApp (131026) 1. When a campaign send fails with 131026, the contact gets the No WhatsApp (131026) mark. 2. In the next campaigns these contacts are left out by default, and the audience preview shows how many. 3. To include them anyway, check Include contacts without WhatsApp in the audience. Settings & options | Option | Default | Effect | |---|---|---| | Quality protection | on | Pauses the campaign when the number leaves green or the template falls to yellow or red. | | Warm-up | off | Starts at 1 message per second and doubles every 30 minutes while everything is green, up to the number's limit. | | Daily cap | empty | Maximum messages of the campaign per day, in the account time zone. | | Include contacts without WhatsApp | off | Also sends to whoever failed with 131026 in the last 90 days. | The 131026 mark clears on its own when the contact writes to the business, when their phone changes or after 90 days. Use cases - Old or purchased base: turn on the warm-up with a daily cap to find out early whether the base generates reports. - Several campaigns in the same week: stagger the sends from the same number instead of running them in parallel. - New template: watch its quality in the first hours. New templates start as "not rated yet". Tips, limits & best practices - Parallel sends to the same base speed up reports and bring the number quality down. - After a utility template is paused, Meta may hold new utility templates, or the ones that are not green, for 7 days (pacing). Held messages are released gradually or dropped. - Meta's webhook about the number only reports throughput changes. That is why the platform checks the quality every 5 minutes instead of waiting for a notice. - 131026 also happens to people who did not accept the new terms or use an old app. That is why the exclusion is temporary. Troubleshooting - The campaign did not start and is paused: the number was not green at the scheduled time. Check the quality in WhatsApp Manager and resume, confirming the level if appropriate. - "Resume" is locked: the number or the template is red, or the template is not approved. Wait for Meta to release it or switch templates. - A contact who has WhatsApp was left out: open the contact and look for the 131026 mark. It clears when they write to the business, or you can include contacts without WhatsApp in the campaign. See also - WhatsApp campaign for contact lists - WhatsApp campaign results and analysis - Campaign opt-outs - Campaign audience
Campaign opt-outs
Overview The opt-out list belongs to the whole account. A contact on it receives no campaign at all, of any category (marketing, utility or authentication) and on any channel (official WhatsApp or WhatsApp Web, SMS and API). A contact joins the list in three ways: - by sending exactly one of the opt-out keywords, such as "stop" or "unsubscribe"; - by tapping a template quick-reply button whose text is one of those keywords, for example "Pause messages"; - by being added by an administrator on the opt-out screen. This list is different from WhatsApp's own "Stop promotions", which the customer turns on inside the app. That one only covers marketing and only the number they stopped, and the platform already honors it on its own. The two protections work together. Prerequisites - Administrator access to view the list, add or remove contacts and change the settings. - For the button to work, the template needs a quick-reply button whose text is the opt-out keyword. Step by step View the list 1. Open Campaigns β Opt-outs. 2. Search by name, phone or email. 3. Each row shows how the contact joined, since when, the keyword they sent and the link to the conversation. Set up the keywords and the confirmation 1. Click Opt-out settings. 2. Review the opt-out keywords, one per line. Accents, uppercase letters, emojis and punctuation at the edges are ignored: "βΈοΈ Pause messages" counts as "pause messages". 3. Optional: set keywords to receive campaigns again. 4. Optional: turn on Send a confirmation to the contact and write the text in Portuguese, English and Spanish. 5. Click Save settings. Add or remove a contact 1. Add contact: choose the contact, write a note (for example "asked by phone") and confirm. 2. Remove from list: click Remove from list on the contact's row and confirm. Only do this when the contact asks to receive campaigns again. Settings & options | Option | Default | Note | |---|---|---| | Recognize opt-out keywords | on | When off, only administrators add contacts. | | Opt-out keywords | parar, sair, pausar mensagens, descadastrar, stop, unsubscribe, baja | The whole message must equal the keyword. | | Keywords to receive campaigns again | empty | They take the contact off the list. | | Send a confirmation to the contact | off | Turn it on only if no flow or bot already answers the button. | Use cases - "Pause messages" button on the template: the customer's tap now really opts them out, instead of only becoming a text message in the conversation. - Request by phone or email: the administrator adds the contact with a note. - Data protection audit: the history shows when and how each contact joined or left the list. Tips, limits & best practices - Matching is exact: "I don't want to stop now" opts nobody out; only "stop" on its own does. - Prefer short, unambiguous keywords. Avoid words common in a conversation, such as "ok" or "no". - If a flow already answers the opt-out button, leave the confirmation off so the contact does not get two answers. - The audience preview shows how many contacts were left out because they are on the list. - Known limitation: the list lives in the contact's consent history. If a contact's data is erased under a data protection request, their place on the list is erased with it. A contact created again later receives campaigns until they opt out again. Troubleshooting - The contact tapped the button and did not join the list: check that the button text is among the opt-out keywords and that the recognition is on. - The contact received two answers: turn off Send a confirmation to the contact or the flow that answers the button. - A contact taken off the list still receives nothing: check whether they stopped promotions inside WhatsApp. That block belongs to the customer and applies to marketing campaigns. See also - Quality protection, warm-up and hygiene in WhatsApp campaigns - Campaign audience - WhatsApp campaign for contact lists