Production checklist
Short and opinionated. Work top-down; don’t skip anything marked (must).
Meta and channel
Section titled “Meta and channel”- (must) Business Manager verified — not “pending”, fully verified.
- (must) Phone number verified against the WABA; display name approved.
- (must) System-user access token generated with
whatsapp_business_messaging+whatsapp_business_managementand “Never expire” ticked. - (must) Webhook callback URL registered in Meta app;
messagesfield subscribed. - (must) Test connection shows green in Voxa → Settings → Meta credentials.
- Audit log has at least one successful inbound webhook event from a staging test.
- (must) Flow published, not draft. The campaign binds to the published version, not the draft.
- (must) Every Question node has a unique
variable nameand a sensible copy. - (must) Every user-facing Message and Question has been previewed end-to-end through the flow builder’s Preview mode.
- Variables referenced in prompts are all spelled exactly how they were stored (a typo = silently empty string in production).
- At least one retry path for any validation node — don’t dead-end a contact on bad input.
- A terminal node on every branch — no silent dead ends.
delaynodes, if used, are ≤ 10 seconds; longer and contacts drift away.
Campaign
Section titled “Campaign”- (must) Status is live at launch time — Voxa does not auto-flip scheduled campaigns.
- (must)
entry_modematches how you’re promoting the campaign (link, QR, or keyword). - (must)
entry_limit_per_contactset correctly (usually 1 for competitions). - (must)
requires_optinmatches your legal posture — if this campaign is sent to people who didn’t opt in,requires_optinshould befalsebut you must have a different lawful basis under POPIA / GDPR. - Success / duplicate / closed messages customised — the defaults are generic.
- Keyword (if keyword-mode) doesn’t collide with an already-running campaign’s keyword.
- Planned
ends_aton your calendar — Voxa won’t close it for you.
Data and legal
Section titled “Data and legal”- (must) Opening message cites your privacy policy and terms URL.
- (must) STOP / UNSUBSCRIBE handled explicitly in the flow until the automatic handler ships.
- Contact retention policy lined up with your POPIA / GDPR posture. Voxa’s defaults are documented in the Privacy Policy § 7.
- The Information Officer (Roelf Burger by default) is aware this campaign is running if it collects a new category of personal information.
Monitoring
Section titled “Monitoring”- (must) Your team has access to the Voxa dashboard (at least one editor, one viewer).
- Subscribe to Better Stack incident alerts — status.voxa.software.
- (must) Somebody is on call during the first hour after launch. Campaigns go sideways in the first hour or not at all.
Capacity
Section titled “Capacity”- You understand your plan’s monthly_message_limit, campaign_limit, contact_limit, team_limit caps and are comfortably under them.
- If you expect a spike, consider the plan’s message cap against your estimated reach × turns-per-conversation.
- Meta’s own rate limits (throughput tier) accommodate your planned send volume. New numbers start at tier 1 (250 business-initiated conversations / 24h) and grow automatically based on quality rating.
Post-launch
Section titled “Post-launch”- First inbound conversation end-to-end inspected for correctness (names, answers, media, entry row, analytics counts).
- Export one sample of entries; confirm the CSV/XLSX format and the column names you expect are present.
- Audit log on the first 10 conversations spot-checked.
- Quality rating in Meta Business Manager checked — anything yellow or red means your messages are being marked as spam and throughput will throttle.
Rollback plan
Section titled “Rollback plan”- Know which admin has the Pause button in Campaigns — that stops new entries but keeps in-flight conversations running.
- If the flow has a bug, Unpublish in the flow builder stops the current version from starting new conversations (in-flight ones continue on the version they’re already on).
- Worst case: set the campaign
status: archived— new contacts get theclosed_message.
When all the (must) items are green, flip it live.