【发布时间】: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