65.9K
CodeProject 正在变化。 阅读更多。
Home

创建带 SSO 的 Teams 对话机器人

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2022 年 2 月 10 日

CPOL

6分钟阅读

viewsIcon

4490

如何创建一个 Java Spring Boot Web 应用程序,该应用程序复制 GitHub 上“Teams Conversation Bot SSO”示例应用程序的功能

随着聊天工具成为许多团队的主要沟通方式,ChatOps 变得越来越受欢迎。将常见的业务流程集成到聊天工具中有很多好处,例如易于使用的熟悉界面、集成的历史记录和搜索功能,以及高质量的移动应用程序的可用性。

使用 Bot Framework SDK,可以轻松地在 Spring 中创建 Azure 和 Microsoft Teams 聊天机器人,只需几个命令即可从现有模板创建功能齐全的聊天机器人。

在本文中,您将使用 Spring 创建一个简单的聊天机器人,使用 Bot Framework Emulator 在本地进行测试,然后将其部署到 Azure。

必备组件

要继续阅读本文,您需要 Java 11 JDKApache MavenNode.js 和 npm,一个用于部署最终应用程序的 Azure 订阅,以及 Azure CLI

我还使用了一个脚手架工具 Yeoman 来简化设置。请使用以下命令进行安装

npm install -g yo

聊天机器人模板由generator-botbuilder-java包提供,您需要使用此命令安装它

npm install -g generator-botbuilder-java

现在,您已经拥有了创建示例聊天机器人应用程序所需的一切。

示例源代码

您可以通过查看项目在其 GitHub 页面 上的源代码来跟随学习。

创建示例应用程序

首先,使用 Yeoman 创建您的示例应用程序。输入以下命令开始

yo botbuilder-java -T "echo"

系统会提示您提供新机器人的名称、Maven 包 ID 和要使用的模板等详细信息。我将我的示例机器人命名为 WelcomeBot,包名为 com.matthewcasperson,并基于 Echo Bot 模板,该模板只会简单地重复用户对机器人说的任何内容。

Yeoman 然后会根据机器人的名称创建一个新目录,其中包含 Maven 项目和 Spring 源代码。

有关如何继续构建和部署应用程序的 官方文档,但在撰写本文时,我发现提供的步骤与 Yeoman 创建的较新模板不太一致。您还需要更新 Yeoman 创建的文件中的一些设置,以便与最新的 Azure 工具一起使用。

更新示例应用程序

首先,您需要更新 pom.xml 文件中定义的 azure-webapp-maven-plugin 的版本。默认版本太旧,无法与最新的 Azure CLI 工具配合使用,但将版本更新到至少 2.2.1 可以让您成功地将应用程序部署到 Azure。

在您的 pom.xml 文件中更新此部分

<plugin>
     <groupId>com.microsoft.azure</groupId>
     <artifactId>azure-webapp-maven-plugin</artifactId>
     <version>2.2.1</version>
   ...
</plugin>

您还需要更新运行时详细信息。将 webContainer 设置为 Java SE,将 javaVersion 设置为 Java 11

<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>2.2.1</version>
<configuration>
    ...
    <runtime>
        <os>linux</os>
        <webContainer>Java SE</webContainer>
        <javaVersion>Java 11</javaVersion>
    </runtime>
      ...
    </configuration>
</plugin>

您的机器人现在已准备好在本地进行测试。

在本地测试机器人

要直接在本地测试您的机器人,请使用 Microsoft 的 Bot Framework Emulator。您可以在 GitHub 上找到模拟器的安装文件。

使用以下命令在本地运行 Spring 应用程序

mvn spring-boot:run

然后,下载、安装并启动模拟器。

选择 Open Bot 按钮,将 Bot URL 设置为 https://:3978/api/messages,然后选择 Connect 按钮

输入一条消息,机器人应该会返回相同的消息

现在您已确认机器人可以在本地运行,是时候将其部署到 Azure 了。

部署机器人

生成的项目包含两个 Azure Resource Manager (ARM) 模板,您可以使用它们在 Azure 中生成必要的资源。第一个模板 template-with-preexisting-rg.json 将资源放入现有的资源组。第二个模板 template-with-new-rg.json 将资源放入新的资源组。

我将使用第二个模板。但在应用模板之前,您必须创建一个 Azure Active Directory (Azure AD) 应用程序来对机器人的请求进行身份验证。

使用以下命令创建 Azure AD 应用程序。您可以将显示名称参数替换为您选择的名称,并且必须提供自己的密码

