Aula/workshop (e23) sobre automação completa de e-mails com IA —…
INEMA
WhatsApp.
- Truncation de texto
- Exemplo: keep head 800 + tail 400.
- Pergunta: isso perde contexto? Resposta: perde algum contexto, mas aumenta chance de resposta útil com menos tokens.
- Treinamento contínuo
- Exemplo: confidence<0.7 -> enviar para Google Sheet "revisar".
- Pergunta: como usar esses dados depois? Resposta: montar few-shot ou dataset para fine-tune / prompt improvements.
- Logs e alertas
- Exemplo: cada execução grava {runId, count, errors} no DB; se errors>5 em 1h -> Slack alert.
- Pergunta: que métricas acompanhar? Resposta: %processed, avg time, errors/min, %auto-labeled.
- Credenciais e rotação
- Exemplo: use n8n Credentials; rota tokens via script.
- Pergunta: como automatizar rotação? Resposta: cron job que chama provider API para renovar e atualiza credential via API do n8n.
- IMAP corporativo
- Exemplo: IMAP node -> Get headers + body; para labels use mover para pasta equivalente.
- Pergunta: IMAP funciona igual ao Gmail? Resposta: sim, mas sem labels nativas — use pastas.
- Evolution API + fallback
- Exemplo: tentar Evolution -> se status !=200 -> enviar por SMTP.
- Pergunta: posso usar Twilio? Resposta: sim, Twilio é fallback robusto.
- Webhooks em tempo real
- Exemplo: configurar Gmail Pub/Sub -> webhook n8n -> process immediate.
- Pergunta: é complexo? Resposta: demanda mais infra (Pub/Sub) mas reduz latência.
tem em Google Sheet / DB para revisão humana; depois reusar exemplos para few-shot no prompt. * workflow: se confidence < 0.7 -> send to Slack/Sheet for review.
- log centralizado + alertas por falha crítica
- por quê: visibilidade e SLA.
- como: gravar cada execução num DB (timestamp, itens, erros); usar node HTTP para enviar alertas ao Telegram/Slack se falhas > X em Y minutos.
- usar n8n Credentials seguras e rotação de chaves
- por quê: segurança (tokens de Gmail, Evolution API, Google).
- como: configure Credentials no n8n, nunca hardcode. Crie política de rotação mensal.
- otimizar chamadas ao Gmail: usar “batch get” quando suportado
- por quê: reduzir latência e número de requests.
- como: use Gmail node com “Get all messages” e depois “Get message” em lote com SplitInBatches.
- integração Evolution API (WhatsApp) com fallback SMS/email
- por quê: garantir que o resumo chegue.
- como: se HTTP Request ao Evolution falhar → enviar por SMTP node (email) ou pela API do Twilio.
- lógica: try evolution -> if fail -> send email.
- parsing de HTML robusto (lib de texto)
- por quê: corpo em HTML pode ter ruído.
- como: usar node Function com simples regex + DOM parsing (cheerio) se disponível; no n8n, usar function + string replacements para remover tags.
- exemplo simples:
const text = html.replace(/<[^>]*>/g,' ').replace(/\s+/g,' ').trim();
- teste A/B do classificador com 2 prompts
- por quê: avaliar qual prompt gera melhor acurácia.
- como: duplicar fluxo, rotular resultados por promptA/promptB e comparar confiança/erro em DB.
- salvar versão das regras de etiquetas e changelog
- por quê: entender mudanças no comportamento.
- como: ao atualizar lista de categorias, gravar versão em DB e timestamp; manter histórico para rollback.
- métricas: taxa de acerto, % de emails marcados como lidos, tempo médio de processamento
- por quê: medir eficácia e justificar ROI.
- como: no final do processo, calcular e gravar métricas em DB; gerar dashboard (Grafana/Google Sheets).
- usar Webhooks para triagem em tempo real
- por quê: reduzir latência se houver e-mails críticos.
- como: configurar Gmail push notifications (Pub/Sub) → webhook n8n → processar instantaneamente; usar webhook apenas para categorias críticas (Códigos de segurança).
Lista dos tópicos com exemplos e respostas rápidas (seguindo seu pedido de listar tópicos + exemplos + respostas)
- Batching
- Exemplo: SplitInBatches com batchSize 5 → HTTP Request Gemini → Wait 800ms.
- Pergunta: Qual batchSize usar? Resposta: comece em 5 e ajuste conforme limites da API; para limite 600/min use batchSize 10 + 1s sleep.
- Deduplicação
- Exemplo: DB table processed_messages(id, timestamp). Antes de processar, query by messageId.
- Pergunta: O que fazer se o ID mudar? Resposta: use combinação messageId + subject + timestamp para heurística.
- Fallback de snippet
- Exemplo: expression body = {{\$json.textPlain \$json.snippet convertHTML(\$json.bodyHtml)}}
- Pergunta: snippet é suficiente? Resposta: para classificação simples sim; para resumo prefira corpo completo.
- Prompt JSON estrito
- Exemplo de retorno: {"category":"Consultorias","confidence":0.92}
- Pergunta: E se o modelo não retorna JSON? Resposta: re-try com instrução mais forte; se persistir, marque para revisão humana.
- Continue on fail
- Exemplo: node HTTP Request -> continue on fail true -> next node saves error and re-iterates.
- Pergunta: isso esconde erros? Resposta: não, grave logs; use alertas para erros repetidos.
- Retries exponenciais
- Exemplo: tentar 1s, 3s, 10s; usar contador em Function node.
- Pergunta: quantas tentativas? Resposta: 3 é suficiente na maioria dos casos.
- Rate-limit control
- Exemplo: Wait entre batches ou token-bucket em DB.
- Pergunta: como saber limite? Resposta: veja docs da API + experimente; 429 indica ajuste necessário.
- Aggregate antes do resumo
- Exemplo: Aggregate fields subject/from/snippet; enviar 5 itens por categoria ao LLM.
- Pergunta: quantos itens listar? Resposta: 3 a 5 por categoria para
Hacks práticos de n8n (cada item com explicação, configuração e exemplo)
- executar em lotes (batching) para controlar custo e performance
- por quê: evita chamadas massivas à IA e previne timeouts/ratelimits.
- como: use o node SplitInBatches antes de chamar o modelo; batchSize = 5–10.
- exemplo: SplitInBatches -> HTTP Request (Gemini) -> Wait (1s) -> Continue.
- dica: ajuste batchSize conforme limites da API (se 60 req/min, batchSize menor + delay).
- deduplicação por messageId antes do processamento
- por quê: evita processar o mesmo e-mail várias vezes (re-runs, duplicatas).
- como: usar um node Set/Function para gerar chave = messageId e um node Database (SQLite/Postgres) ou Google Sheets para checar existência.
- exemplo de Function (JS):
const id = items[0].json.messageId;
return [{ json: { id } }];
* fluxo: if exists -> skip, else -> process + save id em DB.
- fallback seguro: usar snippet se o corpo completo não estiver disponível
- por quê: alguns providers devolvem só HTML ou vazio.
- como: no mapping, faça: body = \$json["textPlain"] ?? \$json["snippet"] ?? convertHTML(\$json["bodyHtml"])
- exemplo de expressão n8n:
{{$json["textPlain"] || $json["snippet"] || $json["bodyPlainText"]}}
- prompt robusto para classificador com exemplos e formato JSON estrito
- por quê: modelos retornam texto livre, padronizar evita parsing.
- prompt modelo (colar no HTTP Request):
``` Você é um classificador de e-mail. Dê 1 única categoria entre: Consultorias, Conteúdo criativo, Faturas, Pessoal, Suporte, Promoções, Notificações sociais, Códigos de segurança, Newsletters, Reservas, Atualizações, Spam.
Retorne apenas JSON estrito:
{"category":"
```* dica: inclua 3–5 exemplos reais por categoria para maior precisão.
- tratar erros sem parar o fluxo: continueOnFail + manejos de saída
- por quê: uma falha na API não deve quebrar todo o loop.
- como: em nós críticos, ative "Continue on Fail" e conecte saída de erro a um nó Log ou re-iterator.
- exemplo: no node HTTP Request -> On Error: Continue; output para node Function que anota o erro e retorna para o SplitInBatches.
- retries exponenciais para chamadas de rede
- por quê: falhas transitórias (rate-limit) se recuperam com retry.
- como: usar node Wait + contador no node Function; ou usar node HTTP Request com Retry configurado (se disponível).
- estratégia: retry 1s → 3s → 10s; 3 tentativas.
- controle de rate-limit com token bucket simples
- por quê: evitar 429 e bloqueios.
- como: manter contador em DB ou use node Cron + Wait entre lotes; ou usar um node que calcule sleep = Math.max(0, neededDelay).
- exemplo: após cada batch, Wait 1000 ms se você está teclando perto do limite.
- usar aggregate + transform antes da IA do resumo
- por quê: reduzir número de tokens e tornar o resumo previsível.
- como: Aggregate (modo merge) pegando somente subject, from e snippet; depois montar um texto curto.
-
exemplo de texto enviado ao modelo:
```Categoria: Consultorias 1) Assunto — Remetente — Snippet curto ...
```9. limitar o comprimento do texto enviado ao LLM (truncation com regras)
- por quê: economia de tokens e evitar resposta truncada.
- como: em Function, corte body a 800–1200 chars, mantendo início + fim (head+tail) para preservar contexto.
-
snippet JS:
c```onst s = text; if(s.length>1200) text = s.slice(0,800) + "\n...\n" + s.slice(-400);
1```0. usar schemas JSON + Parse JSON para garantir segurança
- por quê: evita dependência de string-scrape.
- como: no response do modelo, forçar que retorne JSON; em seguida JSON Parse node para extrair category/confidence.
- exemplo: prompt pede explicitamente "retorne apenas JSON".
- modo “treinamento contínuo”: salvar exemplos rotulados manualmente para re-treino ou few-shot
- por quê: melhorar precisão ao longo do tempo.
- como: quando confidence < 0.7, criar item em
consultas.
-
Array aggregator ou Merge Una todos os resultados em um único array.
-
Text aggregator ou Mapper Monte uma lista com campos essenciais por item:
- categoria
- subject
- from
- snippet ou primeiro parágrafo do corpo
- Google AI > Gemini 2.0 Flash Prompt sugerido:
Você recebe e-mails agrupados por categoria. Gere um resumo para WhatsApp:
- Agrupe por categoria
- Cada categoria inicia com *Título* usando asteriscos
- Liste 1–3 itens por categoria no formato: • Assunto — Remetente
- Se não houver itens, escreva: "Hoje não há e-mails importantes."
Responda somente com o texto do WhatsApp.
-
Evolution API > Enviar mensagem Envie o texto gerado ao número desejado. Inclua a data no cabeçalho da mensagem se quiser: Exemplo de cabeçalho: Resumo de e-mails importantes — 02/06
-
Fallback de vazio Se o Merge retornar zero itens, pule a IA e envie direto a mensagem padrão.
n8n⌗
Nós equivalentes:
- Cron
- Gmail: Search por label
- Merge node (modo concat)
- Function ou Item Lists para preparar campos
- HTTP Request para Gemini 2.0 Flash
- HTTP Request para Evolution API
Checklist de testes⌗
- Criou todas as etiquetas no Gmail
- Classificação está coerente em 20 e-mails de amostra
- Promoções e notificações sociais estão sendo marcadas como lidas
- Spam está indo para lixeira se habilitado
- Resumo chega no WhatsApp todos os dias no horário configurado
- Mensagem de “sem e-mails importantes” aparece quando aplicável
Solução de problemas⌗
- IA erra a categoria: refine as descrições das categorias no prompt e inclua 2–3 exemplos reais por categoria
- Mensagens sem corpo: use snippet ou converta HTML para texto antes de enviar ao modelo
- Limites de API: adicione retry com backoff e mantenha continue on error
- Duplicatas no resumo: use deduplicação por messageId antes do Merge
- IMAP com anexos pesados: baixe somente cabeçalho e corpo em texto
Perguntas rápidas com exemplos⌗
-
Quantas horas devo buscar, 24 ou 72 Resposta: comece com 24h para rodar diariamente. Use 72h nos primeiros testes para ter volume.
-
Posso classificar e manter não lidos Resposta: sim. Apenas não conecte o nó de Mark as Read para as categorias que quer manter em destaque.
-
Quero apagar spam automaticamente Resposta: crie rota “Spam” direto para Delete message. Teste por 3 dias antes de ativar definitivo.
-
E se eu não usar Gmail Resposta: use IMAP para buscar mensagens e mova para pastas equivalentes às etiquetas. O classificador e o resumo não mudam.
-
Custo da IA Resposta: Gemini 2.0 Flash costuma ser gratuito para este volume; se migrar para outro modelo, ative limites de tokens e lotes menores.
-
Como definir minhas categorias Resposta: exporte 50–100 e-mails, peça ao ChatGPT um agrupamento por tema com nomes e descrições e use isso no prompt do classificador.
-
O que enviar no WhatsApp Resposta: apenas assunto e remetente por item, agrupado por categoria. Evite colar corpo completo por privacidade.
-
Como evitar que o fluxo pare Resposta: em cada módulo habilite continuar em caso de erro e reconecte saída de erro ao loop; adicione retries nos nós de rede.
Passo a passo para organizar e resumir e-mails com IA (Make e n8n)⌗
Visão geral⌗
Você terá dois fluxos:
- Classificação automática de e-mails por etiquetas
- Resumo diário no WhatsApp apenas do que é importante
Funciona com Gmail ou IMAP corporativo. A IA sugerida é Gemini 2.0 Flash pelo bom custo e velocidade. O envio ao WhatsApp pode ser feito via Evolution API.
Pré-requisitos⌗
- Conta Gmail com acesso via Make ou n8n
- Alternativa corporativa: credenciais IMAP válidas
- Chave de API do Google AI Studio para Gemini 2.0 Flash
- Instância da Evolution API conectada ao seu WhatsApp Business
-
Lista de etiquetas no Gmail criadas previamente, por exemplo:
-
Consultorias, Conteúdo criativo, Faturas, Pessoal, Suporte e consultas
- Promoções, Notificações sociais, Códigos de segurança, Newsletters, Reservas e viagens, Atualizações de serviços, Spam
Dica rápido: se não souber quais categorias usar, exporte 50–100 e-mails e peça ao ChatGPT para sugerir agrupamentos e descrições.
Fluxo A — Classificação automática⌗
Make⌗
-
Agendador Frequência a seu gosto. Para começar, manual.
-
Gmail > Search messages Parâmetros:
- Query: todos lidos e não lidos
- Data inicial: now minus 72h (ou 24h) em formato ISO
- Return all: yes
-
Tools > Iterator Itera cada mensagem retornada.
-
Gmail > Get a message Pegue assunto, remetente e corpo em texto.
-
Google AI (ou HTTP) > Chamada ao Gemini 2.0 Flash Envie um JSON com:
- subject: assunto
- text: corpo em texto
- categories: lista com nome e descrição de cada etiqueta Prompt sugerido:
Você é um classificador de e-mails. Retorne apenas JSON:
{ "category": "<nome-da-categoria>", "confidence": 0-1 }
Categorias possíveis:
- Códigos de segurança: logins, 2FA, verificação
- Notificações sociais: redes sociais, seguidores, curtidas
- Promoções: ofertas, marketing, cupons
- Newsletters: comunicados recorrentes e conteúdos editoriais
- Reservas e viagens: passagens, hospedagem, confirmações
- Atualizações de serviços: status de produtos e assinaturas
- Faturas: boletos, recibos, pagamentos
- Consultorias: propostas, reuniões, alinhamentos com clientes
- Conteúdo criativo: roteiros, materiais, entregas criativas
- Pessoal: família, amigos, assuntos pessoais
- Suporte e consultas: dúvidas de clientes, tickets
Se não houver correspondência clara, use "Spam" ou "Outro".
-
Tools > Parse JSON Extraia category e confidence.
-
Roteamento por categoria Para cada categoria:
- Gmail > Add label to messages (use o messageId do item)
- Para Promoções, Notificações sociais, Códigos de segurança, Reservas e viagens, Newsletters, Atualizações de serviços e Spam: Gmail > Mark message as read Opcional para Spam: Gmail > Delete message
-
Tratamento de erros Em cada módulo, nas configurações de erro, selecione continue using error output e reconecte a saída de erro de volta ao Iterator, para o fluxo nunca parar por falhas temporárias da API.
-
Teste Rode o cenário com 10–20 e-mails recentes e confira no Gmail se as etiquetas e leituras foram aplicadas corretamente.
n8n⌗
Nós equivalentes:
- Cron ou Webhook
- Gmail: Search > Read
- Split in Batches ou Item Lists
- HTTP Request para Gemini 2.0 Flash
- JSON Parse
- Switch para categorias
- Gmail: Add Label / Mark as Read / Delete
- Error workflow: Ativar continue on fail nos nós críticos e reconectar ao loop
IMAP corporativo⌗
- Make: use o módulo IMAP da comunidade para listar mensagens e pegar cabeçalho e corpo
- n8n: IMAP Email node
- O restante do fluxo (classificar, etiquetar, marcar como lido) segue igual; para etiquetar, use regras da sua plataforma de e-mail corporativo ou mova para pastas correspondentes às “etiquetas”
Fluxo B — Resumo diário no WhatsApp⌗
Make⌗
-
Agendador diário Horário sugerido: 21:00.
-
Para cada categoria importante Gmail > Search messages por label correspondente. Exemplo: Consultorias, Conteúdo criativo, Faturas, Pessoal, Suporte e
Resumo :
Uma automação para organizar e-mails e receber um resumo no WhatsApp. Ele divide em duas partes principais:
1. Classificação automática de e-mails⌗
- Os e-mails das últimas 24 ou 72 horas são filtrados.
- Cada e-mail passa por um loop e é classificado por IA (Gemini 2.0 Flash).
- São criadas categorias (ex.: promoções, notificações, viagens, faturas, newsletters).
- ChatGPT pode ser usado para sugerir categorias a partir de exemplos de e-mails reais.
- Após a classificação, os e-mails recebem etiquetas e os menos importantes são marcados como lidos (ou até excluídos, no caso de spam/promoções).
- O fluxo é configurado para continuar mesmo em caso de erro (continue using error output).
2. Resumo diário no WhatsApp⌗
- Trigger diário às 21h.
- Recupera e-mails das categorias mais importantes (consultorias, conteúdo criativo, faturas, pessoal, suporte).
- Faz merge e agrega os dados principais (assunto, corpo do e-mail, remetente).
- Usa Gemini 2.0 Flash para gerar um resumo organizado por categorias, com negrito (asteriscos) para leitura no WhatsApp.
- Se não houver e-mails, envia mensagem “Hoje não há e-mails importantes”.
- O envio é feito pelo Evolution API (WhatsApp Business).
Benefícios⌗
- Caixa de entrada limpa automaticamente.
- Organização sem esforço manual.
- Notificação apenas do que é realmente importante.
- Economia de tempo e foco no essencial.
e23. Seu E-mail, Limpo e Organizado Automaticamente
Aprendemos a automatizar completamente a organização do nosso e-mail e a receber um resumo diário no WhatsApp apenas com os e-mails mais importantes.
🔧 Automação 1 – Classificação Automática de E-mails Objetivo: Etiquetar automaticamente os e-mails de acordo com o conteúdo para manter a caixa de entrada limpa e organizada.
🛠️ Passos do fluxo:
- Filtramos e-mails recebidos nas últimas 72 horas (ajustável para 24h).
- Loop sobre cada e-mail recebido para processá-los um por um.
- Uso de IA (Gemini 2.0 Flash) como classificador de texto para categorizar e-mails segundo: • Assunto (subject) • Corpo (text)
- Criamos etiquetas personalizadas (notificações, promoções, viagens, faturas, etc.).
- Sugestão: Usar o ChatGPT para definir categorias com seus próprios e-mails.
- Adicionamos etiquetas a cada e-mail conforme sua classificação.
- Marcamos como lidos os menos importantes (ofertas, notificações sociais, etc.).
- Tratamento de erros: usamos continue using error output para evitar que o fluxo pare caso algo falhe.
- Opcional: podemos excluir diretamente e-mails classificados como spam ou promoções em vez de apenas marcá-los como lidos.
💬 Automação 2 – Resumo Diário pelo WhatsApp Objetivo: Enviar um resumo pelo WhatsApp apenas com os e-mails importantes.
📦 Categorias importantes selecionadas:
- Consultorias
- Conteúdo criativo
- Faturas
- Pessoal
- Suporte e consultas
🔄 Fluxo:
- Disparo diário às 21h.
- Recuperamos os e-mails de cada categoria importante.
- Unificamos (Merge) todos os e-mails em um único array.
- Adicionamos os dados principais: assunto, texto e endereço de e-mail.
- Chamamos o Gemini 2.0 Flash com um prompt projetado para gerar um resumo limpo para WhatsApp: • O resumo é agrupado por categorias. • Usa negritos (com asteriscos) para facilitar a leitura. • Adiciona a mensagem "Hoje não há e-mails importantes" se não houver dados.
- Enviamos o resumo por WhatsApp usando a Evolution API.
- A mensagem inclui a data e o conteúdo agrupado.
Recursos
- Classificador de e-mails
- Resumidor de e-mails por WA
- Resumidor de e-mails corporativos
- Classificador de e-mails corporativos
Seu E-mail, Limpo e Organizado Automaticamente
Quero compartilhar uma automação que mudou minha vida: ter o e-mail perfeitamente organizado de forma automática e receber um resumo no WhatsApp apenas com o que realmente importa. 📬➡️📲 Vimos isso em um workshop de automação, mas senti a obrigação de melhorá-la e compartilhar 😊
O que faz essa automação?
- ✅ Classifica automaticamente nossos e-mails por categorias personalizadas
- ✅ Marca como lidos ou exclui os que não interessam
- ✅ Mantém os importantes em destaque
- ✅ Envia um resumo diário no WhatsApp com os e-mails mais relevantes
Além disso, criei mais duas automações: 👉 Para e-mails corporativos (quando não uso Gmail), estou utilizando um módulo IMAP que baixei dos nodes da comunidade. Com esse módulo podemos praticamente replicar o mesmo fluxo em contas de e-mail empresariais.
👉 Também deixo o link para o node IMAP que você pode instalar: NODE IMAP
Se vocês acharem necessário e útil, posso gravar um pequeno vídeo explicando como montar tudo isso no Make e adiciono aqui mesmo. Basta pedir nos comentários. 👇
Espero que seja tão útil para vocês quanto está sendo para mim. Ter a caixa de entrada limpa, organizada e saber todos os dias o que é importante sem precisar abrir o e-mail é realmente um divisor de águas! 🚀
https://www.npmjs.com/package/n8n-nodes-imap
e23 - Organize seu Email
1