Skip to main content

Consent and quality when sending

The person who decides whether your message is welcome is the one receiving it. bZapper handles the operational side — per-number sending limits, time windows, opt-out suppression, automatic pause when delivery fails — but the quality of what arrives depends on how you use it. This guide gathers the practices that sustain a healthy base.

Rule number one

Send only what the contact asked to receive, and make it obvious who is speaking. An expected message gets read; an unsolicited one gets reported — and reports are what actually compromise a number.

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 push list sends outside business hours.
  • Vary the content — use variables ({name}, {amount}) so the message is relevant to each contact instead of one generic text for everyone. See Campaigns.
  • Prefer the conservative pacing_profile when the base is cold or new.

4. Use more than one number​

A pool with more than one number keeps delivery running when one of them becomes unavailable. By default, list sending requires 2+ numbers connected for at least 7 days.

  • Available selection strategies: round_robin, least_used, health_weighted.
  • Each number has a live health score; selection 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. When delivery starts to fail​

bZapper tracks delivery and reacts on its own when it degrades:

  • 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.