在facebook-messenger webhook上重复调用

n.a*_*001 13 facebook facebook-messenger

我已成功设置了facebook-messenger webhook.直到昨天我也能够发送和接收消息.但今天,当我从用户发送一条消息时,我在服务器webhook POST API上收到多个调用.他们似乎永远不会停止.

Jue*_*gen 14

所有这些电话是否具有相同的内容,或者它们是否有所不同?您可以记录facebook发送给您的确切消息字符串,并查看它们包含的内容.

例如,有一个消息传递回调,通知您用户收到了消息.JSON看起来像这样:

{'delivery': {'mids': ['mid.146174459xxx:30a42600a95exxxxx'], 'seq': 429, 'watermark': 146174459xxx}, 'recipient': {'id': xxxxxxxx}, 'sender': {'id': xxxxxx}}
Run Code Online (Sandbox Code Playgroud)

编辑:也可能是您没有确认来自http状态200的来电.如果Facebook收到来自您的webhook的错误,该消息将被多次发送.


n.a*_*001 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!"
      }
    }
  ]
}
]
}
Run Code Online (Sandbox Code Playgroud)

消息传递的回调

{
 "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
           }
        }
     ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

因此,为了区分我们可以参考entry[0].messaging[0].message这只存在于用户发送的消息中.回调或回发不包含此部分.在回复之前检查一下.如果存在,请回复,否则不要.

  • 所以你是如何避免这种情况的... ...我是如何区分这两者的......你能否共享你的请求的示例代码.谢谢 (2认同)

Par*_*ngh 6

我的问题很相似,但我收到了多条消息传递帖子.经过几个小时的挫折之后,我意识到每次将消息传递到每个设备时都会调用Message Delivered回调.因此,如果您同时登录Web和移动应用程序,则会调用两次回调.