Moderador escutando o grupo resumos 4× ao dia janela 24 h banimento automático ROI Labs

Bot moderador para grupos de WhatsApp

Ninguém lê 400 mensagens.

Quem entra no grupo às 20h não vai rolar o dia inteiro para trás. Ou existe um resumo, ou a conversa da manhã simplesmente não aconteceu para essa pessoa.

O bot escuta o grupo o dia inteiro pela Evolution API, guarda cada mensagem de texto em SQLite e, quatro vezes por dia, manda as últimas 24 horas para o Llama 3.3 70B — e devolve o resumo ao próprio grupo.

Um dia do grupo 00:00
02:0008:0014:0020:00
Resumo enviado ao grupo

Acumulando mensagens até o próximo horário.

O resumo volta pelo mesmo canal em que a conversa aconteceu. mensagens na janela: 0

Anti-spam

A primeira mensagem decide

Divulgador de grupo tem um padrão só: entra e manda o link. Por isso a regra não olha para reputação, histórico ou aviso — ela olha para a primeira mensagem de cada usuário, uma única vez, e essa é a única chance de acertar.

primeira mensagem de um usuário novo“pessoal, entrem no meu grupo: bit.ly/xxxx”

Sem link → segue no grupo

  1. O usuário é gravado em user_first_message como válido.
  2. Nunca mais é checado — a regra vale uma vez por pessoa, não por mensagem.

Com link → removido na hora

  1. Remoção automática do grupo.
  2. Registro em user_first_message com had_link e was_banned.
  3. Aviso no grupo, para a moderação ser visível e não silenciosa.
  4. Log detalhado, para dar para auditar um falso positivo depois.
http://https://www..com.br .net.orgbit.lytinyurlt.co

Encurtador entra na lista de propósito: é justamente o formato que escapa de um filtro que só procura http.

Superfície

Três endpoints

A Evolution API empurra os eventos; o resto é operação.

RotaMétodoFaz
/webhookPOSTRecebe os eventos de mensagem da Evolution API e grava as de texto do grupo monitorado.
/summarizePOSTGera e envia o resumo na hora, sem esperar o cron.
/healthGETHealth check com as estatísticas de mensagens coletadas.

Stack

Pequeno de propósito

É um index.js, um Dockerfile e um arquivo de banco. Um bot de um grupo não precisa de mais que isso — e o que é pequeno assim se recria em minutos quando o servidor some.

Node + Express

Um processo, três rotas e um cron. Sem fila, sem worker separado.

SQLite (better-sqlite3)

As mensagens do grupo cabem num arquivo. Driver síncrono, sem pool, sem servidor de banco para manter de pé.

Groq · Llama 3.3 70B

Resumir 24 h de conversa é uma chamada por vez, quatro vezes ao dia — o modelo grande cabe no orçamento nessa frequência.

Evolution API

A ponte com o WhatsApp. O bot só fala HTTP: recebe evento por webhook e responde mandando mensagem de volta.

Rodar

Um container e um webhook apontado

O cron já vem nos quatro horários. Trocar a frequência é trocar a expressão — o resto não muda.

# subir
docker compose up -d

# apontar a Evolution API para o bot
POST https://sua-evolution/webhook/set
  { "url": "https://seu-bot/webhook" }

# forçar um resumo agora, sem esperar 08:00
curl -X POST https://seu-bot/summarize
Ler o código no GitHub