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

使用Microsoft Graph API发起Teams语音呼叫遇内部服务器错误排查

问题描述

尝试通过Microsoft Graph API实现Teams用户间的语音呼叫(模拟Teams原生呼叫逻辑),执行代码时触发Internal Server Error。已确认graphClient可正常执行其他查询操作,Azure应用权限配置包含Calls.Initiate.All、Calls.AccessMedia.All等应用权限且已授予管理员同意。

实现代码

var requestBody = new Call
{
    OdataType = "#microsoft.graph.call",
    CallbackUri = "https://bot.contoso.com/callback",
    Targets = new List<InvitationParticipantInfo>
    {
        new InvitationParticipantInfo
        {
            OdataType = "#microsoft.graph.invitationParticipantInfo",
            Identity = new IdentitySet
            {
                OdataType = "#microsoft.graph.identitySet",
                User = new Identity
                {
                    OdataType = "#microsoft.graph.identity",
                    DisplayName = response.DisplayName,
                    Id = response.Id,
                },
            },
        },
    },
    RequestedModalities = new List<Modality?>
    {
        Modality.Audio,
    },
    CallOptions = new OutgoingCallOptions
    {
        OdataType = "#microsoft.graph.outgoingCallOptions",
        IsContentSharingNotificationEnabled = true,
    },
    MediaConfig = new ServiceHostedMediaConfig
    {
        OdataType = "#microsoft.graph.serviceHostedMediaConfig",
    },
};
var result = await graphClient.Communications.Calls.PostAsync(requestBody);
排查方向与解决方案

1. 验证CallbackUri有效性

  • 确保CallbackUri是可公开访问的HTTPS地址,且能正确响应Graph API的POST回调请求(需处理notification类型请求)。Graph API会在发起呼叫前验证地址可达性,若回调地址无法访问或响应不符合要求,会触发内部错误。
  • 用工具测试回调地址是否能接收POST请求并返回200 OK状态码。

2. 检查权限配置完整性

  • 补充User.Read.All权限,用于读取目标用户的身份信息,确保response.Id和response.DisplayName为有效标识。
  • 重新确认管理员同意是否生效,部分场景下权限显示已授予但实际生效有延迟,可重新授予一次。

3. 完善请求体参数

  • ServiceHostedMediaConfig需指定PreFetchMedia数组(即使为空),缺少该参数可能导致服务端错误,修改代码如下:
    MediaConfig = new ServiceHostedMediaConfig
    {
        OdataType = "#microsoft.graph.serviceHostedMediaConfig",
        PreFetchMedia = new List<MediaInfo>()
    },
    
  • 确认response.Id是目标用户的Azure AD对象ID,而非Teams用户ID或其他标识,Graph API要求使用Azure AD用户ID发起呼叫。

4. 补充应用注册配置

  • 在Azure应用注册的「集成」>「Teams」页面添加Teams通道配置,部分呼叫场景需依赖该配置支持。
  • 确保应用已配置至少一个重定向URI(公共客户端或Web类型),即使是后台调用,部分权限场景下仍需此配置。

5. 获取详细错误日志

  • 启用Graph API日志记录,获取更具体的错误信息:
    graphClient.HttpProvider.EnableHttpLogging = true;
    
  • 查看Azure AD的审核日志和应用日志,定位对应请求的错误详情,内部服务器错误通常包含具体原因(如权限不足、参数无效、回调失败等)。

内容的提问来源于stack exchange,提问作者Adalid Bori Palma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:00:02