Facebook Messenger Webhook不断发送消息

Usa*_*man 6 facebook webhooks messenger facebook-messenger

我正在学习使用Facebook Messenger API.我已成功设置webhook,我已订阅该应用程序.但是当我向我的页面发送消息时,我收到了同一个消息的多个实例,如一个爆发.

我正在存储从Webhook收到的应用程序发送的消息.

我的数据库视图如下面的屏幕截图所示.

http://prntscr.com/au3emz

我猜这可能是因为消息仍然未读?只是一个疯狂的猜测可能是其他人肯定知道的.我尝试了Facebook Office(节点)的确切示例,它也在那里发生.

谢谢.

yca*_*ner 6

当有人向您的 Facebook 主页发送消息时,Facebook 会将消息传输到您的 Webhook 地址并等待 http 响应,例如 OK。它不断向您的 webhook发送相同的消息,直到响应到达。

来自 Facebook 网络钩子文档(网络钩子文档

需要 200 OK 响应 当您收到 webhook 事件时,您必须始终返回 200 OK HTTP 响应。Messenger 平台将每 20 秒重新发送一次 webhook 事件,直到收到 200 OK 响应。未能返回 200 OK 可能会导致您的 webhook 被 Messenger 平台取消订阅。

在您的 webhook 确认消息后,将自动向用户发送送达回执。您还可以使用发件人操作来通知消息已被看到。

您可以看到所有这些消息都具有相同的时间戳。

作为解决方案;您可以定义一个消息队列来存储这些消息,如果队列中没有带有消息发送者 ID 和时间戳的消息,则将消息添加到队列中。

希望这可以帮助,


小智 5

这通常是由于您订阅了echo消息回调事件而引起的。

从文档;

当您的页面发送了一条消息时,将发生此回调。

这意味着您将获得机器人发送的任何消息的副本。从您的代码中,这将导致无限循环。您将继续收到Response 1

您可以通过检查的值轻松地确认这一点text;您还会发现它,Response 1并且在检查整个有效负载时将具有field "is_echo":true

解决方案: 编辑您的页面订阅以排除message_echoes

在此处输入图片说明


Usa*_*man 0

解决方案

我再次向我的应用程序发送订阅请求以停止这些消息。

所以基本上我所经历的是,网络钩子重新订阅应用程序在收到消息后将停止任何进一步的接收,直到下一条消息。

这虽然是“为什么会发生这种情况?”的解决方案的核心。目前尚不清楚。如果有人能做出贡献,我会很高兴。

谢谢。