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”, 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.
O problema mais provável é que seu workflow só analisa o primeiro item do evento: entry[0].messaging[0]
Se a Meta enviar um payload com mais de uma entrada, ou o primeiro evento não for exatamente a mensagem que você espera, sua lógica IF vai perder.
Os webhooks do Messenger da Meta podem incluir diferentes tipos de eventos como: messages, postbacks,
Respostas rápidas e eventos de mensagem também podem conter anexos como imagem ou áudio em vez de texto simples.
Uma abordagem melhor é achatar o payload do webhook primeiro e depois processar cada evento de mensagem um por um. Em termos de n8n, isso geralmente significa usar um nó Code Doc. ou uma etapa de divisão para iterar sobre body.entry[].messaging[], em vez de hardcoding [0].
Isso é importante porque expressões como first() ou lógica “apenas o primeiro item” sempre se referem ao primeiro elemento, o que pode causar perda de eventos quando múltiplos itens estão presentes.
O corretivo prático é:
Não faça branches em entry[0].messaging[0] diretamente,
Faça um loop sobre todos os itens entry e messaging,
Seu webhook provavelmente está recebendo mensagens em lote ou o Facebook está enviando eventos duplicados, e seus IF nodes estão verificando apenas a primeira mensagem no array. Quando várias mensagens chegam no mesmo payload do webhook, você está processando apenas entry[0].messaging[0] e ignorando o resto.
Também verifique duas vezes sua inscrição no webhook do Facebook—certifique-se de que está inscrito nos eventos certos e que seu token não expirou. Às vezes, o Facebook para de enviar certos tipos de mensagem se as permissões mudarem.
@AbidulHaqueShohel — IF Node 2/3 use smart curly quotes (‘’) in || ‘’, not straight quotes. n8n’s expression parser silently returns undefined, so no-attachment messages hit neither branch. Retype with '. Also handle messaging[0].postback — quick replies/buttons land there, not .message.
Cleaner: drop the || and use one IF with optional chaining + OR:
{{ $json.body.entry[0].messaging[0].message.attachments?.[0]?.type }} equals "image" OR "audio"
Oi @AbidulHaqueShohel, você precisa usar redis para enfileirar cada mensagem. você deve ter 2 workflows
o 1º workflow para a fila e o 2º é para os workers.