Bot moderador para grupos de WhatsApp
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.
Acumulando mensagens até o próximo horário.
Anti-spam
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”
user_first_message como válido.user_first_message com had_link e was_banned.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
A Evolution API empurra os eventos; o resto é operação.
| Rota | Método | Faz |
|---|---|---|
/webhook | POST | Recebe os eventos de mensagem da Evolution API e grava as de texto do grupo monitorado. |
/summarize | POST | Gera e envia o resumo na hora, sem esperar o cron. |
/health | GET | Health check com as estatísticas de mensagens coletadas. |
Stack
É 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.
Um processo, três rotas e um cron. Sem fila, sem worker separado.
As mensagens do grupo cabem num arquivo. Driver síncrono, sem pool, sem servidor de banco para manter de pé.
Resumir 24 h de conversa é uma chamada por vez, quatro vezes ao dia — o modelo grande cabe no orçamento nessa frequência.
A ponte com o WhatsApp. O bot só fala HTTP: recebe evento por webhook e responde mandando mensagem de volta.
Rodar
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/summarizeLer o código no GitHub