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

Facebook Messenger subscribed apps, page and app access token generation

我在开发 Facebook 页面与我的机器人的无缝集成时遇到了瓶颈。

基本上我想实现与 Chatfuel 或 Manychat 相同的集成,使用您的 Facebook 帐户登录后,您只需选择要连接到的页面即可。

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

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

鉴于调用除访问令牌外没有其他参数,此访问令牌必须足以让 Facebook :

  1. 授权页面上的操作。
  2. 确定哪个应用订阅了该页面。

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

此令牌在终端中使用 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 访问令牌调试器(访问令牌左侧的信息图标,然后在 访问令牌工具 中打开),确认令牌知道必须连接的页面和应用程序。

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

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

为此,您需要在 site/customer 门户上放置 FB 登录并请求 pages_messaging 和 manage_pages 权限。登录者必须是页面管理员。

一旦您的应用获得了该页面的权限,您就可以按照此处所述生成页面访问令牌:

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

为 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