Facebook Messenger webhook设置,但没有触发

Jam*_*mes 30 facebook webhooks facebook-graph-api facebook-messenger

所以我正在尝试为新的Facebook Messenger API设置机器人.

我正在关注快速入门.

我设置webhook好了,在我的webhook中看到它,

我打电话给:

https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=%3Ctoken%3E
Run Code Online (Sandbox Code Playgroud)

它没有抛出任何错误,

但是当我进入我生成访问令牌的页面并发送消息时,它不会调用我的webhook.我检查了httpaccess,它没有调用它.

有没有办法调试这个或任何想法?

此外,我仍然困惑的一件事是如何支持从一个Facebook应用程序管理多个页面?任何人都知道答案,或者您是否需要创建一个新的应用程序并获得每个页面的权限?

Muk*_*lid 43

我最近使用了新的聊天机器人API,并且有很多可能出错的地方.所以,这里有一些想法.

  • 确保您已在产品设置标签下验证了您的webhook.
  • 使用您的网页访问令牌将您的应用订阅到该页面.{"success" : "true"}如果一切顺利,它会返回.

重要

  • 确保您发送消息的Facebook用户在您的应用程序角色中列为管理员开发人员测试人员(https://developers.facebook.com/apps/YOUR_APP_ID/roles/).除非您的应用获得批准并公开发布,否则来自其他用户的邮件将无效.

  • 你有没有收到facebook api的回电?或者只是消息?查看您的Web服务器的日志,并检查您是否在webhook上获得任何点击.还要检查错误日志.

  • 尝试手动点击您的webhook,看看它是否响应.您可以使用curl生成手动请求.这就是Facebook的请求:

命令:

curl -i -X POST -H 'Content-Type: application/json' -d '{"object":"page","entry":[{"id":43674671559,"time":1460620433256,"messaging":[{"sender":{"id":123456789},"recipient":{"id":987654321},"timestamp":1460620433123,"message":{"mid":"mid.1460620432888:f8e3412003d2d1cd93","seq":12604,"text":"Testing Chat Bot .."}}]}]}' https://www.YOUR_WEBHOOK_URL_HERE
Run Code Online (Sandbox Code Playgroud)

  • @Rick ...或者您只需点击页面的"关于"标签,您的"Facebook页面ID"就会列在"页面信息"部分的底部. (3认同)
  • 我的应用程序已上线,尚未开发。当我从管理员角色写入时可以触发 webhook,但当我从另一个 Facebook 帐户写入时则不能触发 webhook。可能是什么问题呢? (2认同)

Jam*_*mes 11

所以我的问题是我在尝试订阅而不是POST时调用了GET

https://graph.facebook.com/v2.6/:pageid/subscribed_apps?access_token=:token
Run Code Online (Sandbox Code Playgroud)

GET将返回当前订阅(空{[]}),POST返回{"success":"true"}

我遇到的其他一些问题是,

我仍然困惑的一件事是如何支持从一个Facebook应用程序管理多个页面?任何人都知道答案,或者您是否需要创建一个新的应用程序并获得每个页面的权限?


elM*_*uis 7

另一个可以阻止将某些响应发送到您的webhook的事情是在队列中阻止消息类型时.

如果特定的消息类型已发送到您的webhook但在20秒内没有收到200响应,它将继续尝试再次向您发送该消息数小时.

更多的facebook messenger将停止向您发送该消息类型,直到第一个消息被确认为止.它基本上将它们放入队列中.

与此同时,其他消息类型将继续发送.

当我在代码中不小心引入了一个处理标准消息的未声明变量时,就发生了这种情况.这意味着回发邮件都运行良好,但快速回复和普通邮件永远不会发送到我的webhook.一旦你修正了错误,它们就会立刻堆积起来.

正如其他人所提到的,使用诸如POSTMAN之类的服务向你的webhook发送消息是找到这种错误的好方法,否则,messenger就会无声地失败.


Slo*_*man 5

如果您使用框架,从 CSRF 验证中排除您的机器人路由会有所帮助。这对我有帮助(Laravel 5.4,app/Http/Middleware/VerifyCsrfToken.php):

protected $except = [
        '/your_bot_route'
    ];
Run Code Online (Sandbox Code Playgroud)