You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Bot Framework消息扩展查询中获取用户邮箱

解决方案

警告说明

你收到的source is not a known attribute of class <class 'botbuilder.schema.teams._models_py3.TeamsChannelData'> and will be ignored属于非致命警告,不会影响功能正常运行:该警告是因为Teams平台推送的活动数据包中包含SDK预定义模型没有收录的source字段,仅做提示作用。如果不想看到该警告,只需调整日志级别,过滤掉botbuilder.schema模块的WARNING级别的日志即可。

代码问题排查

你误以为_show_members方法未被调用,实际是该方法没有设置返回值,所以print(await self._show_members(turn_context))只会打印None,产生方法未触发的错觉。

正确获取用户邮箱的实现

通过TeamsInfo.get_member获取到的成员对象本身就包含email属性,直接读取即可,修正后的代码如下:

class SearchBasedMessagingExtension(TeamsActivityHandler):

    async def _get_user_email(self, turn_context: TurnContext ):
        # 根据用户ID拉取成员信息
        member = await TeamsInfo.get_member(turn_context, turn_context.activity.from_property.id)
        return member.email

    async def on_teams_messaging_extension_query(self, turn_context: TurnContext, query: MessagingExtensionQuery):
        search_query = str(query.parameters[0].value).strip()
        if search_query == "":
            await turn_context.send_activity(MessageFactory.text("You cannot enter a blank string for the search"))
            return
        
        # 获取并打印用户邮箱
        user_email = await self._get_user_email(turn_context)
        print(f"用户邮箱:{user_email}")
        print(turn_context.activity.from_property.id)

        # 后续你的搜索业务逻辑

其他可选获取邮箱的方式

如果需要获取更完整的用户属性,可以为机器人配置SSO权限,调用Microsoft Graph接口拉取用户资料,但仅需获取邮箱的场景下,上述TeamsInfo.get_member方案是最简实现,无需额外申请接口权限。

内容的提问来源于stack exchange,提问作者disn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:15:01