Facebook Messenger订阅的应用程序,页面和应用程序访问令牌生成

时间:2018-07-06 18:34:00

标签: facebook-graph-api facebook-messenger-bot

在开发与我的机器人的Facebook页面无缝集成时,我碰壁。

本质上,我想实现与Chatfuel或Manychat相同的集成,使用您的Facebook帐户登录后,您可以选择要连接到他们的页面,并且一切正常。

我面临的问题是生成正确的令牌,以便将所选页面绑定到我的应用程序(机器人)。根据Facebook文档:

在创建subscribed_apps边缘时,您在端点中使用的页面ID必须与API调用中使用的页面访问令牌的页面ID相匹配。该页面已安装访问令牌所针对的应用。

鉴于该呼叫除了访问令牌外没有其他参数,因此该访问令牌必须足以让Facebook执行以下操作:

  1. 授权页面上的操作。
  2. 识别正在订阅该页面的应用程序。

这在使用Facebook Graph API Explorer时得到确认,其中选择页面和要绑定的应用并生成适当的访问令牌:

Token is build based on page and app that will subscribe to the page.

此令牌可在终端中使用cURL正常工作:

$ curl -X POST 'https://graph.facebook.com/v3.0/<MY_APP_ID_HERE>/subscribed_apps?access_token=<TOKEN_PASTED_FROM_GRAPH_API_EXPLORER>'
{"success":true}

使用Facebook Access令牌调试器(访问令牌左侧的信息图标,然后在访问令牌工具中打开),确认该令牌同时知道该页面和该应用程序必须连接。Token  has page and app info.

问题是,这些与页面应用程序相关的令牌是如何以编程方式生成的?我似乎在Facebook文档中找不到正确的API调用,而且它绝对有可能,因为Chatfuel和Manychat正在这样做。

提前感谢您对Lars Schwarz和社区的支持!

2 个答案:

答案 0 :(得分:2)

为Alex的答案添加一些细节,以使其更加完整。

在将应用程序订阅到页面时,Facebook需要:

  1. 了解您在谈论什么应用。
  2. 知道您在说什么页面。
  3. 知道您在该页面上具有订阅应用程序的权限。

Facebook如何知道这一切?

1 来自Facebook登录发生在页面上下文中的事实,实际上,Facebook的Javascript代码包含您的appId:

js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.0&appId=<YOUR_APP_ID_IS_HERE>&autoLogAppEvents=1';

2 来自用于将应用程序订阅到页面的URL中的page_id:

https://graph.facebook.com/v3.0/ YOUR_APP_ID_HERE / subscribed_apps?access_token = YOUR_ACCESS_TOKEN_HERE

3 来自访问令牌,该访问令牌是通过Facebook登录在APP的上下文中获得的,该访问令牌作为用于向页面订阅应用的URL中的参数传递的:

https://graph.facebook.com/v3.0/YOUR_APP_ID_HERE/subscribed_apps?access_token= YOUR_ACCESS_TOKEN_HERE

答案 1 :(得分:1)

为此,您需要在网站/客户门户网站上放置FB Login,并请求pages_messaging和manage_pages权限。登录的人必须是页面管理员。

一旦为您的应用授予了该页面的权限,就可以按照以下说明生成页面访问令牌:

https://developers.facebook.com/docs/pages/access-tokens