Para quem vai instalar o pacote grátis

Como o resumoGrupo funciona por dentro

O tier grátis do resumoGrupo é o repositório real, o mesmo código que roda em produção, com identificadores trocados por placeholder. Este post é pra quem vai instalar esse pacote (ou só quer entender antes de confiar): a arquitetura completa, em n8n, e as três decisões técnicas que evitaram os bugs mais prováveis.

Ver a arquitetura ↓

Visão geral

Quatro workflows, cada um com um único trabalho

Nada de um workflow monolítico fazendo tudo. Cada um lê um gatilho, faz uma coisa, e passa adiante.

webhook, a cada mensagem

Captura

Recebe o evento da Evolution API, filtra pelo JID do grupo, descarta mensagem do próprio bot, e grava numa Data table nativa do n8n. Sem Postgres dedicado: decisão de simplicidade: é um MVP de um grupo só, não precisa da infraestrutura de um banco separado.

cron, seg-sex 22h

Resumo Diário

Lê a Data table do dia, calcula estatísticas (Top participantes, links únicos), manda pra IA resumir os tópicos, formata e publica de volta no grupo.

cron, domingo 9h

Resumo Semanal

Mesma lógica do diário, janela de segunda a domingo. Workflow irmão, não uma variação de código dentro do mesmo fluxo.

webhook, sob demanda

Pagamentos

Gera cobrança PIX na Woovi para os tiers pagos, e confirma pagamento consultando a Woovi antes de notificar. Nunca confia no payload que chega no webhook de confirmação.

Decisões técnicas

Três coisas que evitaram bug real, não hipotético

01

O bot filtra a própria mensagem, não por remetente

A instância do WhatsApp é a mesma que publica o resumo. Sem esse filtro, o resumo de ontem vira assunto do resumo de hoje, um loop de conteúdo se realimentando. O filtro compara o texto sem os asteriscos de negrito (que mudam com o formato da mensagem) contra os dois prefixos que o bot usa, não contra "quem mandou": alguém colando o mesmo cabeçalho por engano continua sendo capturado normalmente.

02

Webhook autenticado por path secreto, não por header

A Evolution API não permite configurar headers customizados nos webhooks que ela dispara. Sem alternativa de auth convencional, o path da URL do webhook é o segredo: um UUID, não adivinhável, trocado se algum dia vazar nos logs de algum proxy intermediário.

03

Dia sem mensagem ainda precisa postar algo

Sem alwaysOutputData no node de leitura, um dia sem nenhuma mensagem qualificada faz o workflow inteiro não rodar. Nem o aviso de "sem atividade hoje" sai. Isso exigiu ajustar o node de estatísticas junto: o item vazio que a flag produz não pode ser contado como um participante fantasma no Top.

Qualidade

Os Code nodes têm teste de verdade, fora do n8n

Cada Code node do fluxo de Captura e dos dois resumos roda isolado, com Node.js puro, num teste que lê o JSON do workflow e executa a função exatamente como o n8n executaria. Cobre o filtro de grupo, o descarte do próprio bot, timestamp malformado (que antes derrubava a execução inteira com RangeError), e a formatação final da mensagem.

Pacote grátis

O repositório é o mesmo código, sem os identificadores reais

Instale no seu próprio n8n, com sua chave de IA e seu provedor de WhatsApp. O pacote é gerado automaticamente a partir do que roda em produção. Não é mantido à mão, então não diverge do que está descrito aqui.

Ver o repositório no GitHub ↗