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

能否通过Microsoft Graph API获取外部Teams通话参与者邮箱?

如何获取Teams通话记录中外部租户参与者的邮箱

Hey there! I’ve tackled similar scenarios with Microsoft Graph and Teams call records, so let’s break down what you can try here. First off, you’re right—by default, Graph restricts cross-tenant user data access, so calling /users/{externalId} directly won’t work for users outside your tenant. But there are a few workarounds and checks you can make:

1. 深挖通话记录的完整响应

Graph Beta端点返回的通话记录有时会包含比你示例中更多的字段。拿到具体的通话记录ID后,用Graph Explorer调用以下接口获取完整详情:

GET https://graph.microsoft.com/beta/communications/callRecords/{callRecordId}

重新检查participants数组中的用户对象,看看有没有userPrincipalName或mail这类在你初始解析中被遗漏的字段。Beta端点通常会包含一些在截断响应中看不到的额外元数据。

2. 利用跨租户访问设置(适用于B2B协作场景)

如果外部用户来自与你租户有B2B协作关系的租户,你可以配置权限来获取他们的基本信息:

  • 在Azure AD门户中,进入跨租户访问设置,创建一个允许你的应用读取外部租户用户数据的策略
  • 确保你的应用拥有User.ReadBasic.All应用权限(需要管理员同意)
  • 配置完成后,尝试调用:
    GET https://graph.microsoft.com/beta/users/{externalId}?$select=mail,userPrincipalName
    

不过这个方法的前提是外部租户也同意与你的租户共享用户数据。

3. 检查关联的会议或聊天记录(适用于Teams会议通话)

如果这个通话是Teams会议的一部分,你可以通过关联数据获取参与者的邮箱:

  • 从通话记录中提取onlineMeetingId,然后调用接口获取会议详情:
    GET https://graph.microsoft.com/beta/communications/onlineMeetings/{onlineMeetingId}
    
  • 查看会议对象中的participants列表,或者通过chatInfo关联的聊天记录——会议邀请中通常会包含参与者的邮箱信息,可能会存储在这里。
    注意:这个方法需要你的应用拥有OnlineMeeting.Read.All或Chat.Read.All权限。

4. 备选方案:使用组合标识

如果以上方法都不可行,你可以用已有的数据为工单系统创建一个清晰的标识:显示名称+租户ID。比如显示为External User (Tenant: hisTenant)——即使没有邮箱,这样也能区分不同的外部用户。

总结

如果没有现成的跨租户协作协议,直接获取外部用户的邮箱确实有难度。先从验证完整通话记录响应开始,再看看B2B权限配置是否可行。如果所有方法都失效,组合标识是工单系统的可靠替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:22:33