1

我想创建一个能够在 Microsoft Teams 中自动发送消息的 Web 服务。我尝试作为应用程序进行身份验证,但目前 Microsoft 不支持授予应用程序权限以在 Teams 中发送消息,因此这里唯一的选择是使用具有真实凭据的服务帐户进行身份验证(除非有其他方法?)。此方法仅指定使用用户交互以用户身份登录。

我想使用服务帐户teamchatbot@domain.com对 Microsoft Graph 进行身份验证,以便在 Microsoft Teams 上发送消息。(与类似,但由于我没有访问资源,因此有点不同。)有没有一种方法可以代表服务帐户静默获取访问令牌以发送消息?

4

2 回答 2

1

看来你有什么误解。

你的场景其实和这个帖子一样。

您应该使用资源所有者密码凭据来调用 Microsoft Graph API 来发送消息。

根据权限,您需要Group.ReadWrite.All委托的权限。因此,您需要先将此权限添加到您的 Azure AD 应用程序中。

在此处输入图像描述

添加此权限后,请不要忘记单击“授予{您的租户}的管理员同意”。

然后您可以获得这样的访问令牌:

在此处输入图像描述

您可以看到https://graph.microsoft.com/Group.ReadWrite.All已包含在响应中。

现在您可以使用此访问令牌来调用POST /teams/{id}/channels/{id}/messages.

于 2020-01-22T05:29:02.630 回答
0

我还能想到其他几种方法。

1) 一种是您可以使用Microsoft Bot Framework创建一个 Bot ,并且一旦将该 bot 安装到特定团队,它就可以发送“主动”消息(即不是响应用户消息的消息,而是随时需要)。

从本质上讲,当您将机器人添加到团队时,您可以访问机器人中的特定事件(OnMembersAdded 用于一般机器人,现在有一个仅适用于团队的新事件)。在我对Detect bot application open event的回答中查看更多信息。在这种情况下,您可以获得稍后需要的信息,您可以将其存储在数据库或任何地方,然后创建消息,就好像它是您的机器人发布到频道一样。您可以在以编程方式向 Microsoft Teams 中的机器人发送消息中查看更多信息。

上面的这个选项需要做很多工作,但如果您希望机器人具有其他功能(例如,接收来自用户的消息的能力),则很有用

2) 另一种更简单的方法是直接创建一个传入的 webhook 到通道。这是一篇关于使用 PowerShell 执行此操作的帖子,因此您可以执行此操作以进行简单测试并从那里推断 Node.js。

当然,Flow(Power Automate)之类的东西也是一种选择,但是您已经在编写代码,因此上述其中一种可能更容易。

希望有帮助

于 2020-01-22T05:07:36.750 回答