Skip to main content

Sending best practices (anti-ban)

WhatsApp bans robotic behavior proactively. bZapper does a lot for you — rotation, warm-up, human presence, smart 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 (rotation) and let each one mature. A healthy pool is real anti-ban.

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. Warm up a new number

A freshly connected number doesn't blast messages. bZapper puts every new number on a warm-up ramp: 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 human pace

Bursts of identical messages are a robot's signature. bZapper injects human presence (typing + pause with jitter) and respects a time window (8am–9pm) in campaigns. Help it out:

  • Don't force bulk sends outside business hours.
  • Vary the content — use variables ({name}, {amount}) and spintax ({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 campaigns require 2+ numbers connected and warmed 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 burn a number

❌ Avoid✅ Do
Buying/scraping listsCollecting opt-in with proof
All volume on one numberRotating across 2+ numbers
Blasting from a new numberWarming up before giving volume
Identical text for everyoneVariables + spintax + variations
Ignoring who said STOPLetting opt-out suppress
Pushing a failing numberLetting it rest and rotating
24h burstsHuman pace, time window
Ready-made tooling

Many of these practices are already built in: Campaigns apply pacing, rotation, warm-up, smart pause and suppression on their own. See Campaigns and the anti-ban concepts.