2016-04-26 23 views
11

facebook-messenger webhookをセットアップしました。昨日までは、メッセージを送受信することもできました。しかし、今日、私はユーザーから1つのメッセージを送信するとき、私はサーバーwebhook POST APIで複数の呼び出しを取得しています。彼らは決して止まらないようです。facebook-messenger webhookで繰り返し呼び出す

答えて

7

私はFacebookから来たすべてのコミュニケーションに応答を送っていました。だから私はACKメッセージにも応答してしまった。次にもう一つのACKが来た。なぜそれが無限ループにつながったのですか?

{ 
"object":"page", 
"entry":[ 
{ 
    "id":PAGE_ID, 
    "time":1457764198246, 
    "messaging":[ 
    { 
     "sender":{ 
     "id":USER_ID 
     }, 
     "recipient":{ 
     "id":PAGE_ID 
     }, 
     "timestamp":1457764197627, 
     "message":{ 
     "mid":"mid.1457764197618:41d102a3e1ae206a38", 
     "seq":73, 
     "text":"hello, world!" 
     } 
    } 
    ] 
} 
] 
} 

がメッセージ配信だから、コールバック

{ 
"object":"page", 
"entry":[ 
    { 
    "id":PAGE_ID, 
    "time":1458668856451, 
    "messaging":[ 
     { 
      "sender":{ 
       "id":USER_ID 
      }, 
      "recipient":{ 
       "id":PAGE_ID 
      }, 
      "delivery":{ 
       "mids":[ 
       "mid.1458668856218:ed81099e15d3f4f233" 
       ], 
       "watermark":1458668856253, 
       "seq":37 
      } 
     } 
    ] 
    } 
] 
} 

、差別化のために我々はentry[0].messaging[0].messageを参照することができ

テキスト:

thisページでは、受け取ったメッセージのために別のオブジェクト構造を見つけることができますこれはユーザーが送信したメッセージにのみ存在します。コールバックまたはポストバックにはこの部分が含まれていません。 応答する前にこれを確認してください。それが存在する場合は、それ以外の場合は応答しないでください。

+2

どのように避けていたのですか...私はどのように2つを区別できますか?あなたのリクエストのサンプルコードを共有できますか?ありがとう – ARK

11

これらの通話はすべて同じ内容であるか、それとも異なるのですか?あなたはfacebookがあなたに送る正確なメッセージ文字列を記録し、それらに何が含まれているか見ることができます。

たとえば、ユーザーがメッセージを受信したことを通知するメッセージ配信コールバックがあります。 JSONは次のようになります。

{'delivery': {'mids': ['mid.146174459xxx:30a42600a95exxxxx'], 'seq': 429, 'watermark': 146174459xxx}, 'recipient': {'id': xxxxxxxx}, 'sender': {'id': xxxxxx}} 

編集:また、あなたは、Facebookがあなたのウェブフックからのエラーを受信した場合ないがHTTPステータス200で着信を確認している場合かもしれないメッセージは次のようになります複数回送信されます。

+0

私はres.status(200)でループしているメッセージを確認しようとしましたが、入り続けます。メッセージが受信確認されているかどうかをテストする方法はありますか? – hoodsy

0

のFacebookのメッセンジャーで作業する場合、あなたがメッセージを送信した後、アカウントに二つのことを取る必要があります。

A)をMessage Delivery

B)Message Read

あなたはこの意志ウェブフックを使用して作業しているので、イベントの1つが発生するたびにトリガされます(メッセージを受信し、送信したメッセージを配信し、ユーザーがメッセージを読み込みます)。たとえば、Webフックでmessage_deliveriesをアクティブにして、メッセージをアクションとして送信すると、ループが終了します。

これを処理する適切な方法は、ベースコードにあります。 PHPの例:

 // Skipping delivery messages 
     if (!empty($message['delivery'])) { 
      #Do something here if you want 
      continue; 
     } 

     // Skipping read messages 
     if (!empty($message['read'])) { 
      #Do something here if you want 
      continue; 
     } 

希望すると助かります!

4

私の問題は似ていましたが、私は複数のメッセージ配信ポストを取得していました。数時間の不満の後、メッセージがすべてのデバイスに配信されるたびにMessage Delivered callbackが呼び出されることに気付きました。したがって、Webアプリとモバイルアプリの両方にログインしている場合は、コールバックが2回呼び出されます。

+0

これは私が3つの同一配送確認を得る理由です。本当にありがとう ! – sonlexqt

関連する問題