如何使用机器人框架在多个 Facebook 页面上使用同一个机器人

Posted

技术标签:

【中文标题】如何使用机器人框架在多个 Facebook 页面上使用同一个机器人【英文标题】:How can I use the same bot on multiple facebook pages using bot framework 【发布时间】:2017-05-31 07:41:46 【问题描述】:

我有几个 facebook 页面,我想在每个页面上运行相同的机器人。我正在使用机器人框架,现在一切都可以完美地在一页上运行。如何关联多个页面?

【问题讨论】:

【参考方案1】:

每个页面都需要自己的 facebook 应用程序。创建应用程序后,您可以将它们链接到同一个机器人,但它们将使用不同的页面令牌,以防您验证代码中的签名并且可能您希望为每个应用程序使用不同的 url。

【讨论】:

我有一个批准的 Facebook 应用程序,我想将此机器人用于我不拥有的页面,我有该页面的 ID 和令牌号,但我无法使用我的机器人。我该怎么做? 这是错误的,您可以在任意数量的页面上使用一个应用程序。您不需要为每个页面使用单独的应用程序。 @luschn 您可以将同一个 FB 应用程序发布到多个 FB 页面。但除非我遗漏了什么:问题是 FB 机器人框架连接器需要对 FB 页面和应用程序进行设置。因此无法将其链接到多个页面。 当然您可以将一个机器人安装到多个页面。您唯一不能做的就是将一个机器人设置为多个回调 url,仅此而已。【参考方案2】:

当您调用 Facebook Send API 时,您会通过 access_token 参数传递页面访问令牌。您可以通过修改此访问令牌来指定要引导您的消息的页面。要知道是哪个页面发起了这条消息,您可以访问消息帖子条目的id字段。

app.post('/webhook', (req, res) => 
    const data = req.body

    // Make sure this is a page subscription
   if (data.object === 'page') 
       // Iterate over each entry
       data.entry.forEach((pageEntry) => 
           // get the pageId
           const pageId = pageEntry.id
           ...

然后您需要维护一个对象,将页面 id 映射到与每个页面 id 关联的访问令牌:

const accessTokens = 
    myPageId1: 'myPageAccessToken1',
    myPageId2: 'myPageAccessToken2',

那么在发送响应的时候,指定对应的页面access_token就行了

const callSendAPI = (pageId, messageData) =>
    rp(
        uri: 'https://graph.facebook.com/v2.8/me/messages',
        qs:  access_token: accessTokens[pageId] ,
        method: 'POST',
        body: messageData,
        json: true,
     )

【讨论】:

@UriAbramson 是的,如果您对实施它有任何疑问,请告诉我 此解决方案不适用于Bot Framework 如果您对不属于您的页面作为中间件执行此操作怎么办?有没有办法在不进入并手动获取该 pageAccessToken 的情况下完成此操作? @syntakks 我不相信有办法代表不属于您的页面发送消息。您需要拥有访问令牌。【参考方案3】:

我处理这个问题的方法是在不同的服务器上部署相同的 Bot 后端。这样,我将拥有相同的后端源但不同的 webhook URL。这使得每个 Bot 虽然功能相似,但可以单独隔离和维护。这是构建机器人时非常重要的设计考虑因素,因为它可能会进行大量对话。

要回答您的问题,是的,可以通过为每个请求传递页面令牌和验证令牌并在用户与其他页面交谈时更改它 - 但我不建议这样做。

【讨论】:

【参考方案4】:

您可以为同一个应用订阅多个页面。订阅 facebook 应用程序后,与该应用程序关联的信使将与该页面关联。

https://developers.facebook.com/docs/graph-api/reference/page/subscribed_apps/这个api用于添加facebook应用到页面

【讨论】:

【参考方案5】:

对不起,如果我的回答迟到了

您可以通过一个机器人后端很好地处理所有页面流量

    创建一个 fb 应用并选择产品作为信使 添加指向您的机器人的 webbook 配置 一一选择所有要关联的页面 并将页面访问令牌放在手边。 在您的 fb 页面中搜索页面 id 并将其放在手边 在常量或 dB 中针对我想要的页面维护页面访问令牌 当您在 webhook 上收到回调时,您会收到一个页面条目和 Id== 页面 id 根据页面,我有你的业务逻辑 使用您针对页面 id 存储的页面访问令牌调用发送 api

希望对你有帮助

【讨论】:

以上是关于如何使用机器人框架在多个 Facebook 页面上使用同一个机器人的主要内容,如果未能解决你的问题,请参考以下文章

单个页面上有多个 Facebook 评论框?

如何不将 Facebook 聊天机器人与正常对话混为一谈

如何在机器人框架中并行运行多个测试套件上的多个测试用例 | Python

我无法在 ChatterOn 上同步我的 Facebook 页面。这可能是啥问题?

如何将变量等数据传递给 iframe 页面中的框架

如何在 Facebook 上的 iPhone 应用程序中分享我的页面内容?