botframework - 当机器人安装在个人范围(MS Teams)中时如何获取团队ID?
问题描述
我有一个用例,我需要在我的个人应用程序中显示以下信息。
- 安装了机器人的团队中的频道列表。
- 安装了机器人的团队中的用户列表。
我正在探索相同的连接器客户端并提出以下代码:-
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
在个人范围内寻找。我通过选择添加选项安装我的机器人应用程序,如下所示。
据我了解,以上将机器人安装在用户的个人范围内。现在,在这种情况下,团队 ID 信息根本不存在于conversationUpdate
事件中。请注意,这是我第一次在团队中安装机器人,因此数据应该根据 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"
}
}
}
接下来,我还尝试使用“添加到团队”选项将机器人安装在团队范围内。在这种情况下,它会提示我选择要安装的频道,我在其中选择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
上的默认按钮是否有任何方式add app
安装机器人,以便我在每个场景中都获得对象team
,即我是选择添加还是添加到团队?channelData
conversationUpdate
这是它应该如何表现还是我错过了什么。很想听听对此的一些想法。提前致谢。
解决方案
这可能是你想多了——这里有一个更简单的观点:
如果您将机器人安装到Team中,您将获得一个 Team Id(以及安装它的任何相关频道)。
如果您为机器人设置了“个人”范围,那么用户还可以选择将机器人安装到“个人”范围内。正如这所暗示的那样,他们没有将机器人安装到实际的团队中 - 这就是您没有收到团队 ID 的原因。它没有坏——它是完全正确的。
如果您不希望您的机器人能够安装在个人范围内,只需在清单中删除该选项(“个人”范围) - 您可以选择,因为这取决于您希望用户做什么能够与你的机器人做。一些机器人仅在团队内部有意义,其他仅在个人范围内,其他仅在群聊或会议中有意义 - 您可以允许您的机器人安装在任何/所有这些相关的。
推荐阅读
- regex - VSCode Snippets:将文件名从 my_file_name 格式化为 MyFileName
- javascript - How to access a nested object inside a function
- javascript - 带有许多专辑的 Bootstrap 灯箱库
- python - 使用 Python 子进程时,为什么 Ctrl-C 不会产生与 kill -2 相同的行为?
- html - 如何覆盖被其他类/元素深度嵌套的元素样式?
- arrays - 如何在 Swift 中设置数组
- javascript - 在plotly js中更改z索引标签
- linked-list - 链表声明中的比较器
- c++ - 强制在编译时编译一个 constexpr 函数,即使里面的计算包含一个非常量数组,通过使返回的 obj 成为常量?
- python - 重新安装 Anaconda:导入旧环境