C# 什么是;28“;前缀在MicrosoftBot框架中表示';s应用程序Id(团队)

C# 什么是;28“;前缀在MicrosoftBot框架中表示';s应用程序Id(团队),c#,.net,botframework,microsoft-teams,C#,.net,Botframework,Microsoft Teams,我正在使用Microsoft Bot framework,当我从团队中删除Bot时,我将收到teamMemberRemoved事件,并且当我尝试从活动中获取已删除的用户时。MembersRemoved有一个ID为28:的用户 我也在GitHub上找到了一些解决方案,它是这样处理bot用户的: newchannelaccount(“28:+botCredentials.MicrosoftAppId) 因此,我想知道28代表什么?如果您查看一下您的机器人从团队收到的任何信息,例如来自用户的消息,或t

我正在使用Microsoft Bot framework,当我从团队中删除Bot时,我将收到
teamMemberRemoved
事件,并且当我尝试从
活动中获取已删除的用户时。MembersRemoved
有一个ID为
28:
的用户

我也在GitHub上找到了一些解决方案,它是这样处理bot用户的:
newchannelaccount(“28:+botCredentials.MicrosoftAppId)


因此,我想知道
28
代表什么?

如果您查看一下您的机器人从团队收到的任何信息,例如来自用户的消息,或teamMemberRemoved事件等,就会发现各种id“类型”在起作用。例如,下面是一个示例conversationUpdate事件:

{
    "membersAdded": [
        {
            "id": "28:[bot app id]"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2019-10-31T12:20:31.483Z",
    "id": "f:[event id]",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/emea/",
    "from": {
        "id": "29:[conversation id]",
        "aadObjectId": "[user AAD Id]"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "tenantId": "[Tenant Id]",
        "id": "19:[group or channel id]@thread.skype"
    },
    "recipient": {
        "id": "28:[bot app id]",
        "name": "[bot name]"
    },
    "channelData": {
        "team": {
            "id": "19:[some id]@thread.skype",
            "name": "Indoor Soccer",
            "aadGroupId": "[AAD Group Id]"
        },
        "eventType": "teamMemberAdded",
        "tenant": {
            "id": "[Tenant Id again]"
        }
    }
}

在上面的示例中,您可以看到一大堆“Id”,如租户Id、对话Id、用户的Azure AD Id等。但其中一些团队有一个特定的前缀格式,如“29:”是普通用户的“团队”Id开始的方式,“19”是频道或组Id,等等。机器人以“28:”开始,然后它们有一个唯一的Guid Id,但在机器人的情况下,它的Guid Id与Azure机器人注册中的应用Id相同,因此是可预测的。这意味着,例如,如果您正在发送一条主动消息,并且需要设置“发件人”用户Id,您可以将其与“28:+您的应用程序Id”组合,您的应用程序Id很可能存在于配置文件中,以便处理您的机器人消息的加密/解密。

如果您查看了机器人从团队收到的任何信息,例如来自用户的消息,或teamMemberRemoved事件等,有各种id“类型”在起作用。例如,下面是一个示例conversationUpdate事件:

{
    "membersAdded": [
        {
            "id": "28:[bot app id]"
        }
    ],
    "type": "conversationUpdate",
    "timestamp": "2019-10-31T12:20:31.483Z",
    "id": "f:[event id]",
    "channelId": "msteams",
    "serviceUrl": "https://smba.trafficmanager.net/emea/",
    "from": {
        "id": "29:[conversation id]",
        "aadObjectId": "[user AAD Id]"
    },
    "conversation": {
        "isGroup": true,
        "conversationType": "channel",
        "tenantId": "[Tenant Id]",
        "id": "19:[group or channel id]@thread.skype"
    },
    "recipient": {
        "id": "28:[bot app id]",
        "name": "[bot name]"
    },
    "channelData": {
        "team": {
            "id": "19:[some id]@thread.skype",
            "name": "Indoor Soccer",
            "aadGroupId": "[AAD Group Id]"
        },
        "eventType": "teamMemberAdded",
        "tenant": {
            "id": "[Tenant Id again]"
        }
    }
}
在上面的示例中,您可以看到一大堆“Id”,如租户Id、对话Id、用户的Azure AD Id等。但其中一些团队有一个特定的前缀格式,如“29:”是普通用户的“团队”Id开始的方式,“19”是频道或组Id,等等。机器人以“28:”开始,然后它们有一个唯一的Guid Id,但在机器人的情况下,它的Guid Id与Azure机器人注册中的应用Id相同,因此是可预测的。这意味着,例如,如果您正在发送一条主动消息,并且需要设置“发件人”用户Id,您可以将其与“28:+您的应用程序Id”组合,您的应用程序Id可能存在于配置文件中,以便处理您的机器人消息的加密/解密