az ad app create --display-name "mattcWelcomeBot" --password "<your password goes here>" 
    --available-to-other-tenants

此命令的输出如下面的文本所示,为了清晰起见,我对其进行了截断

{
  "acceptMappedClaims": null,
  "addIns": [],
  "allowGuestsSignIn": null,
  "allowPassthroughUsers": null,
  "appId": "22c4ab4e-4ab2-4169-b656-38275da47cb7",
…

请注意 appId(这是一个唯一值,而不是此处显示的值),因为您很快就需要将其传递给某些命令。

要创建包含托管机器人所需资源的资源组,请运行以下命令,确保替换 appIdappSecret 参数

az deployment sub create --name "mattcWelcomeBot" --location "westus" 
   --template-file ".\deploymentTemplates\template-with-new-rg.json" 
   --parameters groupName="welcomeBot" appId="<the app id from the previous step>" 
   appSecret="<your password goes here>" botId="mattcWelcomeBot" 
   botSku=S1 newAppServicePlanName="asp-mattcWelcomeBot" newWebAppName="mattcWelcomeBot" 
   groupLocation="westus" newAppServicePlanLocation="westus"

在上面的示例中,我在许多资源名称前都加上了 mattc 前缀,以确保它们是唯一的。特别是,App Service 和 Azure Bot 资源需要全局唯一的名称。您将需要为这些资源选择自己的唯一前缀(或完全唯一的名称)。

另请注意 App Service Plan 的名称,该名称的前缀为 asp-,后跟分配给 newWebAppName 属性的名称。App Service Plan 的命名需要这种特定格式,因为这与 Maven 插件的默认值相匹配。如果 App Service Plan 的名称不同,则使用 Maven 部署应用程序的下一步将创建一个第二个 App Service Plan。

在构建 Spring 应用之前,您需要在 application.properties 文件中定义 Azure AD 应用 ID 和密钥。

请注意,此处不能使用插值。通常,密码等敏感值会定义为环境变量并按 ${APP_SECRET} 引用。但是,在撰写本文时,Bot SDK 会逐字读取此文件,不支持引用环境变量

MicrosoftAppId=<app Id goes here>
MicrosoftAppPassword=<password goes here>
server.port=3978

使用以下命令构建应用程序

mvn package

然后,使用此命令部署应用程序

mvn azure-webapp:deploy -Dgroupname="welcomeBot" -Dbotname="mattcWelcomeBot"

Maven 插件将 Spring 应用程序部署为 App Service。因为您确保 App Service Plan 的命名符合 Maven 插件期望的默认值,所以将使用现有资源。

就是这样。您的机器人现已部署在 Azure 上。

在 Azure 上测试机器人

为了验证机器人是否正常工作,请在新创建的资源组中打开 Azure Bot 资源,选择 Test in Web Chat 链接,然后在聊天窗口中输入消息。您的机器人应该会欢迎您加入聊天并重复您输入的任何消息

链接到 Teams

现在,您将您的聊天机器人链接到 Microsoft Teams。打开 Azure Bot 资源,选择 Channels 链接,然后从可用频道列表中选择 Microsoft Teams

接受服务条款。对于 Messaging,使用默认值 Microsoft Teams Commercial,然后选择 Save 按钮

Microsoft Teams 现在已列在 Channels 列表中,并带有 Open in Teams 链接。选择该链接即可在 Teams 应用程序中开始与机器人进行对话

正如在测试时一样,机器人会欢迎您加入聊天并重复您输入的任何内容

至此,您已成功将聊天机器人部署到 Azure 并将其集成到 Teams 中。

结论

Microsoft 提供了许多工具来简化首次部署聊天机器人的过程。使用 Yeoman 构建基础项目,使用 ARM 模板创建所需的云资源,使用 Maven 插件部署应用程序,只需几个命令即可在 Azure 中部署功能齐全的聊天机器人。并且由于渠道种类繁多,将机器人连接到 Teams 等聊天应用程序快速而轻松。

继续阅读本系列的下一篇文章,了解如何创建一个 午餐订购机器人,其中包含在 Teams 中显示的丰富 UI。然后,我们将构建一个 下载和处理聊天消息中文件附件 的机器人。

要了解有关为 Microsoft Teams 构建自己的机器人的更多信息,请参阅 使用 Azure Bot Framework Composer 为 Microsoft Teams 构建出色的机器人

© . All rights reserved.