背景

在某个 Web 应用程序中请求了一个功能,用于将 Web 应用程序上的事件通知业务 SNS,我们决定研究其可行性。

目标是 Slack 和 Teams。

Slack有很多实现例子,可行性比较容易确认。
另一方面,团队的信息很少,必须面对原始文档的繁重。

最后,只有 Teams 被推迟了,但由于这是一件大事,我将总结一下我的发现。

非团队与团队

除了团队

在 Teams 以外的通用 SNS 中实现此要求时,流程将是这样的。

(*这是一个大致表达处理流程的图,不是很严格的图。)
Teams通知の実装を調査した話

对于团队

Teams 与其他 SNS 的不同之处在于“机器人”的概念。
Teams 有“Bot Framework”的概念,Web 应用程序开发人员正在使用 Node.js 编写 Bot 行为。
此外,您需要为实现的机器人构建 API 服务器。
(原文档中介绍过要在AzureAD上构建,但好像可以在其他平台上构建?)

(*这是一个大致表达处理流程的图表,并不是一个非常严格的图表。)
Teams通知の実装を調査した話

构建过程(直到本地)

下面的印象和我这次想做的很接近,所以我模仿了这个。
https://docs.microsoft.com/en-us/microsoftteams/platform/sbs-gs-notificationbot?tabs=vscode

1.准备开发环境:安装Teams Toolkit

准备开发环境 > 安装 Teams Toolkit

在 VSCode 中安装扩展。
安装完成后会启动教程,不过我会按照上一篇的,所以略过。

Teams通知の実装を調査した話

2. 创建免费的 Teams 沙盒环境

设置您的 Teams 开发租户 > 创建免费的 Teams 开发人员租户(可选)

Slack 在实际工作空间上开发,但 Teams 和 Office365 有沙盒环境机制。

创建 M365 测试租户,点击“立即加入”。

Teams通知の実装を調査した話

输入所需信息,然后单击“下一步”。

Teams通知の実装を調査した話

检查你使用什么。
在本文中,我只检查了“Microsoft Teams”。

Teams通知の実装を調査した話

将显示用于创建沙盒环境的初始数据和管理员用户的向导,因此请遵循它。
选择“即时沙盒”和“下一步”

Teams通知の実装を調査した話

输入管理员用户名和密码,点击“继续”

Teams通知の実装を調査した話

注册您的电话号码并“设置”

Teams通知の実装を調査した話

沙盒环境由上述过程启动。
点击“转到订阅”,移动到相应沙盒的 Office365 主屏幕。

Teams通知の実装を調査した話

单击团队。
(可能过渡不好1)

Teams通知の実装を調査した話

我把它放在团队中。我看到它包含测试数据。

3.新建bot节点项目

构建通知机器人

打开 Teams Toolkit 扩展并选择创建新的 Teams 应用。

Teams通知の実装を調査した話

选择如下。

Teams通知の実装を調査した話

・Javascript/TypeScript
·保存位置
选择每个。

Teams通知の実装を調査した話

为应用程序输入合适的名称。

Teams通知の実装を調査した話

将创建一个项目,因此打开它。
打开团队工具包。
执行“Teams Toolkit > ACCOUNTS > Sign in to M365”并如下所示。

*如果“侧载未启用”这里执行以下步骤

Teams通知の実装を調査した話

登录后,启动调试器。

Teams通知の実装を調査した話

执行“调试(Chrome)”并等待一段时间后,将启动 Chrome 窗口。
如果出现提示,请输入您的登录名。
出现以下屏幕时,使用“添加”添加应用程序。

Teams通知の実装を調査した話

在主机上

curl -X POST http://localhost:3978/api/notification

执行,如果消息在 Teams 上发送,则成功,如下图所示。

Teams通知の実装を調査した話

接下来,让我们向特定用户发送消息。
如下更改机器人源。
(有焦虑,因为用户识别非常强迫)

src/bot/index.js
server.post(
  "/api/notification",
  ...,
  async (req, res) => {
    for (const target of await bot.notification.installations()) {
      if (target.type !== 'Person') {
        console.log('target.type mismatch')
        continue
      }
      if (target.conversationReference.user.id !== req.body.user_id) {
        console.log('user_id mismatch')
        continue
      }
      await target.sendAdaptiveCard(
        AdaptiveCards.declare<CardData>(notificationTemplate).render({
          title: req.body.title,
          appName: '', // TODO: 隠し方調査(カードの種類変える?)
          description: req.body.description,
          notificationUrl: '', // TODO: 隠し方調査(カードの種類変える?)
        })
      );

在主机上

curl -X POST \
  -d user_id=xxx \
  -d title="Sample Service" \
  -d description="豊後 国博 様より [自宅インテリアを3D画像でコーディネートするサービス「インテリアート」](https://example.com/hoge)にコメント" \
  http://localhost:3978/api/notification

将向 Teams 发送消息,如下所示。
user_id图形浏览器可以取自

Teams通知の実装を調査した話

顺便说一句,当你完成这个Teams 开发人员门户中的应用程序屏幕我认为添加了“mynotificationbot-local-debug”。
这是一个您在本地表演时不必注意的屏幕,但您似乎需要对其进行操作才能将其反映在舞台制作中。

Teams通知の実装を調査した話

概括

这一次,我们在本地环境中启动了 TeamsBot,并实现了使用 curl 发送任意通知消息,但仍然存在以下未解决的问题。
我希望将来能够调查这些点。

・识别用户的处理
比较勉强,所以本文介绍的政策是否合适,还是个问号。

・应用审查
与其他 OAuth 授权一样,在生产中反映时似乎需要由 Microsoft 审查。

・它在远程环境中是否正常工作?
在本文介绍的本地环境中,TeamsBotAPI 服务器在本地运行,ngrok 与 Teams 配合良好。
其实搭建服务器是有必要的,在文档中介绍了作为在AzureAD上搭建的一种方法,但是需要确认是否是可以在AWS上搭建的属性。

  1. 可能是切换登录账号效果不好,所以我操作的时候是用原本登录的非沙箱账号进入的。您可能需要重新登录。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308627986.html

相关文章: