简体   繁体   中英

How to get team id when the bot is installed in personal scope(MS Teams)?

I have a use case where I need to show following information in my personal application.

  1. List of channels in teams where bot is installed.
  2. List of users in teams where bot is installed.

I was exploring connector client for the same and came up with following code:-

   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);

This works perfect as long as I have the teamId.

But the issue I am facing here is with respect to finding teamId in personal scope. I install my bot application as follows by choosing the Add option.

在此处输入图片说明

As far as I understand, the above installs the bot in the personal scope of the user. Now, in this scenario the team id information is not present in conversationUpdate event at all. Please note that this is the first time I am installing the bot in the team, so the data should be available as per Microsoft documentation, but the only information available in channel object is tenant.

{
    "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"
        }
    }
}

Next, I also tried to install the bot in the team scope by using Add To Teams option. In this case it prompts me to select a channel to install, in which I choose general .

在此处输入图片说明

Now, I do get the team object inside channelData in onConversationUpdate and this flow works perfectly fine.

{
    "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"
        }
    }
}

So what I am trying to understand here is that, why is the information not coming in case the bot is installed in personal scope?

I am asking this mainly because without personal scope added for bot(ie if I keep scope only as team ), the application does not show for user, inside Apps. But if I allow the scope to be extended to personal the user might select that while installing the application and my teamId information will not be available to fetch the data, that I need.

This brings to my next question, which is, is there any way in which the default add button on the add app screen installs the bot in such a way that I get team object inside channelData , in conversationUpdate in every scenario, ie whether I choose add or add to team?

Is this how it is supposed to behave or am I missing something. Would love to hear some thoughts on this. Thanks in advance.

It might be that you're over thinking this - here's a more simple view:

  1. if you install a bot into a Team , you'll get a Team Id (and any related channel where it is installed).

  2. if you have "personal" scope set up for the bot, then the user also has the option to install the bot into "personal" scope. As this implies, they are NOT installing the bot INTO an actual Team - that's why you're not receiving a Team Id. It's not broken - it's entirely correct.

If you don't WANT your bot to be able to be installed in personal scope, simply remove that option in your manifest (the "personal" scope) - you have the ability to choose because it depends what you're wanting the user to be able to do with your bot. Some bots only make sense inside a Team, others only in Personal Scope, others only in Group Chat or in a Meeting - you can allow your bot to installed in any/all of these are relevant.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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