Microsoft Bot Framework 的 App Id (Teams) 中的“28”前缀代表什么

What does "28" prefix stands for in Microsoft Bot Framework's App Id (Teams)

我正在使用 Microsoft Bot 框架,当我从团队中删除机器人时,我收到了 teamMemberRemoved 事件,当我试图从 activity.MembersRemoved 中删除用户时,有一个用户具有以下 ID - 28:<appId>.

我还在 GitHub 上找到了一些解决方案,这些解决方案正在处理像这样的机器人用户:
new ChannelAccount("28:" + botCredentials.MicrosoftAppId);

那么,我想知道28代表什么?

如果您查看机器人从 Teams 收到的任何内容,例如来自用户的消息或 teamMemberRemoved 事件等,就会发现有各种 id "types" 在起作用。例如,这里是一个示例 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 等。虽然 Teams 对其中一些具有特定的前缀格式,例如“29:”是普通用户的 "Teams" Id 的开头,“19”是频道或组 Id 等。机器人以“28:”开头,然后它们有一个唯一的 Guid Id,但在对于 Bot,它的 Guid Id 与 Azure Bot Registration 中的 App Id 相同,因此它是可预测的。这意味着,例如,如果您要发送主动消息并且需要设置 "From" 用户的 ID,则可以使用“28:”+ 您的应用程序 ID 组合它,您可能在配置文件中拥有该 ID为了处理 encryption/decryption 您的机器人消息。