【问题标题】:How to get team id when the bot is installed in personal scope(MS Teams)?当机器人安装在个人范围(MS Teams)中时如何获取团队ID?
【发布时间】:2021-10-15 17:08:53
【问题描述】:

我有一个用例,我需要在我的个人应用程序中显示以下信息。

  1. 安装了机器人的团队中的频道列表。
  2. 安装了机器人的团队中的用户列表。

我也在探索相同的连接器客户端并想出了以下代码:-

   const credentials = new MicrosoftAppCredentials(appId, appPassword);
   const connectorClient = new ConnectorClient(credentials, {
        baseUri: serviceUrl
    });
   const token = await credentials.getToken();
   axios.defaults.headers.common.Authorization = `Bearer ${ token }`;

   # To get channels
   const response = await axios.get(
        'https://smba.trafficmanager.net/in/v3/teams/{teamId}/conversations'
    );

    # To get members
   const users = await connectorClient.conversations.getConversationPagedMembers(teamId);

只要我有 teamId,这就完美了。

但我在这里面临的问题是关于在个人范围内查找teamId。我通过选择 Add 选项安装我的机器人应用程序,如下所示。

据我了解,以上将机器人安装在用户的个人范围内。现在,在这种情况下,conversationUpdate 事件中根本不存在团队 ID 信息。请注意,这是我第一次在团队中安装机器人,因此数据应该根据 Microsoft 文档可用,但通道对象中唯一可用的信息是租户。

{
    "membersAdded": [
        {
            "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2017-02-23T19:38:35.312Z",
    "localTimestamp": "2017-02-23T12:38:35.312-07:00",
    "id": "f:5f85c2ad",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/amer-client-ss.msg/",
    "from": {
        "id": "29:1I9Is_Sx0OIy2rQ7Xz1lcaPKlO9eqmBRTBuW6XzkFtcjqxTjPaCMij8BVMdBcL9L_RwWNJyAHFQb0TRzXgyQvA"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
    },
    "recipient": {
        "id": "28:f5d48856-5b42-41a0-8c3a-c5f944b679b0",
        "name": "SongsuggesterBot"
    },
    "channelData": {
        // for me this object is empty
        "team": {
            "id": "19:efa9296d959346209fea44151c742e73@thread.skype"
        },
        "eventType": "teamMemberAdded",
        "tenant": {
            "id": "72f988bf-86f1-41af-91ab-2d7cd011db47"
        }
    }
}

接下来,我还尝试使用 Add To Teams 选项在团队范围内安装机器人。在这种情况下,它会提示我选择要安装的频道,我选择general

现在,我确实在channelData 中获取了onConversationUpdate 中的团队对象,并且此流程运行良好。

{
    "membersAdded": [
        {
            "id": "28:64564f44-dd7c-441a-b427-efcd662f21b5"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2021-10-14T13:22:01.6072361Z",
    "id": "f:4ebc9a41-5140-7621-33f5-31d97275ce00",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/in/",
    "from": {
        "id": "29:17ZGff4Pvqz_zSNqEexg-86uBFcB6vnOBZzCwu4_puGdDsrYWCW_DdlB15PrcjC--nLlqD5CwtLMJyzXPY5OSsg",
        "aadObjectId": "eac26e98-104a-4785-87aa-bcf77ea1d7c1"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "tenantId": "c8fef0de-e240-4456-b523-3285ecc62087",
        "id": "19:y7qDBfGH2jE_Ze6G8mJS_CiWiqCaRFfH77jFZvJ1xgU1@thread.tacv2"
    },
    "recipient": {
        "id": "28:64564f44-dd7c-441a-b427-efcd662f21b5",
        "name": "Trick"
    },
    "channelData": {
        "team": {
            "aadGroupId": "5bc77aa9-9487-49ae-958f-b37b2191e64d",
            "name": "test 5",
            "id": "19:y7qDBfGH2jE_Ze6G8mJS_CiWiqCaRFfH77jFZvJ1xgU1@thread.tacv2"
        },
        "eventType": "teamMemberAdded",
        "tenant": {
            "id": "c8fef0de-e240-4456-b523-3285ecc62087"
        }
    }
}

所以我想在这里理解的是,如果机器人安装在个人范围内,为什么信息不会出现?

我问这个主要是因为没有为机器人添加个人范围(即,如果我只将范围保留为team),应用程序不会在应用程序内向用户显示。但是,如果我允许将范围扩展到 personal,用户可能会在安装应用程序时选择该选项,并且我的 teamId 信息将无法用于获取我需要的数据。

这引出了我的下一个问题,即add app 屏幕上的默认add 按钮是否以这样一种方式安装机器人,即我在channelData 中获得team 对象,在conversationUpdate 在每个场景中,即我是选择添加还是添加到团队?

这是它应该如何表现还是我错过了什么。很想听听对此的一些想法。提前致谢。

【问题讨论】:

    标签: botframework microsoft-teams


    【解决方案1】:

    这可能是你想多了 - 这里有一个更简单的观点:

    1. 如果您将机器人安装到团队,您将获得一个团队 ID(以及安装它的任何相关频道)。

    2. 如果您为机器人设置了“个人”范围,那么用户可以选择将机器人安装到“个人”范围中。正如这所暗示的那样,他们没有将机器人安装到实际的团队中 - 这就是您没有收到团队 ID 的原因。它没有损坏 - 完全正确。

    如果您不希望您的机器人能够安装在个人范围内,只需在清单中删除该选项(“个人”范围) - 您可以选择,因为这取决于您希望用户能够使用您的机器人做什么。有些机器人只在团队内部有意义,有些只在个人范围内有意义,有些只在群聊或会议中有意义 - 您可以允许您的机器人安装在任何/所有这些相关的地方。

    【讨论】:

    • 如果还有什么不清楚的地方请在 cmets 中告诉我
    • 这听起来不错。如果我选择团队的范围。我在应用程序下找不到我的应用程序。有什么办法可以在那里显示吗?
    • 它认为它肯定应该显示在那里,但“添加”按钮下拉/选项可能会有所不同。无论如何安装它的另一种方式会更相关 - 从团队内部(例如顶部选项卡列表上的“+”按钮)
    • 我在这里遇到了一个奇怪的行为。对于安装在团队范围内的应用程序,mac 桌面应用程序和 Web 应用程序的行为方式不同。在桌面应用程序部分中根本不显示应用程序,但在网络上却显示。这是预期的行为还是我错过了什么?我尝试将网络应用程序中的应用程序添加到团队范围内,我可以在桌面和网络上看到。但是当我尝试从 mac 应用程序添加时,它并没有反映在 mac 应用程序或 web 应用程序中。
    • @HarkiratSaluja - 请检查一下 MAC 机器上最新的 Teams 桌面客户端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多