SuperdindaDocs

Anti-ban

As práticas que reduzem o risco de o WhatsApp restringir o número de uma pessoa protegida — o que a pesquisa recomenda e o que o código já impõe.

Os Termos do WhatsApp proíbem clientes não oficiais, e o risco de ban do número da pessoa protegida é inerente ao produto (AD-002). A pesquisa achou que Baileys e whatsmeow foram atingidos pelas mesmas ondas de ban, inclusive em uso passivo: a detecção é comportamental e de fingerprint, não por biblioteca. Então o que importa é parecer um dispositivo vinculado comum, usado por uma pessoa.

Aqui está só o que as fontes dizem. Ainda não temos números próprios de ban: até 2026-10-18 nenhum celular real tinha sido pareado.

Regra zero: a instância nunca envia

  • Nunca enviar mensagem, status, grupo ou broadcast pela instância (AD-002). Nenhum caminho de código chama um endpoint de envio do WAHA; o compose de dev deixa isso escrito como lembrete.
  • A taxa de envio pela instância é, portanto, zero. O que precisa chegar à pessoa (o link de consentimento e, quando o template WABA_RECONNECT_TEMPLATE existir, o pedido de reconexão) sai pela API oficial da Meta (infra/messenger, WABA_*), nunca pela sessão dela.
  • Sem presença sintética (online, digitando, lido). O adapter não tem chamada de presença.
  • A única leitura de perfil é a foto do próprio número conectado; contatos nunca.

O número e o dispositivo

Prática (pesquisa)No produto
Número já em uso real, não recém-criadopremissa: o número é o da pessoa
Um dispositivo vinculado por contaum pareamento vivo por seat_channel (PAIRING_EXISTS)
Preferir código de pareamento; QR como fallbackD3: código no celular da pessoa, QR de reserva
Evitar repareamentoreconexão reinicia a sessão existente; só desiste depois de 3 tentativas
Estado de autenticação em bancosessões no Postgres do WAHA (waha-db)
Reconexão com backoff30 s, 2 min, 10 min (RECONNECT_DELAYS_MS)
Biblioteca sempre atualizadaimagem fixada e atualizada por roteiro (Atualizar o WAHA)
String de dispositivo constantever "Em aberto" abaixo

Cada pedido de código conta contra o número no WhatsApp, por isso um pareamento pede no máximo 5 códigos (MAX_CODES_PER_PAIRING) e só pede outro quando o atual expira. As rotas públicas de pareamento ainda limitam por link e por IP.

Em aberto

A pesquisa recomenda manter constante a string de dispositivo. O POST /api/sessions não define nome nem identificação de dispositivo, então vale o padrão do WAHA/GOWS. Não verificamos qual é nem se muda entre versões.

Rede: um proxy por sessão

  • IP fixo, brasileiro, ISP: só se compra isp_dedicated; a adoção recusa DATACENTER, FOREIGN_REGISTRY e endereço por onde o WhatsApp não responde.
  • Poucas sessões por IP: PROXY_SEATS_PER_IP começa em 3. A pesquisa não achou número público e chama 10 por IP de agressivo; o valor sobe quando os nossos números de queda e ban permitirem.
  • A família junta: as sessões de uma conta vão para o mesmo endereço enquanto houver vaga.
  • Sem rotação: "Fresh IPs every renewal" desligado e auto-extend pelo saldo. Endereço vencendo com sessões dentro é incidente, porque todas voltariam de outro IP ao mesmo tempo, o padrão de sequestro de conta.
  • Proxy que cai vira reconexão, e reconexão é sinal de risco: uptime do fornecedor importa mais que preço (AD-002).

Detalhes em Proxies.

Em aberto

AD-002 pede validar na prática qual protocolo o GOWS usa melhor no proxy (HTTP ou SOCKS5). A sonda confirma que o WhatsApp é alcançável pelos dois num IP do IPRoyal, mas uma sessão GOWS de longa duração via SOCKS5 ainda não foi medida.

Histórico: uma vez, no vínculo

O WhatsApp só entrega o passado no momento do vínculo e dentro dos limites que o container do WAHA anuncia. A pesquisa pede não repetir sincronização completa a cada reconexão. A configuração (igual em dev e produção):

Variável no container WAHAValor
WAHA_GOWS_DEVICE_REQUIRE_FULL_SYNCtrue
WAHA_GOWS_DEVICE_HISTORY_SYNC_FULL_SYNC_DAYS_LIMIT / …_RECENT_SYNC_DAYS_LIMITWAHA_HISTORY_DAYS (90)
WAHA_GOWS_DEVICE_HISTORY_SYNC_INITIAL_SYNC_MAX_MESSAGES_PER_CHATWAHA_HISTORY_MESSAGES_PER_CHAT (100)
WAHA_GOWS_DEVICE_HISTORY_SYNC_FULL_SYNC_SIZE_MB_LIMIT / …_STORAGE_QUOTA_MB100
WAHA_GOWS_DEVICE_HISTORY_SYNC_THUMBNAIL_SYNC_DAYS_LIMIT0 (sem miniaturas retroativas)
WAHA_API_DOWNLOAD_MEDIA / WAHA_EVENTS_DOWNLOAD_MEDIAfalse / true (histórico sem mídia)
  • O WAHA guarda o que chega (gows.storage: mensagens, chats, contatos, grupos; sem etiquetas e sem messageSecrets), e a nossa importação lê essa cópia.
  • WAHA_HISTORY_DAYS também existe no backend, para a importação parar na mesma borda que o WAHA pediu.
  • Mudar qualquer limite exige parear todos os celulares de novo. Trate como decisão, não como ajuste.

Fontes

  • backend/src/domains/channels/adapters/waha-adapter.ts, use-cases/{start-pairing,refresh-challenge,apply-provider-state}.ts
  • backend/src/domains/proxies/use-cases/{allocate,supply,supply-orders}.ts, backend/src/config/env.ts
  • backend/docker-compose.yml, backend/docker-compose.prod.yml, backend/src/domains/ingest/use-cases/run-sync.ts
  • backend/src/http/routes/consents/pairing.route.ts (limites públicos)
  • Vault: AD-002, research/2026-09-11-whatsapp-nao-oficial (seção Anti-ban), research/2026-09-11-proxies-residenciais-br (consenso, adendo 2026-09-29), specs/2026-10-18-redesign-blueprint (estágio real)

On this page