Teams Botbuilder中conversation.aadObjectId为空如何解决?
Bot中conversation.aadObjectId为null的解决办法
问题说明
我们有一款已发布的应用,正在开发需要用户及会话aadObjectId的新功能,但Bot接收消息时,conversation.aadObjectId始终返回null。尝试添加RSC权限后问题仍未解决,会话数据示例如下:
.... "serviceUrl": "https://smba.trafficmanager.net/emea/", "conversation": { "id": "a:1Cohygr ... trunkated ... TscZ", "tenantId": "5df90000-0000-0000-0000-00000000c656", "conversationType": "personal", "aadObjectId": null # 为什么是null? } ....
原因及解决方案
- 个人会话的特性限制:当前会话类型是
personal(个人会话),这类场景下conversation.aadObjectId字段本身就不会返回有效值——这个字段仅针对团队(team)或频道(channel)类型的会话。如果需要获取用户的AAD对象ID,直接读取from.aadObjectId字段即可,该字段在个人会话中是稳定可用的。 - 权限配置方向错误:如果是团队/频道会话下仍出现null,注意RSC权限并非解决此问题的正确选项,需检查以下应用权限:
- 确保已添加
Channel.ReadBasic.All或Group.Read.All应用权限 - 确认权限已完成管理员同意,且Bot的服务主体已成功获取权限
- 确保已添加
- 团队会话的替代获取方式:若在团队/频道场景下确实需要会话对应的AAD对象ID,可通过解析会话ID获取团队ID,再调用Microsoft Graph API的
/teams/{team-id}接口获取团队的aadGroupId(即会话的AAD对象ID)。会话ID格式通常为19:{team-id}@thread.tacv2,提取中间的team-id部分即可。
验证步骤
- 先确认会话类型:如果是
personal,直接改用from.aadObjectId获取用户AAD ID - 团队/频道会话场景下,核对权限配置是否正确并完成管理员同意
- 调用Graph API测试能否正常获取团队的AAD对象ID
内容的提问来源于stack exchange,提问作者Oleksa
相关产品推荐
相关产品推荐

