【问题标题】:Using RSC To Access Chat Messages with Microsoft Graph使用 RSC 通过 Microsoft Graph 访问聊天消息
【发布时间】:2021-11-17 05:22:50
【问题描述】:

我正在构建一个 Teams 聊天机器人,它在与用户对话时查看当前聊天/频道中的消息历史记录。

我的机器人已获得所需的所有 RSC(资源特定内容)权限(见下图)

这是清单的相关部分:

{
    "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.11/MicrosoftTeams.schema.json",
    "version": "1.0.0",
    "manifestVersion": "1.11",
    "id": "bd33f8b1-b593-433c-926e-44a27c1bd94a",
    ...
    "permissions": [
        "identity",
        "messageTeamMembers"
    ],
    ...
    "bots": [
        {
            "botId": "e6d93739-a8ab-412d-a4f6-b6f514a3451a",
            "scopes": [
                "team",
                "personal",
                "groupchat"
              ],
            "isNotificationOnly": false,
            "supportsFiles": true
        }
    ],
    "validDomains": [],
    "webApplicationInfo": {
        "id": "e6d93739-a8ab-412d-a4f6-b6f514a3451a",
        "resource": "https://RscBasedStoreApp",
        "applicationPermissions": [
            "TeamSettings.Read.Group",
            "ChannelMessage.Read.Group",
            "TeamSettings.Edit.Group",
            "ChannelSettings.ReadWrite.Group",
            "Channel.Create.Group",
            "Channel.Delete.Group",
            "TeamsApp.Read.Group",
            "TeamsTab.Read.Group",
            "TeamsTab.Create.Group",
            "TeamsTab.ReadWrite.Group",
            "TeamsTab.Delete.Group",
            "Member.Read.Group",
            "Owner.Read.Group",
            "ChatSettings.Read.Chat",
            "ChatSettings.ReadWrite.Chat",
            "ChatMessage.Read.Chat",
            "ChatMember.Read.Chat",
            "Chat.Manage.Chat",
            "TeamsTab.Read.Chat",
            "TeamsTab.Create.Chat",
            "TeamsTab.Delete.Chat",
            "TeamsTab.ReadWrite.Chat",
            "TeamsAppInstallation.Read.Chat",
            "OnlineMeeting.ReadBasic.Chat",
            "Calls.AccessMedia.Chat",
            "Calls.JoinGroupCalls.Chat",
            "TeamsActivity.Send.Chat"
        ]
    }
}

注意:机器人有权阅读聊天频道中的消息。具体来说,我的问题会影响 chats 而不是 channels(我可以从中获取消息)。

为了做到这一点,我获得了机器人帐户的 JWT 令牌,像这样访问 Graph API:

GraphServiceClient<?> gsc = GraphServiceClient.builder()
            .authenticationProvider(u -> mac.getToken())
            .buildClient();

接下来,我使用 Graph API 来拉回这些消息。对于频道中的消息,我可以这样做:

gsc.teams("some group id")
            .channels("team id")
            .messages()
            .buildRequest(Collections.emptyList()).get()));

这很好用。

对于聊天,我正在做类似的事情:

gsc.chats("29:13qY8hmfkJinH9-v7rYKjCNFHYFJXKbjqR-NyzyKzL694npelHJoq5HrVtqJLRYo79OYeHGQq-bhtJM5N-yKXyQ")
.messages()
.buildRequest().get()));

但是,这次我从 Graph API 收到错误:

[为简洁起见,部分信息被截断,请启用调试日志记录 更多详细信息] com.microsoft.graph.http.GraphServiceException:错误 代码:禁止错误消息:调用的 API 需要受保护的 API 不使用特定资源时在仅应用程序上下文中访问 同意。访问 https://docs.microsoft.com/en-us/graph/teams-protected-apis 了解更多 详情。

获取 https://graph.microsoft.com/v1.0/chats/29:13qY8hmfkJinH9-v7rYKjCNFHYFJXKbjqR-NyzyKzL694npelHJoq5HrVtqJLRYo79OYeHGQq-bhtJM5N-yKXyQ/messages SdkVersion : graph-java/v5.6.0

我无法解释为什么查询频道工作正常但查询聊天失败。

感谢任何帮助!

【问题讨论】:

  • 你提供了什么权限?
  • 嗨@HunaidHanfee-MSFT - 见附图。我都提供了
  • 我已经添加了(大部分)清单文件以防万一

标签: microsoft-graph-api microsoft-teams


【解决方案1】:

这是一个受保护的 API,为了使用它,您首先需要向 Microsoft Graph 发出正式请求,请求在没有任何用户交互的情况下使用该 API 的权限

这里是protected APIs 的列表。您需要填写此form 以获得所需的权限。

要请求访问这些受保护的 API,请完成以下操作 request form。我们每周三审核访问请求并部署 每周五批准,除了在美国的主要假期周 在这几周内提交的内容将按以下方式处理 非节假日周。

另一种选择是使用委托流。

【讨论】:

  • 在从服务器返回的响应中,它说:“在不使用资源特定同意时,调用的 API 需要在仅应用程序上下文中访问受保护的 API。”。但我正在尝试使用资源特定内容?
  • @Rob Moffat - docs.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/… - 你能检查一下你是否在响应中收到 ChannelMessage.Read.Group 和 ChatMessage.Read.Chat 吗?
猜你喜欢
  • 2022-07-21
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多