Microsoft Teams for Java Developers 第三部分:开发机器人





5.00/5 (4投票s)
在本文中,我们将学习如何向 Microsoft Teams 添加一个会话机器人,以回显文本消息。
机器人可以实现任务自动化。此外,会话机器人还为 Microsoft Teams 用户和 Web 服务之间增加了一个通信层。由于用户与机器人的聊天方式与与同事交谈的方式相同,因此他们可以轻松地在 Microsoft Teams 中访问 Web 服务或启动业务工作流。
当用户发送消息时,Teams 会自动将其路由给机器人。您可以定义核心机器人命令,并添加一个带有下拉选项列表的命令菜单,以帮助用户了解机器人的功能。用户还可以通过 @botname 在对话中使用机器人。
除了接收命令,机器人还可以发送主动消息。机器人可以自动生成消息。这些消息包括动态和交互式内容,如按钮、图像和视频。
本质上,机器人是一个 Web 应用程序。这意味着您可以将多个现有 Web 服务包装到机器人中,甚至可以通过 AI 来增强它们。例如,您可以添加 语言理解 (LUIS) 或 QnA Maker 来进行自然语言处理。
本文将探讨如何使用 Spring、Java 和 IntelliJ IDEA 创建 Microsoft Teams 机器人。我们将把机器人部署到 Azure Spring Cloud,并将其集成到我们在本系列第二篇文章中创建的 Teams 选项卡。然后,用户可以向机器人发送消息,让它回显他们的文本。
创建机器人项目模板
我们首先使用 Java 的 Bot Framework SDK 创建机器人项目模板。Microsoft 的 Yeoman 模板使我们能够快速创建三个不同的机器人项目
- Echo Bot:一个创建简单机器人的模板,该机器人会重发它收到的每一条消息
- Empty Bot:一个用于机器人的空项目模板
- Core Bot:一个用于构建高级机器人的模板,例如使用 LUIS 的机器人
要开始使用 Yeoman,请确保您已安装 Node.js。然后,安装最新版本的 Node 包管理器
npm install -g npm
接下来,我们安装 Yeoman 和用于构建机器人的模板
npm install -g yo npm install -g generator-botbuilder-java
然后,为了开始创建模板,我们调用以下命令并回答一些配置问题(请参见下面的屏幕截图)
yo botbuilder-java -T "echo"
我们将机器人配置如下
- 名称:teams-bot-echo
- 包名:db.bots.example
- 模板:Echo Bot
Yeoman 生成项目的骨架。如上图所示,它在 teamsBotEcho 文件夹中创建了我们的项目模板。当我们在 IntelliJ IDEA 中打开此文件夹时,渲染的 README.md 文件会告诉我们下一步该怎么做。
但是,Java 开发人员应该已准备好所有工具(包括 Maven 和 Java)。Bot Framework Emulator 是一个可选工具,可能对本地机器人测试很有帮助。该桌面应用程序适用于 Windows、Linux 和 macOS。在这里,我们使用 macOS 版本,该版本在首次启动后看起来如下
我们可以从大量链接中选择开始构建机器人。我们可以创建回显机器人或基于自然语言处理的 AI 驱动的会话机器人。我们甚至可以设置 CI/CD 管道来自动化机器人部署。
让我们开始探索我们使用 Yeoman 生成器创建的项目模板。我们生成的应用程序是一个 Spring Boot Web 应用程序。在 Application
类中实现的入口点派生自 BotDependencyConfiguration (com.microsoft.bot.integration.spring)
。
这是该类的骨架
public class Application extends BotDependencyConfiguration {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public Bot getBot() {
return new EchoBot();
}
@Override
public BotFrameworkHttpAdapter getBotFrameworkHttpAdaptor(Configuration configuration) {
return new AdapterWithErrorHandler(configuration);
}
}
我们看到有两个与机器人相关的元素
getBot
方法,它返回EchoBot
类的一个新实例getBotFrameworkHttpAdaptor
,一个返回用于错误处理的自定义适配器的方法
实现机器人的类是 EchoBot
。它看起来像这样
public class EchoBot extends ActivityHandler {
@Override
protected CompletableFuture<Void> onMessageActivity(TurnContext turnContext) {
return turnContext.sendActivity(
MessageFactory.text("Echo: " + turnContext.getActivity().getText())
).thenApply(sendResult -> null);
}
@Override
protected CompletableFuture<Void> onMembersAdded(
List<ChannelAccount> membersAdded,
TurnContext turnContext
) {
return membersAdded.stream()
.filter(
member -> !StringUtils
.equals(member.getId(), turnContext.getActivity().getRecipient().getId())
).map(channel -> turnContext.sendActivity(MessageFactory.text("Hello and welcome!")))
.collect(CompletableFutures.toFutureList()).thenApply(resourceResponses -> null);
}
}
EchoBot
类派生自 ActivityHandler
,它来自 com.microsoft.bot.builder
。“Activity”前缀强调了 Activity 对象代表机器人对话中的每个消息。这就是为什么 EchoBot
会覆盖 onMessageActivity
基方法。在默认的回显实现中,机器人会重发它收到的消息文本。
我们还可以从 TurnContext
类的实例获取有关机器人收到的消息的信息。我们将此实例注入 onMessageActivity
方法。特别是,我们可以使用它来获取 Activity 类的实例 (turnContext.getActivity()
),然后读取消息文本。
此外,EchoBot
通过覆盖 onMembersAdded
方法来处理向频道添加新成员的事件。如果新成员加入频道,机器人会发送静态消息“Hello and welcome!”。
我们将在下一节测试此功能。
测试机器人
现在,让我们使用 Bot Framework Emulator 来探索机器人如何工作。我们启动应用程序,然后打开 Bot Framework Emulator。然后,我们单击 Open Bot 按钮。
这样做会打开一个弹出窗口,我们在其中输入机器人消息传递终结点
https://:<SERVER_PORT>/api/messages
在这里,SERVER_PORT 来自应用程序的属性。在我们的例子中,它是 3978
单击 Connect 后,我们将在左侧看到一个聊天窗口,在右侧看到日志。聊天窗口应显示欢迎消息。现在,我们可以输入自定义消息。机器人会将它们重新发布到通信频道
在确保一切正常后,我们将注册机器人到 Azure AD,然后将其发布到 Azure Spring Cloud。之后,我们将将其添加到我们在本系列第二篇文章中创建的 Microsoft Teams 应用中。
创建机器人服务和应用程序注册
在发布新机器人之前,我们需要在 Azure AD 中注册它。首先,在 Azure 门户中,转到 Bot Services。然后,单击 Create bot service 按钮。我们从可用的机器人服务模板列表中选择 Azure Bot,然后单击 Create
在 Create an Azure bot 屏幕中,我们选择我们的订阅和资源组,并指定机器人句柄(我们使用 teams-bot-java)。然后,我们在 Microsoft App ID 组下选择 Create new Microsoft App ID
我们可以通过单击 Next: Tags 来选择性地添加标签。然后,我们 Review + create 机器人。在此过程中,Azure 还会预配一个名为 Key Vaults 服务下的新保管库,其中包含应用程序密码。我们将在项目的后续步骤中用到此密码和应用程序 ID。
要获取应用程序 ID,我们转到已部署的机器人服务并打开 Configuration 选项卡。然后,我们复制 Microsoft App ID 文本框中的值(此处为 6554dd02-14c9-48e5-8734-83c487cd4f2b)。
接下来,我们导航到 Azure Key Vaults 并查找前缀为 bot-secrets 的保管库。
要访问包含应用程序密码的密钥,我们首先需要为当前登录到 Azure 门户的用户添加一个访问策略。为此,我们单击 Settings 下的 Access Policies。然后,我们单击 Add Access Policy 链接
在 Add access policy 视图中,我们从 Configure from template (optional) 下拉菜单中选择 Key, Secret, & Certificate Management。然后,我们单击 Select principal, 旁边的链接,右侧窗格将出现。我们使用此窗格查找我们的用户名
选择用户后,我们单击 Add。此操作将我们带回保管库配置,在那里我们需要单击 Save 按钮。
现在,我们可以访问保管库中存储的数据。我们转到 Secrets,然后单击 bot-teams-java-pwd 密钥
我们通过单击 Show Secret Value 来读取当前密钥版本,并存储该密钥以备后续步骤使用。
将机器人部署到 Azure Spring Cloud
在将机器人部署到 Azure Spring Cloud 之前,我们需要打开 application.properties 并将 MicrosoftAppId 和 MicrosoftAppPassword 更新为我们的值。我们还将 server.port 更改为 80
我们已准备好将机器人部署到 Azure Spring Cloud。我们按照与本系列第二篇文章相同的路径进行操作。我们登录到 Azure (Azure Explorer->Sign in),然后在 IntelliJ IDEA 项目的资源管理器中右键单击项目。选择 Azure,然后选择 Deploy to Azure Spring Cloud
IntelliJ IDEA 会显示另一个窗口,我们在其中配置部署
我们使用之前创建的 Azure Spring Cloud 服务 (db-spring-cloud-82),并创建一个新的应用程序实例 (springcloud-app-20211004090957)。
部署应用程序后,我们需要分配公共终结点。我们在 Azure 门户中,通过单击新部署的应用程序的 Overview 选项卡中的 Assign endpoint 来完成此操作。下面的屏幕截图显示了此操作为我们生成的 URL。
我们使用分配的终结点来配置 Azure 中的机器人服务。我们返回到 teams-bot-java,并在 Configuration 页面上,将应用程序终结点 URL 粘贴到 Messaging endpoint 文本框中,并在后面加上 /api/messages。
最后,我们单击 Apply 来注册和配置机器人。现在,我们需要在下一节将其添加到 Teams 应用中。
创建机器人的功能
现在,我们将机器人添加到我们在上一篇文章中创建的名为 teams-tab 的 Teams 应用中。我们在 App Studio 中找到 teams-tab,如下图所示
然后,我们单击 teams-tab。这将显示我们的应用程序清单编辑器。在清单编辑器中,我们转到 Capabilities,然后单击 Bots 选项卡。这样做会打开另一个视图,我们在其中单击 Set up 按钮,如下图所示。接下来,在 Set up a bot 表单中,我们选择 Existing bot 选项卡。粘贴我们在注册机器人时获得的 Application ID。之后,我们可以配置机器人的属性。
我们可以启用文件上传和下载,或者单向通知。我们还可以指定机器人是否支持视频和音频通话。最后,我们可以配置机器人的范围:个人、团队或群聊,机器人会相应地做出响应。此范围的工作方式与选项卡类似:个人机器人用于机器人与单个用户之间的对话,而团队范围的机器人可供所有团队成员使用。
为团队或群聊配置的机器人仅在用户在其对话中使用 @mention
属性时被调用。仅单向通知的机器人不需要 @mention
属性。所有消息都会直接路由到此类机器人。
在这里,我们选择所有三个可能的范围,并保持所有其他选项未选中
单击 Save 后,我们在 Teams 应用程序清单中看到机器人功能。
可选地,我们可以添加机器人命令。
配置完机器人后,我们转到 Test and distribute 并单击 Install。我们组织的 Teams 用户现在可以从 Teams 选项卡访问回显机器人,以重复他们的消息。
后续步骤
我们已经通过开发项目模板、将其部署到云端以及更新 Teams 应用清单来为 Microsoft Teams 创建了一个机器人。现在,我们可以添加更高级的机器人功能了。从示例代码开始,将回显机器人替换为您选择的机器人。
您现在知道如何开始为 Microsoft Teams 进行 Java 开发。您知道如何创建 Teams 选项卡并导入应用程序,从而帮助员工访问他们日常使用的软件中的信息和功能。您还知道如何创建一个机器人来帮助自动化工作,节省员工的时间,让他们可以投入到更具生产力的工作中。
尽管让员工使用新软件可能具有挑战性,但当您将易于使用的 Java 工具放置在员工已经与队友协作的地方时,这很容易。他们会对新的易于使用的生产力软件感到满意,您将对集成这些应用程序的便捷性感到满意,管理层将对公司生产力的提升感到满意。通过为 Microsoft Teams 开发应用程序,用您独特的应用程序创意来扩展这些功能。