MS Teams机器人个人作用域安装时获取teamId的相关问题咨询
问题1解答
这是MS Teams的默认机制,不属于配置遗漏。
个人作用域的机器人安装本质是创建用户与机器人的1对1独立对话上下文,该实例完全归属于用户个人,和租户内的任何团队都没有绑定关系,自然不存在teamId相关字段。你在个人安装时收到的conversationUpdate事件channelData为空是正常表现,只有当机器人被安装到团队/频道的团队作用域下时,事件才会携带团队相关信息。
问题2解答
没有办法让个人作用域安装时也在conversationUpdate事件中返回team对象,因为个人安装的应用实例逻辑上没有所属团队,不符合数据返回的前提。针对你遇到的场景矛盾,可采用以下三种解决方案:
- 同时开启个人和团队作用域,在个人作用域的欢迎消息中主动引导用户先将机器人添加到指定团队,等用户完成团队安装、你收到携带teamId的事件后,再为用户提供频道、成员列表的查询功能。
- 仅保留团队作用域,调整应用的使用引导:只配置团队作用域的应用本身就不会在个人应用列表中展示,你可以引导用户从团队的「添加应用」入口搜索应用,该场景下可以正常检索到仅配置了团队作用域的应用。
- 若业务要求必须在个人应用内展示所有用户相关的团队数据,可申请Graph API对应的
Team.ReadBasic.All、TeamsAppInstallation.ReadForTeam.All权限,通过用户的AAD身份拉取其加入的所有团队列表,再逐个校验团队是否安装了你的机器人,最后拉取对应团队的频道、成员数据,不需要依赖安装事件的teamId。
另外补充代码优化点:不要写死请求的serviceUrl地址,不同区域、不同租户的serviceUrl存在差异,建议直接复用conversationUpdate事件返回的serviceUrl字段发起请求,避免跨区域调用失败。
内容的提问来源于stack exchange,提问作者Harkirat Saluja
相关产品推荐
相关产品推荐

