Skip to content

Production checklist

Short and opinionated. Work top-down; don’t skip anything marked (must).

  • (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_management and “Never expire” ticked.
  • (must) Webhook callback URL registered in Meta app; messages field 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 name and 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.
  • delay nodes, if used, are ≤ 10 seconds; longer and contacts drift away.
  • (must) Status is live at launch time — Voxa does not auto-flip scheduled campaigns.
  • (must) entry_mode matches how you’re promoting the campaign (link, QR, or keyword).
  • (must) entry_limit_per_contact set correctly (usually 1 for competitions).
  • (must) requires_optin matches your legal posture — if this campaign is sent to people who didn’t opt in, requires_optin should be false but 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_at on your calendar — Voxa won’t close it for you.
  • (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.
  • (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.
  • 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.
  • 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.
  • 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 the closed_message.

When all the (must) items are green, flip it live.