Mein Facebook-KI-Agent verpasst einige Nachrichten. Bei bestimmten Nachrichten antwortet die KI nicht, aber wenn derselbe Benutzer später eine weitere Nachricht sendet, antwortet die KI.
In meinem aktuellen Flow:
Nach dem Webhook habe ich IF Node 1:
{{ !!$json.body.entry[0].messaging[0].message && !$json.body.entry[0].messaging[0].message?.is_echo }}
Wenn dies wahr ist, geht es zu IF Node 2.
In IF Node 2 überprüfe ich:
{{ $json.body.entry[0].messaging[0].message.attachments?.[0]?.type || ‘’ }}
Wenn es gleich “image” oder “audio” ist, geht es zu AI Agent 2 für eine Antwort.
Wenn falsch, geht es zu IF Node 3.
In IF Node 3 überprüfe ich:
{{ ($json.body.entry[0].messaging[0].message.text || ‘’)
.toLowerCase()
.match(/image|pic|chobi|ছবি/) ? true : false }}
Wenn wahr, geht es zu AI Agent 2.
Wenn falsch, geht es zu AI Agent 3.
Das wahrscheinlichste Problem ist dein Workflow berücksichtigt nur das erste Event-Element: entry[0].messaging[0]
Wenn Meta eine Payload mit mehr als einem Entry sendet, oder das erste Event nicht die genaue Nachricht ist, die du erwartest, wird deine IF-Logik es übersehen.
Meta’s Messenger Webhooks können verschiedene Event-Typen enthalten, wie: messages, postbacks,
Schnellantworten und Message-Events können auch Anhänge wie Bilder oder Audio statt einfachem Text enthalten.
Ein besserer Ansatz ist, die Webhook-Payload zuerst zu flachen und dann jedes Messaging-Event einzeln zu verarbeiten. In n8n-Begriffen bedeutet das normalerweise, einen Code-Node zu verwenden Doc. oder einen Split-Schritt, um body.entry[].messaging[] zu durchlaufen, anstatt [0] hart zu codieren.
Das ist wichtig, weil Ausdrücke wie first() oder “nur erstes Element”-Logik sich immer auf das erste Element beziehen, was zu übersehenen Events führen kann, wenn mehrere Elemente vorhanden sind.
Ihr Webhook empfängt wahrscheinlich stapelweise Nachrichten oder Facebook sendet doppelte Ereignisse, und Ihre IF-Knoten überprüfen nur die erste Nachricht im Array. Wenn mehrere Nachrichten in derselben Webhook-Nutzlast ankommen, verarbeiten Sie nur entry[0].messaging[0] und ignorieren den Rest.
Überprüfen Sie auch Ihre Webhook-Abonnement bei Facebook – stellen Sie sicher, dass Sie die richtigen Ereignisse abonniert haben und dass Ihr Token nicht abgelaufen ist. Manchmal stoppt Facebook das Senden bestimmter Nachrichtentypen, wenn die Berechtigungen veralten.
@AbidulHaqueShohel — IF Node 2/3 verwenden intelligente Anführungszeichen (‘’) in || ‘’, nicht gerade Anführungszeichen. n8ns Expression Parser gibt stillschweigend undefined zurück, daher treffen Nachrichten ohne Anhang keinen Branch. Mit ’ umschreiben. Behandeln Sie auch messaging[0].postback — Quick Replies/Buttons landen dort, nicht bei .message.
Sauberer: Lassen Sie || weg und verwenden Sie ein IF mit optional chaining + OR:
{{ $json.body.entry[0].messaging[0].message.attachments?.[0]?.type }} equals "image" OR "audio"
Hi @AbidulHaqueShohel, du musst Redis verwenden, um jede Nachricht in eine Warteschlange einzureihen. Du musst 2 Workflows haben
der 1. Workflow für die Warteschlange und der 2. ist für die Worker.