Como criar um workflow no n8n com loop e postagem automática no slack ou email.
A seguir, apresentamos um guia passo a passo para criar o fluxo de trabalho no n8n projetado para monitorar vários feeds RSS, filtrar novos artigos publicados na última hora, usar uma IA para verificar a relevância e, em seguida, postar um resumo a ser disparado em canal no Slack, por email etc.
Visão Geral do Fluxo de Trabalho
O fluxo de trabalho de exemplo opera da seguinte maneira:
Agendamento: É executado a cada hora para verificar novos conteúdos.
Fontes de notícias: Utiliza uma lista predefinida de URLs de feeds RSS focados no tema do seu projeto, exemplo: notícias de tecnologia.
Filtro de tempo: Filtra apenas os artigos publicados na última hora para evitar duplicatas e conteúdo antigo.
Processamento de IA: Cada artigo novo é enviado a um agente de IA (neste caso, um servidor local) para um resumo e para verificar se é relevante para o tema escolhido.
Publicação: Se a IA considerar o artigo relevante, ele será postado em um canal específico do Slack.
Passo a Passo da Configuração
1. Configurar o Gatilho de Agendamento
O primeiro passo é definir a frequência com que o fluxo de trabalho será executado.
Adicione um nó Schedule Trigger.
Configure-o para ser executado a cada 1 hora. Isso garantirá que você receba as notícias mais recentes.
2. Definir a Lista de Feeds RSS
O próximo passo é criar uma lista dos feeds RSS que você deseja monitorar.
Adicione um nó Set e nomeie-o como List of RSS Feeds.
No campo Assignments, defina uma variável chamada
urls
.O valor para
urls
deve ser um array JSON contendo as URLs dos feeds RSS. Insira a lista de urls no seguinte formato:
[["https://feeds2.feedburner.com/limontec","https://rss.tecmundo.com.br/feed"]]
3. Processar Feeds Individualmente
Para ler cada feed RSS da lista, é necessário dividir a lista em itens separados.
Conecte o nó List of RSS Feeds a um nó Split Out.
No nó Split Out, selecione o campo
urls
para dividir.Conecte o nó Split Out a um nó RSS Feed Read.
No nó RSS Feed Read, no campo URL, use a expressão
{{ $json.urls }}
para que ele leia a URL de cada item que passa pelo fluxo.
4. Filtrar Artigos Recentes
É importante garantir que você só processe artigos que são realmente novos.
Conecte o nó RSS Feed Read a um nó If e nomeie-o como If published in the last hour.
Configure as seguintes condições para filtrar por data:
Condição 1: Verifique se o campo string
isoDate
existe, use a expressão:{{ $json.isoDate }}
exist.Condição 2: Verifique se a data do artigo é posterior a 1 hora atrás. Use a expressão:
{{DateTime.fromISO($json.isoDate)}}
is after{{DateTime.now().minus({hour: 1})}}
Condição 3: Verifique se a data do artigo é anterior ou igual à data atual. Use a expressão:
{{DateTime.fromISO($json.isoDate)}}
is before or equal to{{DateTime.now()}}
A condição entre a condição 1 e demais deve ser AND.
5. Gerar o Prompt para a IA
Para que a IA possa processar o conteúdo, é necessário formatar os dados de entrada antes.
Conecte a saída
True
do nó If published in the last hour a um nó Code e nomeie-o como Generate prompt.Insira o código JavaScript fornecido no seu workflow para extrair e formatar o título, conteúdo e link do RSS em uma única string:
É importante salientar que estamos usando uma IA treinada exclusivamente para gerar resumos dado título, conteúdo e link. Portanto pode ser que você precise alterar o trecho acima para incluir o prompt para a IA entender o que deve ser feito com essa entrada. No nosso caso, a IA já tem o prompt embutido no modelo. Saiba mais sobre como rodar um modelo de IA localmente clicando aqui. É importante adicionar no prompt para que caso a notícia não seja relevante no contexto escolhido (exemplo, notícias sobre tecnologia), ela responda apenas: NÃO RELEVANTE[for (const item of $input.all()) {let title = item.json.title || "N/A";let content = item.json.content || "N/A";let link = item.json.link || "N/A";title = title.replace(/\n/g, "").replace(/"/g, "");content = content.replace(/\n/g, "").replace(/"/g, "");link = link.replace(/\n/g, "").replace(/"/g, "");item.json.rss_content = `Título: ${title} | Conteúdo: ${content} | Link: ${link}`;}return $input.all();]
6. Chamar o Agente de IA para Análise
Aqui você fará uma requisição para o seu servidor de IA local ou nuvem (API chatGPT por exemplo).
Conecte o nó Generate prompt a um nó Loop Over Items.
Conecte o nó Loop Over Items a um nó HTTP Request e nomeie-o como AI AGENT Summarized. Note que você pode modificar esse loop para usar um nó mais adequado ao seu contexto.
Configure o nó HTTP Request:
Method:
POST
.URL:
http://172.16.0.2:8080/api/chat/completions
(ou o endereço do seu servidor de IA).Authentication: Use as credenciais
httpBearerAuth
para se autenticar.Body: Selecione
JSON
e cole o corpo JSON fornecido, usando a expressão{{ $json.rss_content }}
para enviar o conteúdo do artigo à IA:
[{"model": "llama-rss","messages": [{"role": "user","content": "{{ $json.rss_content }}"}]}]
7. Filtrar Respostas da IA e Postar no Slack
O fluxo final verificará se a resposta da IA é relevante antes de postar no Slack.
Conecte o nó AI AGENT Summarized a um nó If e nomeie-o como If cybersecurity related.
Neste nó, configure uma condição para verificar se o resumo da IA não contém a string
"NÃO RELEVANTE"
. Use a expressão{{ $json.choices[0].message.content }}
. Pois assim garantimos que enviaremos apenas resumos gerados para a IA que seja relevante ao contexto escolhido, por exemplo notícias de tecnologia apenas.Conecte a saída
True
do nó If tech related a um nó Wait.No nó Wait, defina um tempo de espera para evitar problemas com limites de taxa do Slack. A espera de 30 segundos é uma boa prática.
Conecte o nó Wait a um nó Slack e nomeie-o como Post the news.
Configure o nó Slack com suas credenciais do Slack.
No campo Channel ID, selecione o canal para onde você quer postar (por exemplo,
#rss-news
).No campo Text, use a expressão
{{ $json.choices[0].message.content }}
para postar o resumo fornecido pela IA.