Facebook Messenger平台 - Webhook订阅

问题描述:

我已按照步骤设置Facebook Messenger平台。验证GET网页挂钩请求与订阅一样完美,但是当我提交聊天时,我继续收到以下开发者提醒:Facebook Messenger平台 - Webhook订阅

嗨,诺拉, 我们注意到您的Webhooks订阅了回调URL https:// {domain}/v1/webhook尚未接受至少16分钟的更新。请确认您的回拨服务器正在运行,以便您可以继续收到更新。如果您需要更新回拨网址,请参阅https://developers.facebook.com/docs/messenger-platform/webhook-reference#webhook_setup

如果您的回叫网址仍然无法接受连续8小时的更新,我们将停用您的订阅。要重新激活订阅,请使用相同参数进行POST请求,并重新激活它。

我的帖子请求通过邮递员工作。

请有人可以帮助我!这让我疯狂!

您的服务器上是否有该日志请求的日志?

Facebook要求您为发布请求返回状态码200,以便他们知道您已成功收到它。当他们没有时,他们再试一次,如果多次后仍然失败,他们会给你这个警报。 也许facebook使用了另一种内容类型或消息内容,而不是您使用邮递员的内容。

你的服务器日志应该会给你更多的见解。

+0

该帖子何时或如何发生?他们是否是实际订阅的事件,例如收到的消息?或者他们是否定期执行由Facebook完成的计划任务来检查我的回调是否还活着? –

+0

只有一个初始获取验证来检查您的服务器是否还活着。之后,它将为订阅页面上收到的每条消息提供一个回调事件。如果他们没有成功,Facebook会感到震惊(他们会重试几次),但没有额外的活着检查后的请求。 –

根据您订阅页面的Webhook events,这些事件以及您在设置的Web Hook中指定的URL上会有回调。

如果你订阅的message_deliveries事件,每次发送的消息,无论是从用户到您的网页或从你的页面给用户,还有一个,也许更多,calllback与Message Delivered JSON对象。 Webhook Reference有一个json对象的示例,但没有关于这些字段的含义的规范或解释。

有时我发现有时会收到一个无证的Read回调。造成这种情况的无证JSON数据是这样的:

{"object":"page", 
"entry":[ 
    { 
    "id":"1722858134648129", 
    "time":1465407550812, 
    "messaging":[ 
    { 
     "sender":{"id":"1131485883560113"}, 
     "recipient":{"id":"1722858134642218"}, 
     "timestamp":1465407550868, 
     "read": 
     { 
     "watermark":1465407548057, 
     "seq":428 
     }}]}]} 

本质上讲,你必须编写你的回调来处理所有类型的JSON数据优雅,包括未知数的,即使你可能还没有准备好进一步处理它们。对于那些你还没准备好处理或不感兴趣的人,不要返回任何包含Http状态码204(实际上每个回调应该返回204,因为类型为void)。

如果您仅处理您感兴趣的那些类型的json数据,那么任何意外的json数据都将极有可能引发异常,无论您的web回调代码被写入哪种语言,并导致500服务器错误返回到Facebook。正是这个500错误导致Facebook在你的问题中提出这种抱怨。