2016-06-27 6 views
0

私は正常にFacebookのメッセンジャーボットを作成しました。私は私のアプリでもメッセージングのポストバックを実装して、それは私のアンドロイドデバイス(Messenger V 68.0.0.22.67)で正常に動作するようです。Facebookメッセンジャーポストバックは3回と呼ばれる

しかし、メッセンジャーV 76.0.0.13.70でSamsung Galaxy S5を試してみると、すべてのイベントpostbackが3回呼び出されます。私は同じデバイスでポストバックイベントをテストするために他の既存のfacebookボットを試してみました。すべてのポストバックに対して3回応答しています。

メッセンジャーバージョンで問題がありますか?これまでこれに関する問題ログは見つかりませんでした。

ご協力いただければ幸いです。

+0

あなたのボットは、時間枠内に応答を返さない場合はFacebookのメッセージの送信を再試行します。あなたのアプリケーションのエントリーポイントで200で応答してから、アプリケーションコードを進めてみましたか? – Datise

答えて

1

これは、ヘッダー内のFacebookによって送り返された署名が、ペイロード用に計算した署名と一致しない場合に発生します。これはFacebookに500を返し、Facebookはこのリクエストを2回再試行します(合計3回のリクエスト)。

PROBLEM

問題は、一部の文字がエンコードされたUNICODEに持っています。例えば

:文字@

は、ハッシュを計算する前に "\ u0040の" と交換しなければなりません。

SOLUTIONは

私は単にFacebookのメッセンジャーモジュール

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

この記事では、ソリューションをより深く掘り下げにverifySignatureでこれを行っています。

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

関連する問題