【问题标题】:How to securely integrate Facebook Messenger bot with existing nodejs backend?如何安全地将 Facebook Messenger 机器人与现有的 nodejs 后端集成?
【发布时间】:2016-11-05 12:15:09
【问题描述】:

我目前有一个可用的 NodeJs 后端(使用 Sailsjs 构建),它为我正在构建的移动应用程序托管休息服务。

现在我想扩展到 Facebook Messenger,这样我就可以让我的用户选择与机器人通信,而不是使用应用程序。

例如,如果用户想要查找他的下一个约会,他可以打开应用程序并进行查找,或者打开 Messenger 并询问“我的下一个约会是什么时候?”。 为了让它工作,我必须将 Messenger 用户识别为我数据库中的现有用户。为此,我目前正在使用 Facebook Messenger account linking。我设法使帐户链接正常工作并将用户 PSID 保存到我的数据库中。 对于我目前使用的机器人Motion.ai(考虑使用其他服务)。所有消息都传递到 My Motion bot webhook 和我的后端 webhook。为一个应用程序使用两个 webhook 感觉不对,是吗?

我的移动应用程序的其余服务都使用 webtoken 来识别拨打电话的用户,但是我的 Messenger bot 用户没有 webtoken,我该如何解决这个问题,并且仍然有一个安全的平台? 也许我可以让用户选择发送令牌或 PSID 和 Motion.ai 令牌? Motion.ai 令牌对所有用户都是相同的,但仍然对我的后端有点安全,因为它只接受来自 Motion.ai 服务器的请求。

非常感谢您提供的任何帮助

好的,我找到了让它工作的方法。 由于我正在构建荷兰机器人 Motion.ai 并不适合我。我切换到 Api.ai 主要是因为他们对荷兰语的支持,但也因为先进的语言处理能力。 我发现我无法将控制器重复用于我的机器人和移动应用程序。为了解决这个问题,我将所有逻辑移到了服务中(更好的设计),我可以在我的机器人控制器和休息服务控制器中调用它。

为了让一切都以安全的方式运行,我做了以下工作:

1: Api.ai 不支持 Facebook 的帐号关联回调,所以我使用我的服务器作为我的 Facebook 应用的 webhook。

2:我使用 Sails Policy 来确认 Facebook 令牌,检查数据库中的 UserId(如果不匹配,则向用户发送 account_linking 请求),并处理 account_linking 回调。 为了保护 Api.ai webhook,我使用了另一个使用基本身份验证的策略。

2.1 如果用户尚未链接,链接过程将发送一个登录表单,以便他可以使用我的应用程序中使用的电子邮件和密码登录。

2.2: 如果用户邮箱和密码匹配,我会发送重定向链接到 fb 以确认登录。我还添加了一个包含用户 ID 的令牌(来自我的数据库)。

2.3: Fb 现在将通知用户他已成功登录,并使用他们从我那里收到的令牌发送 account_linking 回调。由于用户 ID 在令牌中,我现在可以在我的数据库中查找用户并使用我从 Facebook 收到的 ID 更新他的 FacebookID。现在用户正式登录了。

3:确认政策后,我使用控制器将 Facebook 消息重定向到 Api.ai。

4: 最后,Api.ai 将向我的服务器发送回一个响应,我的服务器将处理它并将消息重定向到 fb 用户。

【问题讨论】:

    标签: node.js facebook facebook-graph-api sails.js messenger


    【解决方案1】:

    假设您可以按照您的说法为您的机器人切换到另一个服务,请切换到api.ai

    因为它提供了one-click Facebook Messenger integration,而且它似乎正在引领机器人市场。

    还有wit.ai,不过我还没测试过。

    希望这有帮助:)

    【讨论】:

    • 谢谢,但我知道 api.ai 和 wit.ai。他们确实会简化 bod 构建过程,但仍然无法解决我的安全问题...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 2018-12-11
    • 2017-12-07
    • 2017-01-28
    • 1970-01-01
    相关资源
    最近更新 更多