2016-06-27 21 views
0

Ich habe erfolgreich einen Facebook Messenger Bot erstellt. Ich habe Messaging Postback auch in meiner App implementiert und es scheint gut zu funktionieren in meinem Android-Gerät (Messenger V 68.0.0.22.67).Facebook Messenger Postback Dreimal aufgerufen

Aber wenn ich mit Samsung Galaxy S5 mit Messenger V 76.0.0.13.70 versuchen, werden alle Ereignisse postback dreimal aufgerufen. Ich habe sogar versucht mit einigen anderen Facebook Bots das Postback Event im selben Gerät zu testen und es ist dort auch die selbe Situation. Ich bekomme dreimal Antwort für jeden Postback.

Könnte es ein Problem mit der Messenger-Version sein? Ich konnte bisher kein Problemprotokoll finden.

Jede Hilfe würde sehr geschätzt werden.

+0

Facebook wird erneut versuchen, die Nachricht zu senden, wenn Ihr bot keine Antwort innerhalb eines Zeitrahmens zurückgibt. Haben Sie versucht, am Einstiegspunkt Ihrer Bewerbung mit 200 zu antworten und dann mit Ihrem Anwendungscode fortzufahren? – Datise

Antwort

1

Dies geschieht, wenn die von Facebook in den Headern zurückgesendete Signatur nicht mit der Signatur übereinstimmt, die Sie für die Nutzlast berechnen. Dies gibt 500 an Facebook zurück und Facebook versucht diese Anfrage zweimal (für insgesamt drei Anfragen).

PROBLEM

Das Problem ist, einige der Zeichen zu UNICODE codiert haben.

Zum Beispiel:

@ Charakter hat mit "\ u0040" ersetzt werden, bevor der Hash berechnet wird.

SOLUTION

Ich habe einfach diese im VerifySignature in Facebook Messenger Modul

let hash = crypto.createHmac('sha1',this.APP_SECRET).update(JSON.stringify(req.body).replace(/@/g,"\\u0040").replace(/\//g, '\\/')).digest('hex');

Dieser Artikel taucht tiefer in die Lösungen gemacht.

https://hackernoon.com/regenerating-a-raw-request-payload-an-impossible-task-e4133fb2571