首页 > 解决方案 > 通过 Graph Api 向 Teams 发送聊天/频道消息

问题描述

我有一个 SPA,我正在尝试通过 - POST https://graph.microsoft.com/v1.0/teams/{teamid}/channel/{channelid}/messages代表 Teams 中的用户发送消息

通过同样的。

但我不断收到这个错误 -

{

"error": {
    "code": "Unauthorized",
    "message": "Unauthorized",
    "innerError": {
        "date": "2020-12-03T06:09:02",
        "request-id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "client-request-id": "xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
    }
}

}

SPA 是使用 Azure AD 应用注册构建的,并且已向应用授予以下 API 权限:ChannelMessage.Send (Delegate)、Chat.ReadWrite (Delegate)、ChatMessage.Send (Delegate)。

从 Microsoft Graph 资源管理器门户调用时,上述 API 有效。

我还比较了来自 Graph Explorer 和 My Azure AD 应用程序的 jwt.io 上的访问令牌,它们都有范围 - [ ChannelMessage.Send ],这是向通道发送消息所必需的

如果我错过了什么或者我做错了什么,需要帮助。

标签: javascriptazuremicrosoft-graph-apisingle-page-applicationmicrosoft-teams

解决方案


使用Send Channel Message Graph API 将消息发布到通道需要ChannelMessage.Send Group.ReadWrite.All权限

这是向频道发送消息的代码片段,您需要实现authProvider来传递它graphClient,我为我的租户测试了它,我成功地能够在频道中发送消息。 在此处输入图像描述 下面是代码片段

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var chatMessage = new ChatMessage
{
    Body = new ItemBody
    {
        Content = "Hello World"
    }
};

await graphClient.Teams["{TeamId}"].Channels["{ChannelId}"].Messages
    .Request()
    .AddAsync(chatMessage);

推荐阅读