基于 Azure Bot Service 的 Microsoft Teams Bot 开发上手指南

这篇文章本不必要,可惜无论是 Teams Developer platform 还是 Azure Bot Service 的官方文档都不够清晰易懂,容易走弯路。因此无奈在这里做简单小结,帮助读者更快上手。

Bot 的主要目的是接收并理解用户输入的文字信息或指令,并采取行动给予回应。在一些场景下,Bot 能够节省时间,提高效率,或提供更好的使用体验。在 Bot 不擅长的场景,开发并应用 Bot 则可能得不偿失。如非出于学习与研究目的,最好首先全面考察开发维护 Bot 的成本及相应的收益。

Azure Bot Service

Azure Bot Service 是 Microsoft Azure 提供的通用 Bot 服务。它不与特定消息平台频道(Channel)绑定,提供了包括语义理解、图像识别、知识库文档和通用搜索等功能。借助 Azure Bot Service 开发的 Bot 可以介入 Teams、Telegram、Line、WeChat、Facebook 等各种频道。

Microsoft Teams 是一款可扩展的通信平台,支持安装第三方应用。一款 Teams App 可以提供 tabs、bots、connector 和 messaging extension 这四大类功能。这里仅涉及 bot 部分。

两者的文档都提供了大量说明和范例,然而文章组织混乱,不少细节描述不够清晰,快速上手指南也在本地测试后戛然而止,而未作后续说明,对新手反而可能造成误导。这里简单整理。

用 Azure Bot Service 创建一个 Bot,往往意味着创建包含包括 App Service Plan、App Service、Bot Channels Registration/ App Bot 等在内的一系列资源。这些资源会被 Azure Bot Service 一同创建。如果选择 Bot 模板,则 App Service 创建之初就能提供模板描述的 Bot 功能,可以在 Bot Channels Registration/ App Bot 的 Test in Web Chat 菜单中实际体验。例如,选择 Echo Bot 模板,则数分钟后就能在 Test in Web Chat 中与该 Bot 对话并得到复述回答。

Azure Bot Framework ComposorAzure Bot Framework SDK 用于为 Azure Bot Service 开发复杂的 Bot 逻辑并发布。可惜的是 Azure Bot Framework Composor 无论是文档还是工具本身的易用性还都有待改善。创建完成的 Bot 将被发布至相应的 App Service 中。开发者也可以手动发布。如果是基于 NodeJs 的 Bot,直接通过 App Service 的 Editor 编辑 .js 文件,同样可以更改 Bot 的逻辑。基于 .NET 的 Bot 则需要在更改代码后进行编译。

Bot Channels Registration/ App Bot 之所以能够连接到 App Service 并与 Bot 交互,是因为它的配置菜单中提供了 App Service 的 messages API。要运行 Teams 连接至该 Bot,只要在其 Channels 菜单中添加 Teams 频道即可。

此外,除了上述由 Azure Bot Service 创建的 Bot Channels Registration/ App Bot,Azure Bot Framework 也提供了功能相似的替代品,能够创建 Bot 定义、连接频道,并访问由 messages API URL 指定的 Bot 服务。

以上是 Azure Bot Service 的部分。

Microsoft Teams Bot

另一方面,Teams App Bot 这边不提供实际的 Bot 逻辑。从 Teams 的角度来看,只有 App 这个概念,App 可以提供 Bot 功能。因此在 Teams 这边需要做的只有定义 App,更确切地说,准备一个包含了 manifest.json 、 color.png、outline.png 这三个文件的 Zip 文档。该文档可以被用于提交至 Teams 公开 App Store组织内部的 App Center,或者用户自己在自己的 Teams 客户端中上传安装(需要得到 IT 管理员许可才能使用该功能)。上述两个不同用途的图标文件按下不表,在 manifest 文档中会定义该 Teams App 的 Id、名称、描述、Bot 的 Id、范围和支持的命令等信息。

名为 App Studio 的 Teams App 和 Visual Studio Code 扩展 Microsoft Teams Toolkit能够帮助开发者快速创建和准备 Teams App 所需的信息(如 manifest 等)并打包或发布。

Teams Toolkit 能快速创建 Bot 的定义并生成基本的 Bot 模板。被创建的 Bot 模板可以在之后发布到服务器作为 Bot 的实际逻辑。同时,Teams Toolkit 还能直接访问 Azure Bot Framework,读取已创建的 Bot 定义,并更新 messages API 的 URL。

即使没有 App Studio,根据文档手动创建 App 的 manifest 也并不麻烦。但 App Studio 提供了更方便的管理功能,推荐使用。

即使没有 Teams Toolkit,也可以直接访问 Azure Bot Framework 站点并登录,在网站上创建 Bot 定义,并更新各类信息,或添加频道支持。Toolkit 自动生成的 Bot 逻辑也可以通过 Azure Bot Service 自动创建。

小结

综上,为了让 Teams 能够安装一个提供了 Bot 功能的 App,需要完成以下工作:

  • 准备 manifest.json 、 color.png、outline.png 并打包成 Zip 文档(可借助 App Studio )
  • 创建 Bot 定义(经有 Azure Bot Service 或者 Azure Bot Framework),并将 Bot Id 填入 App manifest (可借助 Teams Toolkit)。Bot 定义中的 messaging api 需要指向一个实际可用的服务,如本文介绍的 Azure Bot Service 提供 App Service 的 messages API 接口

需要注意,Teams Bot 和 Azure Bot Service 的 Bot 功能有若干差异,在阅读文档时需要注意辨别。Bot Serivce 中的功能有时不一定能在 Teams 中正常工作。

以上便是基于 Azure Bot Service 的 Microsoft Teams Bot 开发上手指南。想必还没有实际开始,就能感受到这套框架的设计有多么地复杂与含糊。愿本文可以帮助对 Bot 开发感兴趣地读者节省一些时间,更愉快地开发出自己的第一个 Bot。