Skip to content

Banned after 3 messages despite implementing ALL #532 recommendations: randomized intervals (20-35s), cooling periods, save contact, 93% lower volume #4008

@CASSIOSOUZA

Description

@CASSIOSOUZA

Is there an existing issue for this?

  • I have searched the existing issues.

Is this a problem caused by your code, or is it specifically because of the library?

  • I have double-checked my code carefully.

Describe the bug.

🚨 Resumo do Problema

Implementei todas as medidas anti-ban recomendadas na issue #532 e discussões relacionadas. Minha configuração foi significativamente mais conservadora que casos documentados de sucesso:

  • 93% menos volume (110 msgs vs 1500 no caso banido da account banned (frequently) #532)
  • 9x mais lento (20-35s aleatório vs 3s fixo)
  • Períodos de pausa (2-3min a cada 25 mensagens)
  • Solicitação para salvar contato (mensagem amigável automatizada)
  • Uso transacional legítimo (confirmações de agendamento)

Resultado: Mesmo assim recebi ban de 24 horas após aproximadamente 3 mensagens.

Buscando insights da comunidade sobre o que pode estar faltando ou se existem fatores não documentados.


📊 O Que Implementamos

1. Intervalos Randomizados

// Delay aleatório: 20-35 segundos (média 27.5s)
pausaEntreItensMs: randomDelay(20000, 35000)
  • Sem padrões fixos
  • Ampla variação de 15 segundos
  • Timing imprevisível para evitar detecção

2. Pausas Longas (Cooling Periods)

// Pausa a cada 25 mensagens por 2-3 minutos
pausaLongaCadaX: 25
pausaLongaMs: randomDelay(120000, 180000)
  • 4 períodos de pausa por lote de 110 mensagens
  • Duração randomizada (2-3 minutos)
  • Simula pausas de operador humano

3. Delays Entre Múltiplas Mensagens

Para contatos de primeira vez (3 mensagens sequenciais):

// Mensagem principal do agendamento
await whatsapp.sendMessage(phone, appointmentDetails)

// Aguarda 15-25 segundos
await sleep(randomDelay(15000, 25000))
await whatsapp.sendMessage(phone, saveContactRequest)

// Aguarda 20-30 segundos  
await sleep(randomDelay(20000, 30000))
await whatsapp.sendMessage(phone, medicalDocumentReminder)

4. Solicitação para Salvar Contato

const saveContactMessage = `Oi! Pode me fazer um favor?

Se você salvar meu contato no seu celular, nossas mensagens chegarão corretamente.

Eu sou *[Nome]* da *[Empresa]*. Salvando meu número, você pode me contatar quando precisar. 😊

Obrigado!`
  • Solicita explicitamente que destinatários salvem o contato (recomendado na account banned (frequently) #532)
  • Tom amigável e conversacional
  • Estabelece relacionamento legítimo

5. Baixo Volume

  • Apenas 110 mensagens/dia (vs 1500 no caso banido da account banned (frequently) #532)
  • Distribuído ao longo de ~60 minutos (não envio instantâneo em massa)
  • Bem abaixo do threshold de 200/dia mencionado em discussões da comunidade

6. Contexto Legítimo

  • Mensagens transacionais (confirmações de agendamento, não promocionais)
  • Destinatários solicitaram o serviço explicitamente
  • Sem palavras-chave de spam (desconto, grátis, promoção, ganhe, etc.)
  • Tom profissional e informativo

📈 Comparação com Caso Banido (#532)

Métrica Caso Banido (#532) Nossa Implementação Melhoria
Volume Diário 1500 mensagens 110 mensagens Redução de 93%
Intervalo de Envio 3 segundos (fixo) 20-35 segundos (aleatório) 9x mais lento
Duração Total 1h15min ~60 minutos Similar
Pausas Longas Nenhuma 4× pausas de 2-3min Implementado
Solicitação Salvar Contato Não Sim (automatizado) Implementado
Contexto da Mensagem Promocional/spam Transacional Legítimo
Randomização Não Sim (amplas variações) Implementado
Resultado Banido após 10-200 BANIDO após ~3 ❌❌❌

🔴 O Que Aconteceu

Timeline:

  1. Iniciado envio às 10:46 AM
  2. Primeira mensagem enviada com sucesso (mensagem principal)
  3. Segunda mensagem enviada com sucesso (solicitar salvar contato)
  4. Terceira mensagem enviada com sucesso (followup/lembrete)
  5. Notificação de ban recebida - restrição de 24 horas
  6. Total de mensagens enviadas antes do ban: aproximadamente 3

Ban apareceu quase imediatamente mesmo com todas as precauções implementadas.


🤔 Possíveis Razões (Preciso de Input da Comunidade)

Hipótese 1: Flag de Conta Nova 🆕

  • Número WhatsApp recém-criado
  • Enviando 100+ mensagens imediatamente sem "período de aquecimento"
  • Pergunta: Contas novas precisam de aumento gradual de volume?
    • Semana 1: 10 msgs/dia
    • Semana 2: 25 msgs/dia
    • Semana 3: 50 msgs/dia
    • Semana 4: 100+ msgs/dia

Hipótese 2: Detecção de Primeiro Contato 📱

  • Destinatários não têm nosso número salvo inicialmente
  • Enviar para 110 contatos não salvos aciona filtro de spam
  • Pergunta: Solicitar "salvar contato" realmente ajuda, ou já é tarde demais?

Hipótese 3: Sequência de Múltiplas Mensagens 📨

  • Enviar 3 mensagens em rápida sucessão (mesmo com delays de 15-25s)
  • Pode acionar detecção automatizada
  • Pergunta: Devemos evitar sequências de múltiplas mensagens completamente no primeiro contato?

Hipótese 4: Threshold de Volume Menor Que o Esperado 📊

  • Talvez o threshold real seja 50-75 mensagens/dia, não 200
  • Pergunta: Alguém já conseguiu enviar 100+ mensagens transacionais/dia sem problemas?

Hipótese 5: Reconhecimento de Padrões Além dos Intervalos ⏰

  • Padrões de horário do dia (10-11 AM)
  • Padrões de envio em lote (mesmo com randomização)
  • Pergunta: Devemos distribuir envios ao longo de todo o dia?
    • Manhã: 8-10 AM (30 mensagens)
    • Tarde: 2-4 PM (40 mensagens)
    • Noite: 6-8 PM (40 mensagens)

💡 Perguntas para a Comunidade

  1. Mensagens transacionais legítimas são fundamentalmente incompatíveis com web.js?

    • Devemos abandonar essa abordagem pela API do WhatsApp Business?
    • Existem exemplos de sucesso de casos similares (hospitais, clínicas, sistemas de agendamento)?
  2. Qual é o volume REALMENTE seguro para contas novas?

  3. Solicitar "salvar contato" realmente previne bans?

    • Implementamos mas fomos banidos mesmo assim
    • Existe evidência de que isso ajuda?
  4. Estratégias de aquecimento de conta que funcionam?

    • Qual é um cronograma seguro de ramp-up?
    • Quanto tempo deve durar o período de aquecimento?
  5. Existem padrões de horário para evitar?

    • Horários específicos que acionam detecção?
    • Envios devem ser mais aleatórios ao longo do dia?
  6. Sequências de múltiplas mensagens são seguras ou arriscadas?

    • Enviar 3 mensagens para o mesmo contato (com delays) é uma red flag?
    • Devemos manter apenas 1 mensagem por contato por dia?

🔄 Our Next Steps (After Ban Lifts)

Ultra-Conservative Configuration v2

// ULTRA CONSERVATIVE:
pausaEntreItensMs: randomDelay(60000, 120000)    // 60-120s (avg 90s) 
pausaLongaCadaX: 10                               // Pause every 10 msgs
pausaLongaMs: randomDelay(300000, 600000)        // 5-10 min pauses

// For multiple messages to same contact:
await sleep(randomDelay(60000, 90000))    // 60-90s between msgs

Projected time: 4-6 hours for 110 messages

Alternative Approach: Account Warming

// Week 1: Warm-up phase
- Days 1-3: 5 messages/day
- Days 4-7: 10 messages/day

// Week 2: Gradual increase
- Days 8-10: 20 messages/day
- Days 11-14: 35 messages/day

// Week 3: Target volume
- Days 15-21: 50 messages/day

// Week 4+: Full volume
- Day 22+: 100 messages/day

Alternative Approach: Daily Distribution

// Spread throughout day instead of single batch:
Morning batch:   8:00-10:00 AM  (30 messages, 3-5 min intervals)
Afternoon batch: 2:00-4:00 PM   (40 messages, 3-5 min intervals)  
Evening batch:   6:00-8:00 PM   (40 messages, 3-5 min intervals)

📝 Technical Details

Environment:

  • Node.js v22.18.0
  • whatsapp-web.js (latest stable)
  • TypeScript 5.3
  • Clean Architecture pattern
  • Redis queue (DB 15)
  • Winston logging

Phone Format Handling:

// Handles both @c.us and @lid formats
function trataTelefoneWhatsappCompleto(tel: string): string {
  // Ensures: 55 + area code + number
  // Examples: 
  //   5562999999999@c.us
  //   54627806498891@lid
}

Message Queue Pattern:

// Redis keys: wh_exames:{phone}
{
  "numero": "5562999999999",
  "mensagem": "Appointment details...",
  "pacienteId": 12345,
  "agendamentoId": 6789,
  "data": "09/12/2025",
  "horario": "09:00"
}

Retry Logic:

maxTentativas: 3
// Retry with exponential backoff on failures
// Skip unregistered numbers (not counted as failures)

🙏 Help Needed

Specific feedback needed:

  1. Has anyone successfully sent 50-100+ transactional messages/day with similar configurations?
  2. What account age/warming strategies actually work in practice?
  3. Are there working code examples or successful configurations we can reference?
  4. At what point should we abandon web.js for Business API?
  5. Are there logs/metrics I should be monitoring to predict bans?

Reference discussions:


📋 Complete Checklist

Implemented:

  • Randomized intervals (20-35s, avg 27.5s)
  • Long cooling periods (2-3min every 25 msgs)
  • Delays between multiple messages (15-30s)
  • Request recipients to save contact
  • Legitimate transactional context (medical)
  • Low daily volume (110 vs 1500 in account banned (frequently) #532)
  • No spam keywords
  • Extended total time (~60min spread)
  • Comprehensive logging and monitoring

Not Implemented (considering):

  • Account warming/gradual ramp-up
  • Onboarding/opt-in flow (recipients initiate first)
  • Daily distribution (spread across morning/afternoon/evening)
  • Single message per contact (avoid multi-message sequences)
  • WhatsApp Business API migration

Result: ❌ 24-hour ban after ~3 messages despite implementing all #532 recommendations

Community feedback and experiences would be invaluable! Thank you 🙏


Environment Info:

  • OS: Windows 11
  • Node: v22.18.0
  • whatsapp-web.js: latest stable
  • Use case: Transactional appointment/reminder system
  • Architecture: Clean Architecture + TypeScript
  • Queue: Redis-based message queue

Expected Behavior

Envio de mensagens

Steps to Reproduce the Bug or Issue

Envio de mensagens

WhatsApp Account Type

WhatsApp Business

Browser Type

13

Operation System Type

windows

Phone OS Type

android

WhatsApp-Web.js Version

1.34.2

WhatsApp Web Version

1.34.2

Node.js Version

20.14.10

Authentication Strategy

LocalAuth

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions