Descreva o problema/erro/pergunta
Depois de publicar meu workflow do n8n, quando um usuário envia uma mensagem, cria um loop duplicado, fazendo com que a IA envie mensagens continuamente de forma repetida.
O que quero conseguir:
Preciso aplicar 3 tipos de filtragem:
Se o usuário solicitar uma imagem, o AI Agent 1 deve enviar uma única resposta com a imagem.
Se a mensagem contiver palavras-chave específicas (como “pic” ou similar), o AI Agent 1 deve lidar com isso e responder uma vez.
Se nenhuma das condições acima for atendida, então o AI Agent 3 deve lidar com a resposta.
Compartilhe seu workflow
Compartilhe a saída retornada pelo último nó
Informações sobre sua configuração do n8n
- Versão do n8n:
- Banco de dados (padrão: SQLite):
- Configuração n8n EXECUTIONS_PROCESS (padrão: own, main):
- Executando n8n via (Docker, npm, n8n cloud, desktop app): n8n cloud
- Sistema operacional:
2 curtidas
Oi @Abidul_Haque_Shohel, Bem-vindo!
O loop duplicado acontece porque seu agente de IA envia uma resposta via “Enviar mensagem de texto”, o que dispara o mesmo webhook novamente, criando um ciclo infinito. Seu filtro is_echo está no caminho certo, mas tem um problema.
A solução:
-
Sua verificação is_echo está comparando com uma string "true" em vez de um booleano. Em seu nó If, você tem is_echo is not equal to true, mas true está no campo de expressão (fx), o que significa que está sendo tratado como uma string. Facebook Messenger envia is_echo como um booleano true, não a string "true". Mude essa condição para usar a comparação booleana, ou melhor ainda, inverta a lógica: verifique se is_echo não existe em vez de verificar seu valor.
-
Adicione uma verificação de remetente como uma rede de segurança. Mesmo com is_echo, adicione uma condição que compara o ID do remetente com o ID da sua página. Algo como: {{ $json.body.entry[0].messaging[0].sender.id }} não é igual a YOUR_PAGE_ID. Isso garante que o bot nunca processe suas próprias mensagens.
-
Sua lógica de roteamento pode ser simplificada. No momento, você tem If → If1 → If2 em cascata para três agentes de IA separados com memória e modelos separados. Em vez disso, use um único nó Switch com três saídas: uma para anexos de imagem, uma para palavras-chave relacionadas a imagens e uma padrão para tudo o mais. Isso evita a cadeia aninhada de If e torna o fluxo mais limpo.
-
Certifique-se de que “Respond to Webhook” dispara imediatamente. Parece que faz isso pela sua captura de tela, mas confirme que retorna 200 para o Facebook antes de qualquer processamento de IA começar. Facebook tentará novamente o webhook se não receber um 200 em 5 segundos, o que também causa duplicatas.
Me avise se isso funciona 
3 curtidas
@houda_ben
O problema do loop foi resolvido, mas ainda há um problema com o tratamento de imagens.
Quando um usuário envia uma imagem, ela vai para o primeiro nó IF e retorna imediatamente false. Por causa disso, nunca chega adequadamente ou dispara o segundo nó IF.
Porém, o comportamento esperado é:
Se uma imagem for detectada no segundo nó IF, ela deve disparar a resposta do agente de IA específico atribuído para lidar com solicitações relacionadas a imagens.
1 curtida
O problema está na lógica do primeiro nó IF. Olhando para seus screenshots:
Seu primeiro IF verifica: message.text existe. Quando um usuário envia uma imagem, o Facebook Messenger envia um array attachments mas nenhum campo message.text. Então o primeiro IF corretamente diz “texto não existe” e roteia para false. A mensagem de imagem nunca passa por esse filtro.
A solução: mude a condição do primeiro nó IF de AND para OR:
Desta forma, tanto mensagens de texto quanto mensagens de imagem passam pela lógica de roteamento abaixo.
Então seu nó IF1 (verificando attachments[0].type é igual a “image”) realmente receberá as mensagens de imagem e as roteiará para o agente de IA correto.
3 curtidas
@houda_ben resolvido. Obrigado
1 curtida
@houda_ben
Meu agente de IA do Facebook está perdendo algumas mensagens. Para certas mensagens, a IA não responde, mas quando o mesmo usuário envia outra mensagem depois, a IA responde.
No meu fluxo atual:
-
Após o Webhook, tenho IF Node 1:
{{ !!$json.body.entry[0].messaging[0].message && !$json.body.entry[0].messaging[0].message?.is_echo }}
Se isso for verdadeiro, vai para IF Node 2.
-
Em IF Node 2, verifico:
{{ $json.body.entry[0].messaging[0].message.attachments?.[0]?.type || '' }}
Se for igual a "image" ou "audio", então vai para AI Agent 2 para uma resposta.
Se falso, vai para IF Node 3.
-
Em IF Node 3, verifico:
{{ ($json.body.entry[0].messaging[0].message.text || '')
.toLowerCase()
.match(/image|pic|chobi|ছবি/) ? true : false }}
Se verdadeiro, vai para AI Agent 2.
Se falso, vai para AI Agent 3.
@Abidul_Haque_Shohel
O Facebook pode agrupar vários eventos em uma única entrega de webhook. Suas expressões todas fazem referência a entry[0].messaging[0], o que significa que você está processando apenas o primeiro evento em cada lote. Se o Facebook enviar duas mensagens em uma chamada de webhook, a segunda é descartada silenciosamente.
Para corrigir isso, adicione um nó Split Out logo após o nó Webhook, defina o campo como body.entry. Em seguida, adicione outro Split Out no array de messaging. Dessa forma, cada mensagem individual se torna seu próprio item e flui através de sua cadeia IF independentemente, então nada será descartado.
Me avise se funcionar!!