Campaigns
Send one message to many contacts — WhatsApp templates, rich media, or interactive broadcasts — with per-recipient personalisation, scheduling, retry, and real-time delivery analytics.
TL;DR
- What it is — a broadcast module for WhatsApp and email. A campaign targets a recipient audience (chats, contacts, or a CSV), uses an approved WhatsApp template (or a rich-media message where the channel allows), schedules for a future time, and tracks per-recipient delivery status.
- Who it's for — admins running marketing pushes, operations teams sending transactional bulk messages, and owners reviewing campaign performance.
- Top outcome — reach up to 100,000 recipients in one campaign with per-recipient personalisation, automatic retry, and delivery analytics — without losing the CRM's guest-context features on the replies that come back.
At a glance
| Plan tier | All paid tiers. |
| Who can use it | Account Owners and Admins can create campaigns. Users can view. |
| Channels | WhatsApp Official (templates at scale — around 600 messages per minute), WhatsApp Unofficial (free text only — around 6 messages per minute by default, tunable), Email, plus other channels supported by your messaging setup. See Official vs Unofficial below. |
| Integrations | Approved WhatsApp templates, Contacts for audience, Bot Journeys for reply handling. |
| Top limits | 100,000 recipients per campaign · 1 – 10 retry attempts · Schedule must be in the future. |
| API | Yes — partner API for creating, listing, cancelling, and inspecting campaigns. |
How to find it
Sidebar → Campaigns.
Direct URL: https://app.lodgestory.com/crm/campaigns
Creation path: + New Campaign at the top of the list — opens the four-step wizard.
Detail path: click any row in the list to open that campaign's progress view.
📸 [SCREENSHOT: campaigns-nav.png — sidebar with Campaigns highlighted]
What is Campaigns?
The problem it solves
Broadcasting on WhatsApp isn't like email. There's a 24-hour rule that limits free-text messaging once a conversation goes cold; to initiate at scale you need pre-approved templates with constrained variable slots. Template approval takes 24 – 48 hours. Rate limits are real and different per channel grade. Per-recipient personalisation requires variable substitution at send time. And delivery isn't automatic — every message has its own lifecycle (queued → sent → delivered → read / failed).
Campaigns handles all of that: the approval check (it refuses to schedule a campaign using a non-approved template), the rate-limit pacing (releasing messages at the channel's allowed rate), per-recipient variable substitution (from global values, contact fields, or CSV columns), retry logic (up to 10 attempts on transient failures), and real-time delivery roll-up (refreshed while the campaign runs).
What you get
- Audience from three sources. Pick existing chats, query contacts with filters (including custom fields), or upload a CSV.
- Four message types. Plain text on non-WhatsApp channels; WhatsApp templates on Official (the scale path); media with caption (image, video, document) where the channel supports it; interactive messages (reply buttons, lists) where the channel supports them.
- Per-recipient personalisation. Template variable slots can be filled globally, from a standard or custom contact field, or from a CSV column — evaluated at send time.
- Scheduled, not immediate. Every campaign requires a future send time. The system releases messages at the channel's rate cap until the campaign completes.
- Retry built in. Per-recipient attempts are tracked; transient failures retry automatically up to your configured limit; permanent failures (invalid number, opt-out) stop trying and log the reason.
- Cancel mid-run. You can cancel a running campaign; already-sent messages aren't rolled back (that's a platform limitation — messages can't be recalled), but no further messages go out.
- Auto-refreshing progress. The list page refreshes automatically while any campaign is active. The detail page updates every few seconds while a campaign is in progress.
How it's different
- Template approval is enforced before scheduling. If your template hasn't been approved yet, the campaign won't schedule. You cannot accidentally queue a broadcast against a pending template.
- Variable substitution is three-layered. Each template slot can pull from a campaign-wide global, a named contact field, or a CSV column — in that priority. One campaign can mix all three across its slots.
- Campaigns share the same scheduled-message engine as the inbox. Scheduling a single message from the inbox composer uses the same pipeline as a 100,000-recipient campaign. They aren't separate code paths.
Customer scenarios
- Flash-sale broadcast. A hospitality group sends a template to 12,000 recent guests: "Weekend rates up to 30% off — valid 48 hours." The template has one slot for the guest's first name pulled from contacts. Scheduled for Thursday at 4 PM. By Friday morning, 11,400 delivered, 410 failed (mostly opt-out), 190 still retrying. Replies enter the inbox; the assigned bot journey classifies interested vs not interested and routes interested chats to an agent.
- Utility notification at booking time. A property-management webhook triggers a "booking confirmed" campaign to one recipient with the confirmation template. Mechanically identical to a 100,000-person campaign; the engine doesn't penalise singletons.
- Re-engagement via CSV. Marketing exports a segment from a BI tool, adds an Offer code column, and uploads the CSV as the audience. Each recipient's template fills {first name} and {offer code} from the row. The campaign runs; offer codes land personalised.
How it fits with the rest of Lodgestory
Upstream: Contacts is the audience source; WhatsApp Templates is the content source; Connections decides which channel a campaign can run on. Downstream: every reply to a broadcast enters Home; if the channel has a Bot Journey, replies trigger that journey. Cross: Analytics rolls up campaign volume; Reports exports per-message delivery history.
📸 [SCREENSHOT: campaigns-landing.png — campaigns list with active and completed campaigns]
Core concepts
| Term | What it means |
|---|---|
| Campaign | A scheduled broadcast with a recipient audience, a message (or template), and a send time. |
| Status | Draft, Scheduled, In progress, Completed, or Cancelled. |
| Message type | Text, Template, Image, Video, Document, or Interactive. |
| Variable mapping | For template campaigns, instructions that tell the system how to fill each template slot — global value, contact field, or CSV column. |
| Audience source | How recipients were chosen — existing chats, filtered contacts, or an uploaded CSV. |
| Per-recipient status | Pending, Processing, Completed, or Failed — tracked individually for every person in the audience. |
Quick Start — send your first broadcast in 7 minutes
Step 1 — Open Campaigns
Sidebar → Campaigns or https://app.lodgestory.com/crm/campaigns.
Step 2 — Click + New Campaign
Opens the four-step wizard.
Step 3 (Wizard 1) — Pick the channel
Dropdown of connected channels. WhatsApp Official is the default for scale. The choice drives which message types and templates are available downstream.
📸 [SCREENSHOT: campaigns-qs-1-channel.png — wizard step 1, channel]
Step 4 (Wizard 2) — Compose the message
Three paths, based on channel capability:
- Template (WhatsApp Official / Unofficial) — picker shows only approved templates for the selected channel. On pick, variable slots appear with a source selector per slot: contact field, CSV column, or global value.
- Quick (non-template text or simple media) — plain text with optional media attachment.
- Interactive (channels that support it) — reply buttons or list selection built inline.
If the template isn't approved yet: you'll see "Template is not approved for use" and the campaign won't save. Wait for approval.
Step 5 (Wizard 3) — Pick the audience
Three options:
- Existing chats — multi-select from the chat list with the same filters as the inbox.
- Contacts — filter by standard fields and custom fields. Campaign creates a chat per contact at send time if needed.
- CSV upload — columns must include at minimum
phoneandcountryCode. Any extra columns can feed personalisation variables.
Step 6 (Wizard 4) — Schedule & submit
Pick a future date and time. The send-rate budget is configurable here. Click Schedule.
What you'll see next: the campaign appears in the list with status Scheduled and a countdown to the send time.
Step 7 — Watch it run
The list refreshes automatically. Click the row to open the detail page — it updates every few seconds while the campaign is in progress. Progress bars show sent, delivered, and failed counts.
How it works
When you schedule a campaign, Lodgestory:
- Validates the template's approval status (for template campaigns).
- Validates the audience size (up to 100,000) and the future send time.
- Validates every variable slot has at least one source to pull from.
- Resolves the audience to a list of recipients — creating chats for contacts that don't have one yet.
- Creates one send-job per recipient in the message queue.
At send time:
- The queue releases as many messages as the channel's rate cap allows.
- For each recipient, Lodgestory resolves variable values (global, contact field, or CSV row) and delivers the message.
- Success marks the recipient's job as delivered; transient failures retry with back-off up to the configured limit; permanent failures stop trying and log the reason.
- When every recipient has either succeeded or exhausted retries, the campaign moves to Completed.
Official vs Unofficial WhatsApp — the rules that change per channel
Campaigns behave differently depending on the WhatsApp channel type. The differences come from WhatsApp's own policy (for Official) and account-safety throttling (for Unofficial).
Templates
- WhatsApp Official — templates and free text are both possible, but for broadcasts at scale you almost always use an approved template. Template approval is a platform-side process; approvals typically take 24 – 48 hours. A campaign against a non-approved template won't save.
- WhatsApp Unofficial — templates are not supported. Campaigns on Unofficial channels send free text (plus media and interactive messages). No approval process, no waiting.
24-hour messaging window
- Official is subject to the 24-hour rule at the platform level. For scale broadcasts this effectively means "template-only for Official campaigns" — you can't rely on a 24-hour window for 100,000 people.
- Unofficial has no 24-hour window. Free text to opted-in contacts at any time.
WhatsApp groups
Both channels support groups. In practice, Unofficial is the typical choice for group-heavy broadcasts because the Official channel is oriented to 1:1 business-to-customer flows.
Campaign rate limits — why Unofficial is much slower
| Channel | Effective throughput |
|---|---|
| WhatsApp Official | Around 600 messages per minute |
| WhatsApp Unofficial | Around 6 messages per minute by default |
| Email / other | Around 6 messages per minute by default |
The Unofficial throttle is a deliberate account-safety measure, not a technical limit. Sending faster on an unofficial WhatsApp number can trigger abuse detection and get the number banned — banned numbers are significantly harder to recover than any per-conversation fee.
Admins who have warmed up an Unofficial number with steady engaged traffic can ask for the per-channel send rate to be tuned up.
Campaign implications. A 50,000-recipient Official campaign finishes in around 90 minutes. The same 50,000 on Unofficial at default settings takes several days. Plan accordingly:
- Use Official for time-sensitive promos and transactional sends; use templates; accept the approval delay.
- Use Unofficial for drip campaigns, lists where opt-in is clear and a 24-hour window isn't available, or group broadcasts. Stagger them across days rather than queuing huge batches in one go.
Cost model
- Official charges per conversation window (pricing varies by country and message category). Predictable but per-message adds up.
- Unofficial has a flat account cost; per-message cost is effectively zero. The trade-off is account-ban risk.
Why future scheduling is mandatory
The send time must be in the future. This forces every campaign through the paced queue — you can't accidentally fire 100,000 messages into a single burst that would slam the channel and your own rate budget.
Features in depth
Campaigns list
Paginated table. Typical columns: campaign name, channel, status, recipient count, sent / delivered / failed progress, send time, creator, actions (open, cancel).
Filters: Status dropdown, Search by name. Auto-refreshes while any campaign on the page is in progress.
Creation wizard
Four linear steps with Next / Back navigation:
- Channel — picks the telephony or messaging channel; downstream options depend on this.
- Compose — three sub-paths (Template / Quick / Interactive) with variable mapping UI if Template is chosen.
- Audience — three sub-paths (Chats / Contacts / CSV). The Contacts picker uses the same filter builder as the Contacts page.
- Schedule & Submit — date picker, rate selector, submit.
Detail page
Click any row in the list. Shows the campaign metadata, status, progress bars, a paginated messages table with per-recipient status filter, Cancel button, and a Download link to the CSV export in Reports.
Updates every few seconds while the campaign is in progress.
Audience — Chats source
Multi-select from the chat list. Resolves directly to chats — no contact lookup at send time.
Audience — Contacts source
Filter builder using standard fields and custom fields from Contact Fields. If a chosen contact has no chat on the selected channel yet, a chat is created at send time.
Audience — CSV source
- Must include
phoneandcountryCodecolumns. - Any other columns can be referenced as variable sources in the template.
- Duplicate rows (same phone + country code) are de-duplicated within the upload.
- File size: same 10 MB cap as bulk imports.
Retry and attempts
Set the per-recipient retry limit (1 – 10 attempts; typical default 3). The engine backs off between attempts. Final failures are logged with a readable reason.
Cancel mid-run
Valid from Scheduled or In progress. Pending recipients are skipped from the next send tick. Already-sent messages aren't rolled back — WhatsApp has no recall API.
Template approval gate
On save, Lodgestory checks that the selected template is approved. If not, the campaign won't save until the template is approved.
Reply handling
Campaigns are send-only. Inbound replies enter the inbox normally. The channel's assigned bot journey (if any) triages them; otherwise they queue for an agent.
Roles and permissions
| Action | Account Owner | Admin | User |
|---|---|---|---|
| View campaigns list | ✓ | ✓ | ✓ |
| View campaign detail and messages | ✓ | ✓ | ✓ |
| Create a campaign | ✓ | ✓ | ✗ |
| Cancel a campaign | ✓ | ✓ | ✗ |
| Download campaign CSV via Reports | ✓ | ✓ | ✗ |
Cross-module workflows
Broadcast → reply routing → conversion tracking
A campaign sends 50,000 approved templates. Replies arrive in the inbox over the next hour. The channel's assigned bot journey classifies intent. Interested replies hit a goal node that records which campaign the chat came from. The goals page shows the funnel: 50,000 sent → 4,200 replied → 1,100 classified interested → 340 converted to bookings.
Modules involved: Contacts → Campaigns → Home → Bot Journeys → Goals → Reports.
Single-recipient utility campaign
A property-management webhook fires a "booking confirmed" campaign for a single guest. The engine sends at the webhook-provided time — the same mechanics used for a 100,000-person broadcast.
Limits a user will run into
| Limit | Value |
|---|---|
| Max recipients per campaign | 100,000 |
| Retry attempts per recipient | 1 – 10 (typical default 3) |
| Send time | Must be in the future |
| Rate — WhatsApp Official | Around 600 messages per minute |
| Rate — WhatsApp Unofficial | Around 6 messages per minute by default; tunable after account warm-up |
| Rate — Email / other | Around 6 messages per minute by default |
| List page size | 100 campaigns per page |
| CSV upload | 10 MB |
Errors & FAQ
| You see | Likely reason | What to do |
|---|---|---|
| "Template is not approved for use" | Template is pending or rejected | Resubmit the template or pick an approved one |
| "Schedule time must be in the future" | Chosen send time is in the past | Pick a later time (even one minute ahead) |
| "Recipient count exceeds maximum of 100000" | Audience over the cap | Split into multiple campaigns |
| "Variable mapping is incomplete" | A template slot has no source set | Add a source (global, contact, or CSV) for every slot |
| "Campaign not found" | Bad ID or cross-organisation access | Verify the link; switch organisations if needed |
| "Cannot cancel a COMPLETED campaign" | The campaign already finished | Nothing to do — it's already delivered |
| Per-recipient "Template not approved" | Approval was revoked after the campaign was created | Cancel, resubmit the template, create a new campaign |
| Per-recipient "Recipient not opted in" | WhatsApp rejected the send | No fix per recipient; ensure opt-in upstream |
| Per-recipient "Rate limit exceeded" | Transient provider throttling | Usually self-heals on retry |
| Per-recipient "Invalid phone number" | Bad phone / country-code format | Clean contact data; re-run on a pruned audience |
Frequently asked
Why does my campaign still show "In progress" hours after the last message was sent?
Check the messages table — some recipients may still be retrying transient errors. The campaign moves to Completed only when every recipient is in a terminal state. If retries are exhausted they flip to Failed and the campaign closes.
Why did my 100,000-recipient campaign take three-plus hours to complete?
Rate limits. WhatsApp Official caps around 600 per minute — that's already close to three hours at full throughput. Rates are per-channel budgets set by the channel provider; Lodgestory can't exceed them.
Can I edit a scheduled campaign?
Not after creation. Audience and template are locked at create time for integrity. Cancel and create a new campaign.
Can I send a campaign without a template on WhatsApp Official?
Only within the 24-hour window of each recipient, which isn't a batch operation. In practice no — Official campaigns are template-only at scale.
Can I run a campaign on WhatsApp Unofficial without a template?
Yes — Unofficial is free-text only. Templates aren't supported there.
Why does Unofficial take so much longer than Official?
The default send rate is conservatively capped to protect the account from WhatsApp's abuse detection. Faster sending risks a ban on the number. Admins can tune the rate up once a number has warmed up.
Can I broadcast to WhatsApp groups?
Yes on both channels. Unofficial is the typical choice for group-heavy broadcasts.
Why did some recipients get the wrong personalisation?
Variables are resolved at send time. If a contact's field changed between campaign creation and send time, the newer value wins. For a fixed snapshot, use the CSV source instead of contact-field references.
Why doesn't cancelling recall already-sent messages?
WhatsApp has no recall. Cancel stops further sends; it can't un-deliver.
Related modules & next steps
- WhatsApp Templates — approval prerequisite.
- Contacts and Contact Fields — audience and personalisation source.
- Bot Journeys — reply handler for the inbound flood.
- Home (Unified Inbox) — where replies land.
- Reports — per-message CSV export.
- Analytics — organisation-wide campaign volume.
- Connections — channel selector source.
Updated about 4 hours ago