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.
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
conservativepacing_profilewhen 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_outwebhook with your CRM so you don't try to re-import.
Antipatterns that burn a number
| ❌ Avoid | ✅ Do |
|---|---|
| Buying/scraping lists | Collecting opt-in with proof |
| All volume on one number | Rotating across 2+ numbers |
| Blasting from a new number | Warming up before giving volume |
| Identical text for everyone | Variables + spintax + variations |
| Ignoring who said STOP | Letting opt-out suppress |
| Pushing a failing number | Letting it rest and rotating |
| 24h bursts | Human pace, time window |
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.