【问题标题】:How to integrate BotFramework with Hangouts Chat如何将 BotFramework 与 Hangouts Chat 集成
【发布时间】:2019-08-17 21:55:03
【问题描述】:

我正在尝试将我的机器人也集成到 Hangouts Chat API。我从 C# 迁移到 node.js,以便能够利用 HangoutsAdapter:https://botkit.ai/docs/v4/platforms/hangouts.html

问题是 HangoutsAdapter 需要一个 google 令牌,当我转到 Hangouts Chat API 配置选项卡时,我选择了 Connection Settings 部分下的 Bot URL,但我唯一得到的是一个用于输入我的 bot 的 url 端点的字段。与我应该传递给环聊适配器的验证令牌无关。

还有其他方法可以使用 HangoutsAdapter 验证与该 API 的连接吗?我应该使用其他东西而不是 HangoutsAdapter 吗?或者也许我应该以不同的方式使用它?

【问题讨论】:

  • 显然秘密令牌已替换为示例建议的内容。问题是 node.js 谷歌客户端 API 似乎不支持 Java 和 Python 中的示例显示的相同的东西
  • 你能发布你的代码吗?也删除代码中的所有秘密/密钥。
  • 另外,您使用的是 v4 BotFramework 吗?
  • 我正在使用 v4,问题出在用于 BotBuilder 或 BotKit 的 HangoutsAdapter 中:botkit.ai/docs/v4/platforms/hangouts.html 我需要更正的代码在其存储库中:github.com/howdyai/botkit/blob/master/packages/… 基本上它需要一个令牌将其与从环聊聊天 API 获得的令牌进行比较。但鉴于不再提供令牌,我需要实现这一点:developers.google.com/hangouts/chat/how-tos/….

标签: botframework botkit hangouts-chat


【解决方案1】:

从技术上讲,这是一种替代解决方案(我认为)。为了创建 Google Hangouts 凭据,需要一个 GSuite 帐户,而我没有。接口 HangoutsAdapterOptions docs 声明“已使用共享秘密令牌”进行验证,可在“配置”选项卡下找到。由于字段被锁定,我无法对此进行测试。

但是,另一种方法是使用 Bot Framework 的内置 OAuth 功能。我在我的机器人中使用它没有任何障碍。我确实导航到了 Google Hangouts 网站,它立即认出了我。通过使用 OAuth 登录,系统会返回一个令牌,您可以使用该令牌将其传递到环聊适配器。

我应该补充一点,下面的实现会产生一些人不喜欢的登录魔术代码(它不会打扰我)。可能有 SSO 选项,但我还没有研究过。


首先,您需要设置 Google 凭据,该凭据将为您提供“客户端 ID”和“客户端密码”。一般说明可以在here 找到。可以创建凭据here。您可以忽略任何编码参考,因为它们不是必需的(感谢 BF OAuth 功能)。

在凭据页面中,单击左侧菜单中的“凭据”。您需要配置以下两个区域:“OAuth 同意屏幕”和“凭据”。

对于 OAuth 同意屏幕,请提供应用名称。这不需要匹配关联的请求应用程序,仅供访问凭据页面时参考。输入支持电子邮件,您将使用的范围(电子邮件、个人资料和 openid)。可能还有其他必需的范围,但是当我访问环聊网站时,这对我有用。最后,输入授权域。 botframework.com 域是必需的。其他的,如果有的话,你将不得不尝试。保存并返回凭据页面。

单击“创建凭据”按钮并填写表格。为您的凭据命名(同样,此项目的其他任何地方均未引用),输入任何授权来源,并输入 https://token.botframework.com/.auth/web/redirect 作为授权重定向 URI。保存设置,将“客户端 ID”和“客户端密码”复制到某处,然后导航到 Azure 并进入机器人的设置页面。

在这里,您需要创建机器人的 OAuth 连接。这是在“设置”刀片中完成的。刀片底部是“OAuth 连接设置”部分。点击“添加设置”按钮开始。

进入后,为您的连接命名。此名称将在下一步中被您的机器人引用,因此请将该名称保存在某处。然后,从服务提供商列表中选择 Google,并将您之前保存的“客户端 ID”和“客户端密码”粘贴到相应的字段中。在“范围”中,您需要输入您在 Google 凭据应用程序中选择的相同范围值(“电子邮件配置文件 openid”)。输入时请确保它们是空格分隔的。

最后,您需要从 Botbuilder-Samples 存储库中的示例 18.bot-authentication 对您的 OAuth 登录进行建模。这内置了使用户能够通过您的机器人登录所需的功能。

将您分配给机器人的 Google 连接设置的连接名称作为变量添加到 .env 文件中,如下所示:connectionName=<CONNECTION_NAME>

在设置 OAuth 提示时,您将把这个变量传入:

this.addDialog(new OAuthPrompt(OAUTH_PROMPT, {
  connectionName: process.env.connectionName,
  text: 'Please Sign In',
  title: 'Sign In',
  timeout: 300000
}));

此时,您的 bot 和登录过程应该 顺利进行。假设流程设置正确,用户应该能够使用魔术代码通过 OAuth 提示登录。一个令牌返回给机器人,下一步可通过context 访问该令牌。然后可以将令牌保存到状态并传递给适配器以供使用。在下面的部分中,我使用了一个带有oauthPrompt 步骤和loginResults 步骤的简单瀑布。令牌在我控制台记录它的第二步中被捕获。

async oauthPrompt(step) {
    return await step.prompt(OAUTH_PROMPT, {
        prompt: {
            inputHint: 'ExpectingInput'
        }
    });
}

async loginResults(step) {
  let tokenResponse = step.result;
  console.log('TOKEN: ', tokenResponse);

  if (tokenResponse != null) {
    await step.context.sendActivity('You are now logged in.');
    return await step.prompt(CONFIRM_PROMPT, 'Do you want to view your token?', ['yes', 'no']);
  }

  // Something went wrong, inform the user they were not logged in
  await step.context.sendActivity('Login was not successful please try again');
  return await step.endDialog();
}

希望有帮助!

【讨论】:

    【解决方案2】:

    我在https://github.com/howdyai/botkit/issues/1722 上创建了一个问题

    基本上,环聊适配器需要一个令牌,以便将其与从环聊聊天 API 获得的令牌进行比较。但鉴于谷歌不再提供令牌,认证机制需要改变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2023-03-07
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      • 2020-08-09
      相关资源
      最近更新 更多