Alguém pode me ajudar a construir meu agente de IA

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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 :crossed_fingers:

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:

  • message.text existe OR message.attachments existe

  • AND is_echo é diferente de true

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!!