-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Description
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:
- Iniciado envio às 10:46 AM
- Primeira mensagem enviada com sucesso (mensagem principal)
- Segunda mensagem enviada com sucesso (solicitar salvar contato)
- Terceira mensagem enviada com sucesso (followup/lembrete)
- Notificação de ban recebida - restrição de 24 horas
- 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
-
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)?
-
Qual é o volume REALMENTE seguro para contas novas?
- Tentamos 110/dia (muito conservador vs 1500 da account banned (frequently) #532)
- Devemos ir ainda mais baixo (25-50/dia)?
-
Solicitar "salvar contato" realmente previne bans?
- Implementamos mas fomos banidos mesmo assim
- Existe evidência de que isso ajuda?
-
Estratégias de aquecimento de conta que funcionam?
- Qual é um cronograma seguro de ramp-up?
- Quanto tempo deve durar o período de aquecimento?
-
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?
-
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 msgsProjected 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/dayAlternative 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:
- Has anyone successfully sent 50-100+ transactional messages/day with similar configurations?
- What account age/warming strategies actually work in practice?
- Are there working code examples or successful configurations we can reference?
- At what point should we abandon web.js for Business API?
- Are there logs/metrics I should be monitoring to predict bans?
Reference discussions:
- Issue account banned (frequently) #532 (primary reference for anti-ban measures)
- Any other threads about high-volume transactional messaging
📋 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