使用MS Graph(或PowerShell)创建MS Teams聊天

3

我目前正在尝试使用Microsoft Graph向特定员工发送Microsoft Teams聊天消息。

其背后的想法是,我想能够使用PowerShell发送聊天消息,但现在,我希望先在Microsoft Graph上完成它,并在此基础上构建一个PowerShell脚本。

重要提示:我不想在频道中发布消息,只想在1:1聊天中发布消息。

我尝试过:

我可以通过使用以下方法获取自己用户的当前聊天记录:

https://graph.microsoft.com/beta/users/{myid}/chats

然而,当我尝试使用不同用户的id时,我会收到401(权限被拒绝)的错误。尽管我拥有所有可用的权限,但我甚至无法查看他们当前的聊天记录。
在错误信息中,它说:

"调用委派模式时,用户 Id 必须与 API 调用者匹配"

但我不想使用委派模式,因为这意味着我正在执行命令,就好像我是那个用户一样,因此无法创建我想要的聊天消息。
可能听起来相当混乱,所以我希望你能理解我的意思。

请查看以下内容:与 Microsoft Teams 机器人进行个人(一对一)对话 - Trinetra-MSFT
2个回答

2
据我所知,没有直接向用户发送消息的方法,除非有某种上下文环境。问题在于,例如消息将出现在哪里,由谁发送?
如果你可以接受它在频道中,那么 PowerShell 是可以的,因为你可以设置一个 Webhook 来处理这个问题。我几年前就用过 PowerShell 向 Teams 发送消息,所以我认为它仍然有效。 这篇文章 可以帮助你。
或者,如果你真的想要一个“一对一”的对话,你需要创建并注册一个机器人,这样消息就会从“某个人”发给用户。这个概念被称为主动消息传递,我在这里发布了更多相关信息。然而,纯粹从 PowerShell 发送消息将需要大量的工作:
在 Azure 中创建一个机器人以获取应用程序 ID 和密码。从技术上讲,这将是一个不存在的机器人,因为没有实现,这意味着如果用户回复它将无处可去。这可能没关系?您可以尝试使用 PowerShell 构建 Azure 功能机器人,但我自己还没有做过,所以无法提供建议(到目前为止,我只使用过 C# 进行机器人开发)。
创建一个对话 ID,并将其保存以备后用-这又是一堆工作。
将代码(例如上面的帖子)转换为 PowerShell,并引用相关的 NuGet 包。
因此,如果您在您的用例中可以在 Teams 频道中进行管理并向用户发送消息,我建议您尝试寻找使用 Teams 频道的方法?
除非您正在代表另一个用户发送邮件,否则所有这些都不相关。

0

在这个上下文中,“委派”一词是指OAuth令牌中包含的权限声明类型。有两种类型:应用程序和委派。

在应用程序与委派范围方面,有两个关键规则:

  1. 单个令牌只能包含一种类型的范围。换句话说,令牌本身是应用程序或委派令牌,而不是两者的组合。

  2. 应用于令牌的范围类型由您用于获取它的OAuth授权决定:

    • 授权码:委派
    • 隐式:委派
    • 客户端凭据:应用程序

关于 聊天记录列表 (/chats) 端点,仅支持委派权限:
  • 委派 (工作或学校帐户):Chat.ReadChat.ReadWrite
  • 委派 (个人 Microsoft 帐户):不支持。
  • 应用程序:不支持。

在使用 Microsoft Graph 的权限方面有一个经验法则(我在这里使用“一般”是因为旧端点中有几个例外情况):仅适用于当前用户的委派范围以 ReadReadWrite 结尾,而适用于任何用户的范围以 .All 结尾。

由于这两个作用域(Chat.ReadChat.ReadWrite)没有以.All结尾,并且仅支持委派作用域,这告诉您您能够访问的唯一聊天是当前认证用户拥有的那些。换句话说,您无法通过API读取另一个用户的聊天消息。

如果您考虑一下,这就很有道理。如果您没有经过身份验证的用户,那么您发送的聊天消息将由谁“发送”?聊天消息需要发件人和收件人。


针对您的情况,有几种可能的解决方法,从Teams ChatBot到简单地设置一个新用户进行身份验证并向其他用户发送消息。


1
谢谢。我想我会选择Teams ChatBot解决方案 - 在这里听起来是最好的选择。 - Genericness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接