【问题标题】:401 error while sending a message into a chat with microsoft teams Graph将消息发送到与 Microsoft 团队 Graph 的聊天时出现 401 错误
【发布时间】:2021-01-07 01:43:43
【问题描述】:

我有一个从我的 microsoft 团队自定义选项卡向聊天窗口发送通知的方案。 因此,我正在尝试调用 Microsoft Graph API 以将消息发送到特定的 chatId:Post https://graph.microsoft.com/beta/chats/${chatId}/messages 我可以成功获取 access_token ,但是在调用 post 请求以将通知发送到 chatId 时,我收到“401 UnAuthorized”错误。 我的代码有什么问题?

var message = {
            "body": {
                   "content": "Hello World"
                }
               };
                    fetch(`https://graph.microsoft.com/beta/${context.userObjectId}/chats/${chatId}/messages`, {
                        method: "POST",
                        mode: "cors",
                        cache: "no-cache",
                        headers: {
                           
                            'Content-Type': "application/json;charset=utf-8",
                            'Authorization': `Bearer ${fetched_accessToken}`
                        },
                        body: JSON.stringify(message)
                    }).then((response) => {
                         alert(response.statusText);
                    }).catch((err) => {
                       alert(err);
                    });    
                } 

这段代码有什么问题?

【问题讨论】:

  • 我尝试使用 FormData 作为正文,但出现“网络错误”let data = new FormData(); data.append('client_id', 'xxxxx'); data.append('范围', 'graph.microsoft.com/.default'); data.append('client_secret', 'xxxx'); data.append('grant_type', 'client_credentials');
  • 好吧,我可以通过以不同方式调用主体参数来获取 access_token : const data = "client_id=xxxxxx&scope=graph.microsoft.com/.default&client_secret =xxxxxxx&grant_type=client_credentials";但是在将消息发布到聊天窗口时仍然出现 404(未经授权)错误
  • 我看到您正在尝试使用客户端凭据流(应用程序权限),但上述 API 调用仅适用于委派权限。它是“按设计”的,并且仅以这种方式工作。因此,您会看到错误。您可以使用委派权限尝试上述 API 调用,您会发现它会起作用。这是documentation
  • 如果有帮助请告诉我。

标签: reactjs axios microsoft-graph-api microsoft-teams microsoft-graph-teams


【解决方案1】:

如果您已经有一个 Teams 应用程序,用于您的选项卡,并且您还想在聊天中进行交流,您应该考虑创建一个机器人,并使用主动消息传递。在https://docs.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages?tabs=dotnethttps://docs.microsoft.com/en-us/graph/teams-proactive-messaging 上查看更多信息

【讨论】:

  • 酷,这是一个不错的选择@Hilton!
  • 谢谢 - 我认为它应该适用于这种情况
  • 谢谢@HiltonGiesenow,我不确定应该何时安装机器人?在我的场景中,有一个聊天对话,然后我为该用户添加了一个新的自定义选项卡。新选项卡有一些用于调用第三方 API 的字段,然后我需要在聊天窗口中向用户发送通知,我认为我需要使用 Microsoft graph,通过发布到graph.microsoft.com/beta/chats/${chatId}/messages。你觉得不对吗?
  • 可以以这种方式发布到聊天中,但该端点仅支持“委托”权限​​。结果,您的消息似乎来自该用户,而不是来自“应用程序”。您还需要处理登录和同意过程,以便第一次获得令牌。如果您有一个属于应用程序的机器人,那么所有这些都可以删除,并且用户会将“应用程序”添加到聊天中 - 选项卡和机器人将同时添加。
  • 如果您想在商店中查看执行此操作的示例应用程序,请尝试“快速链接” - 它会添加一个共享链接选项卡到聊天(或频道)以及添加一个机器人同时加入对话。
【解决方案2】:
  • 我看到您正在尝试使用客户端凭据流(应用程序权限),但上述 API 调用仅适用于委派权限。这是documentation。所以它是“按设计”的,并且只能以这种方式工作。因此,您会看到错误。
  • 您可以尝试使用委派权限进行上述 API 调用,然后您 会看到它会起作用。

【讨论】:

  • 感谢您的回复,我添加了几个权限(应用程序和委托)exp:[Chat.ReadWrite(Delegated),ChatMessage.send(Delegated),Group.Read.All(Application) ,User.Read,User.ReadWrite,User.ReadWrite.All,User.Read.All,...] 但是我在尝试向聊天窗口发送消息时仍然收到 401 错误
猜你喜欢
  • 2023-03-23
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
相关资源
最近更新 更多