2016-04-26 6 views
0

Die Facebook Messenger API ist insgesamt ziemlich süß. Wenn jedoch ein Benutzer einen Aufkleber (zum Beispiel den Ballon-Aufkleber) an meinen Bot sendet, bleibt er immer für etwa 20 Sekunden stehen. Wenn der Benutzer eine Menge Sticker verschickt, stürzt der Bot einfach ab und Facebook schickt mir den "Webhook failing" Entwickleralarm.Aufkleber und Gif verursachen Facebook Messenger Bot zum Einfrieren

Ich vermute, dass etwas mit meinem Code nicht stimmt, aber ich konnte keinen Fehler finden. Etwas Interessantes, das ich gefunden habe, ist, dass wenn der Bot abgestürzt ist und Facebook mir die Warnung "Webhook failing" geschickt hat, der Bot wiederbelebt wird und wieder auf Nachrichten reagiert, wenn ich meine App auf die Seite wiedergebe, indem ich folgendes in die Kommandozeile eingebe.

curl -X POST "https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=<PAGE_ACCESS_TOKEN>" 

Hier sind einige Informationen, die für Sie hilfreich sein können.

Repo: https://github.com/lorix-lpan/r-score-god

Server.js: https://github.com/lorix-lpan/r-score-god/blob/master/src/server.js

Facebook-Seite: https://www.facebook.com/rscoregod/

Hinweis: Der Bot für die Öffentlichkeit zur Zeit noch nicht verfügbar ist, Nachricht, um sie so kann ich Ihnen hinzufügen als Testbenutzer.

Vielen Dank!

Antwort

2

Schließlich habe ich das Problem selbst herausgefunden. Es ist in der Tat etwas falsch mit meinem Code (oder facebook's Start Code;)).

Von Messenger-Plattform Einstieg page

Die Post-Handler wie folgt

app.post('/webhook/', function (req, res) { 
    messaging_events = req.body.entry[0].messaging; 
    for (i = 0; i < messaging_events.length; i++) { 
    event = req.body.entry[0].messaging[i]; 
    sender = event.sender.id; 
    if (event.message && event.message.text) { 
     text = event.message.text; 
     sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 
    } 
    } 
    res.sendStatus(200); 
}); 

jedoch definiert ist, wenn ein Aufkleber oder GIF an den Server gesendet wird, wird die „Botschaft“ Feld der " event "Variable wird leer sein. Daher wird der Code innerhalb des folgenden Blocks nicht ausgewertet und es wird keine HTTP-Anfrage seit der sendTextMessage-Funktion POST an den Facebook-Server gestellt.

if (event.message && event.message.text) { 
    text = event.message.text; 
    sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 
} 

löste ich das Problem, indem einfach eine andere einfache if-Anweisung für Aufkleber und GIF Hinzufügen (oder andere Anhänge). Wenn ein Anhang vom Benutzer gesendet wird (entweder ein GIF oder ein Sticker), hat die Variable "event" die Eigenschaft "attachments". Mit anderen Worten, event.attachments wird definiert. Meine Lösung ist folgende:

app.post('/webhook/', function (req, res) { 
    messaging_events = req.body.entry[0].messaging; 
    for (i = 0; i < messaging_events.length; i++) { 
    event = req.body.entry[0].messaging[i]; 
    sender = event.sender.id; 
    if (event.attachments) { 
     sendTextMessage(sender, 'I am an attachment'); 
    } 
    if (event.message && event.message.text) { 
     text = event.message.text; 
     sendTextMessage(sender, "Text received, echo: "+ text.substring(0, 200)); 
    } 
    } 
    res.sendStatus(200); 
}); 

Schauen Sie sich diese commit für mehr Details

+0

Hallo auf diese Frage gestolpert als ich nach einer Lösung auf einem ähnlichen Problem in meinem Bot suchen. Macht es Ihnen etwas aus, sich mein hier veröffentlichtes Problem anzusehen und mich wissen zu lassen, was ich vermisse? https://stackoverflow.com/questions/48255932/res-send200-issue-on-facebook-messenger-bot/48255982#48255982 – SamT

Verwandte Themen