我正在使用微软机器人框架,当我从团队中删除机器人时,我收到的信息是 teamMemberRemoved
事件中,而当我试图将用户从 activity.MembersRemoved
有以下ID的用户 - 28:<appId>
.
我也在GitHub上找到了一些处理僵尸用户这样的解决方案。new ChannelAccount("28:" + botCredentials.MicrosoftAppId);
所以,我想知道什么是 28
代表什么?
如果你看看你的机器人从Teams接收到的任何东西,比如用户的消息,或者teamMemberRemoved事件等等,有各种id "类型 "在发挥作用。作为一个例子,这里有一个对话Update事件的例子。
{
"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 "是Channel或group Id等。而Bots则是以 "28: "开头,然后它们有一个唯一的Guid,但对于Bot来说,它的Guid与它在Azure Bot注册中的App Id是一样的,所以是可以预测的。这意味着,例如,如果你要发送一条主动消息,你需要设置 "From "用户的Id,你可以用 "28:" +你的App Id,你很可能在配置文件里有,以便处理你的机器人消息的加密解密。