Skip to main content

Sending best practices

WhatsApp bans robotic behavior proactively. bZapper does a lot for you — rotation, volume ramp-up, pacing, automatic pause — but the final outcome depends on how you use it. This guide gathers the practices that protect your numbers the most.

Rule number one

High volume on a single number is what gets you blocked the most. Spread it across several numbers (redundancy) and give each one time. A healthy pool is what sustains delivery.

1. Only send to people who consented

The root cause of most bans is unsolicited messages. Someone who doesn't recognize the sender reports it — and a report is the strongest signal for WhatsApp to block.

  • Collect a free, informed and unambiguous opt-in (see Privacy & LGPD).
  • Never buy lists or import contacts who didn't ask to receive.
  • Let opt-out work: whoever replies STOP/SAIR/PARAR is suppressed automatically and must not return to the base.

2. Ramp up a new number

A freshly connected number doesn't blast messages. bZapper puts every new number on a ramp-up: a daily cap that grows gradually. Respect it.

  • Start with few messages per day and ramp up.
  • Prefer real conversations (back and forth) at first — not just broadcast.
  • Only give volume to a number after it matures (we recommend 7+ days).

3. Keep a healthy pace

Sending everything at once is intrusive for whoever receives it. bZapper applies pacing between messages and respects a time window (8am–9pm) when sending to lists. Help it out:

  • Don't force bulk sends outside business hours.
  • Vary the content — use variables ({name}, {amount}) so the message ({Hi|Hello|Hey}) so two people don't get identical text. See Campaigns.
  • Prefer the conservative pacing_profile when the base is cold or new.

4. Rotate across several numbers

A pool with rotation spreads the load and takes at-risk numbers out of circulation — automatically. That's why list sending requires 2+ numbers connected and past ramp-up.

  • Available strategies: round_robin, least_used, health_weighted.
  • Each number has a live health score; rotation favors the healthy ones.
  • Conversation affinity (sticky): once a number talks to a customer, it keeps going — the conversation doesn't "jump" between numbers.

5. Read the block signals

bZapper watches the signals and acts before the ban:

  • Smart pause — if messages stay at "sent" and never reach "delivered", the campaign pauses on its own and you're warned (webhook campaign.paused).
  • Inferred block — numbers in that state enter suppression as blocked_inferred (they block in the account's strict mode).
  • Drop alerts — when a number drops or is banned, you get a real-time alert.

If a number starts failing, don't push it: let it rest and let rotation take over.

6. Always respect suppression

  • Whoever asked to leave stays out — the block list stops the send before queuing.
  • Blocks by opt-out or manual are a wall: they don't get through even with force.
  • Sync the contact.opted_out webhook with your CRM so you don't try to re-import.

Antipatterns that hurt delivery

❌ Avoid✅ Do
Buying/scraping listsCollecting opt-in with proof
All volume on one numberRotating across 2+ numbers
Giving high volume to a new numberRespecting the ramp-up first
Identical text for everyoneVariables and content relevant per contact
Ignoring who said STOPLetting opt-out suppress
Pushing a failing numberLetting it rest and rotating
Sending around the clockControlled pacing, time window
Ready-made tooling

Many of these practices are already built in: list sending applies pacing, load spreading, ramp-up, smart pause and suppression on their own. See Campaigns and the delivery concepts.