在 Microsoft Teams 中使用 Microsoft Graph API 列出私人团队频道成员
List private team channel members with Microsoft Graph API in Microsoft Teams
我的 Microsoft Teams 应用程序作为 tab and needs to get the list of the chat members or channel members 使用,具体取决于它的安装位置。
/chats/{chat-id}/members
/teams/{team-id}/channels/{channel-id}/members
要使用 API,我需要 Context object from the client SDK library 来获取 API 所需的标识符。它适用于聊天——群组和一对一(使用 Context.chatId
)和 public 团队频道(使用 Context.groupId
和 Context.channelId
).
但是,我尝试的任何方法似乎都不适用于 私人 团队频道。
私人团队频道返回的上下文对象包含teamId
和channelId
,但它们是相等的,两个id使用一个值自然不会工作。以下是 SDK 库 1.11.0(最新)为私人团队频道返回的示例:
{
"locale": "en-us",
"theme": "default",
"subEntityId": "",
"isFullScreen": false,
"sessionId": "5194fd2b-5c9a-16a7-7411-94ddabffffff",
"chatId": "",
"meetingId": "",
"parentMessageId": "",
"hostClientType": "desktop",
"tenantSKU": "unknown",
"jsonTabUrl": "microsoft-teams-json-tab.azurewebsites.net",
"userLicenseType": "Unknown",
"appSessionId": "7503c11c-d524-409c-b58b-004810ffffff",
"appLaunchId": "c736c663-cc0b-47c3-8824-ba56b7ffffff",
"isMultiWindow": false,
"appIconPosition": 79,
"userClickTime": 1637007245298,
"sourceOrigin": null,
"userFileOpenPreference": "inline",
"osLocaleInfo": {
"platform": "macos",
"regionalFormat": "en-gb",
"longDate": "d MMMM y",
"shortDate": "dd/MM/y",
"longTime": "HH:mm:ss z",
"shortTime": "HH:mm"
},
"frameContext": "settings",
"isTeamArchived": false,
"teamType": 0,
"userTeamRole": 0,
"channelRelativeUrl": "/sites/ffffff/Shared Documents/Devel",
"channelId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2",
"channelName": "Devel",
"channelType": "Private",
"defaultOneNoteSectionId": "",
"teamId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2",
"teamName": "Devel",
"teamSiteUrl": "https://ffffff.sharepoint.com/sites/worldrtech-Devel",
"teamSiteDomain": "ffffff.sharepoint.com",
"teamSitePath": "/sites/ffffff",
"teamTemplateId": "",
"teamSiteId": "",
"ringId": "general",
"tid": "d158bb9f-f90c-422d-9d0d-0040efffffff",
"loginHint": "ffffff@ffffff.uk",
"upn": "nox@worldr.co.uk",
"userPrincipalName": "ffffff@ffffff.uk",
"userObjectId": "fc5a4a6d-60e2-4370-83bd-aab1baffffff"
}
上面可以看到两者是相等的:
"channelId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2"
"teamId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2"
我想知道,这是否是预期的行为,或者那里有什么问题... 根据@Prasad-MSFT 的评论,这是私人频道的正常行为。
有一个答案建议首先列出所有 。但是,我不知道如何将此信息连接到上面显示的上下文数据。
有没有办法列出私人团队频道的成员?我错过了什么?
UPDATE1 16.11:
我做了一个实验,但结果让我很困惑。我遵循了首先获取用户所有团队的想法。这让我得到了用户所属的所有团队的 ID。然后,我为每个团队请求了当前私人频道的成员:我预计所有团队都会收到错误,但只有一个 - 该频道真正属于的那个团队。但是,我得到了每个请求的成员!这很令人困惑。
/me/joinedTeams
/teams/{id}/channels/{channel_id}/members
每个团队在 1 中收到,channelId
从上下文中收到。
- 每次调用都返回一些成员,没想到...
UPDATE2 16.11:
这种啰嗦的方式最终让我获得了频道会员:
/me/joinedTeams
/teams/{id}/channels
每个团队在 1.
- 在 2.
中从我的上下文中找到匹配 channelId
的频道 id
/teams/{id}/channels/{channel_id}/members
用于在 3. 中找到的频道
为了这么简单的事情,看起来费了不少功夫。
这种冗长的方式最终让我获得了频道成员列表。仅适用于私人团队频道,因为我们在那里的上下文中没有组 id/team id。根据@Prasad-MSFT 对原始 post 的评论,在撰写本文时没有其他方法。
- 获取
/me/joinedTeams
- 在 #1 中收到的每支球队获得
/teams/{id}/channels
。
- 从#2 收到的
Context
中找到 ID 与 channelId
匹配的频道。
- 为在 #3 中找到的频道获取
/teams/{id}/channels/{channel_id}/members
。
这里有一个警告:如果您创建了一个私人团队频道并立即将您的选项卡添加到其中,API 可能不会返回您的新频道。如果上述过程列表中的#3 失败,我会要求用户在几分钟后重试。
我的 Microsoft Teams 应用程序作为 tab and needs to get the list of the chat members or channel members 使用,具体取决于它的安装位置。
/chats/{chat-id}/members
/teams/{team-id}/channels/{channel-id}/members
要使用 API,我需要 Context object from the client SDK library 来获取 API 所需的标识符。它适用于聊天——群组和一对一(使用 Context.chatId
)和 public 团队频道(使用 Context.groupId
和 Context.channelId
).
但是,我尝试的任何方法似乎都不适用于 私人 团队频道。
私人团队频道返回的上下文对象包含teamId
和channelId
,但它们是相等的,两个id使用一个值自然不会工作。以下是 SDK 库 1.11.0(最新)为私人团队频道返回的示例:
{
"locale": "en-us",
"theme": "default",
"subEntityId": "",
"isFullScreen": false,
"sessionId": "5194fd2b-5c9a-16a7-7411-94ddabffffff",
"chatId": "",
"meetingId": "",
"parentMessageId": "",
"hostClientType": "desktop",
"tenantSKU": "unknown",
"jsonTabUrl": "microsoft-teams-json-tab.azurewebsites.net",
"userLicenseType": "Unknown",
"appSessionId": "7503c11c-d524-409c-b58b-004810ffffff",
"appLaunchId": "c736c663-cc0b-47c3-8824-ba56b7ffffff",
"isMultiWindow": false,
"appIconPosition": 79,
"userClickTime": 1637007245298,
"sourceOrigin": null,
"userFileOpenPreference": "inline",
"osLocaleInfo": {
"platform": "macos",
"regionalFormat": "en-gb",
"longDate": "d MMMM y",
"shortDate": "dd/MM/y",
"longTime": "HH:mm:ss z",
"shortTime": "HH:mm"
},
"frameContext": "settings",
"isTeamArchived": false,
"teamType": 0,
"userTeamRole": 0,
"channelRelativeUrl": "/sites/ffffff/Shared Documents/Devel",
"channelId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2",
"channelName": "Devel",
"channelType": "Private",
"defaultOneNoteSectionId": "",
"teamId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2",
"teamName": "Devel",
"teamSiteUrl": "https://ffffff.sharepoint.com/sites/worldrtech-Devel",
"teamSiteDomain": "ffffff.sharepoint.com",
"teamSitePath": "/sites/ffffff",
"teamTemplateId": "",
"teamSiteId": "",
"ringId": "general",
"tid": "d158bb9f-f90c-422d-9d0d-0040efffffff",
"loginHint": "ffffff@ffffff.uk",
"upn": "nox@worldr.co.uk",
"userPrincipalName": "ffffff@ffffff.uk",
"userObjectId": "fc5a4a6d-60e2-4370-83bd-aab1baffffff"
}
上面可以看到两者是相等的:
"channelId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2"
"teamId": "19:0bc109b412d9448bb6b1b3d4d485700b@thread.tacv2"
我想知道,这是否是预期的行为,或者那里有什么问题... 根据@Prasad-MSFT 的评论,这是私人频道的正常行为。
有一个答案建议首先列出所有
有没有办法列出私人团队频道的成员?我错过了什么?
UPDATE1 16.11:
我做了一个实验,但结果让我很困惑。我遵循了首先获取用户所有团队的想法。这让我得到了用户所属的所有团队的 ID。然后,我为每个团队请求了当前私人频道的成员:我预计所有团队都会收到错误,但只有一个 - 该频道真正属于的那个团队。但是,我得到了每个请求的成员!这很令人困惑。
/me/joinedTeams
/teams/{id}/channels/{channel_id}/members
每个团队在 1 中收到,channelId
从上下文中收到。- 每次调用都返回一些成员,没想到...
UPDATE2 16.11:
这种啰嗦的方式最终让我获得了频道会员:
/me/joinedTeams
/teams/{id}/channels
每个团队在 1.- 在 2. 中从我的上下文中找到匹配
/teams/{id}/channels/{channel_id}/members
用于在 3. 中找到的频道
channelId
的频道 id
为了这么简单的事情,看起来费了不少功夫。
这种冗长的方式最终让我获得了频道成员列表。仅适用于私人团队频道,因为我们在那里的上下文中没有组 id/team id。根据@Prasad-MSFT 对原始 post 的评论,在撰写本文时没有其他方法。
- 获取
/me/joinedTeams
- 在 #1 中收到的每支球队获得
/teams/{id}/channels
。 - 从#2 收到的
Context
中找到 ID 与channelId
匹配的频道。 - 为在 #3 中找到的频道获取
/teams/{id}/channels/{channel_id}/members
。
这里有一个警告:如果您创建了一个私人团队频道并立即将您的选项卡添加到其中,API 可能不会返回您的新频道。如果上述过程列表中的#3 失败,我会要求用户在几分钟后重试。