繁体   English   中英

在 Microsoft Teams 中使用 Microsoft Graph API 列出私人团队频道成员

[英]List private team channel members with Microsoft Graph API in Microsoft Teams

我的 Microsoft Teams 应用程序用作选项卡,需要获取聊天成员频道成员的列表,具体取决于它的安装位置。

/chats/{chat-id}/members

/teams/{team-id}/channels/{channel-id}/members

为了使用 API,我从客户端 SDK 库中获取Context对象以获取 API 所需的标识符。 它适用于群聊和一对一(使用Context.chatId )和公共团队频道(使用Context.groupIdContext.channelId )。

但是,我尝试的任何内容似乎都不适用于私人团队频道。

为私有团队频道返回的上下文对象包含teamIdchannelId ,但它们是相等的,并且对两个 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 的评论,这是私人频道的正常行为。

有一个答案建议首先列出用户加入的所有团队 但是,我不知道如何将此信息连接到上面显示的上下文数据。

有没有办法列出私人团队频道的成员? 我错过了什么?

更新 1 16.11

我做了一个实验,但结果让我很困惑。 我遵循了首先获得用户所有团队的想法。 这让我获得了用户所属的所有团队的 ID。 然后我请求每个团队的当前私人频道的成员:我预计所有团队都会出错,但一个 - 频道真正所属的团队。 但是,我为每个请求都有成员! 这很令人困惑。

  1. /me/joinedTeams
  2. /teams/{id}/channels/{channel_id}/members用于在 1. 中收到的每个团队以及从上下文中收到的channelId
  3. 每次调用都会返回一些成员,这是我没想到的......

更新 2 16.11:

这种冗长的方式最终让我获得了频道成员:

  1. /me/joinedTeams
  2. /teams/{id}/channels为每个团队收到的 1。
  3. 在 2 中收到的频道中,从我的上下文中找到idchannelId匹配的频道。
  4. /teams/{id}/channels/{channel_id}/members用于在 3 中找到的频道。

对于这么简单的事情,看起来需要很多努力。 🙄

这种冗长的方式最终让我得到了频道成员列表。 仅适用于私人团队频道,因为我们在那里的上下文中没有组 ID/团队 ID。 根据@Prasad-MSFT 对原始帖子的评论,在撰写本文时没有其他方法。

  1. 获取/me/joinedTeams
  2. 为 #1 中收到的每个团队获取/teams/{id}/channels
  3. 在#2 中接收到的通道中,找到 id 与Context中的channelId匹配的通道。
  4. 获取在 #3 中找到的频道的/teams/{id}/channels/{channel_id}/members

这里有一个警告:如果您创建一个私人团队频道并立即将您的选项卡添加到其中,则 API 可能不会返回您的新频道。 如果上述过程列表中的 #3 失败,我会要求用户在几分钟后重试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM