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

使用ACS Video Call Recording API遇8527错误:无效加入标识

解决Azure Communication Services录制API错误码8527:Invalid join identity, cannot join call

以下是针对你遇到的问题的排查和解决方案:

  • 检查Server Call ID的有效性
    你提供的示例Call ID 34117f27-6459-4826-9v44-756rdde1c313 不符合UUID规范——UUID仅允许0-9、a-f(小写)字符,这里出现了非法字符v。确认你传递的serverCallId是正确的Server Call ID(而非Call Connection ID),且格式严格匹配UUID标准。

  • 验证CallClient的权限配置
    录制API需要服务级别的权限,确保:

    1. 在Azure门户中,为你的ACS资源关联的Azure AD应用分配Communication Call Recording Contributor角色;
    2. 初始化CallClient时使用的Azure AD凭据,其令牌范围设置为https://communication.azure.com/.default,且令牌包含CommunicationCallRecording权限。
  • 区分Call Connection ID与Server Call ID
    代码中的_callConnectionId和_serverCallId是完全不同的标识:

    • Call Connection ID是客户端创建通话时生成的短标识;
    • Server Call ID是ACS服务端生成的UUID格式ID,录制API仅接受后者。
      检查你是否误将Call Connection ID传入serverCallId参数,或者代码中_callConnectionId对应的通话已处于断开状态。
  • 确认通话状态
    调用录制API前,通过GetCallConnectionProperties接口验证通话的Status是否为Connected——只有处于活跃连接状态的通话才能启动录制。

  • 添加格式验证逻辑
    可以在代码中增加Server Call ID的格式校验,提前拦截无效输入:

    [HttpGet("StartRecording")]
    public async Task<IActionResult> StartRecordingAsync([FromQuery] string serverCallId)
    {
        try
        {
            _serverCallId = serverCallId ?? _client.GetCallConnection(_callConnectionId).GetCallConnectionProperties().Value.ServerCallId;
    
            // 验证Server Call ID格式
            if (!Guid.TryParse(_serverCallId, out Guid parsedServerCallId))
            {
                return BadRequest("Invalid Server Call ID format. Must be a valid UUID.");
            }
    
            StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator(_serverCallId))
            {
                RecordingContent = RecordingContent.Audio,
                RecordingChannel = RecordingChannel.Unmixed,
                RecordingFormat = RecordingFormat.Wav,
            };
    
            var callRecording = _client.GetCallRecording();
            var response = await callRecording.StartAsync(recordingOptions).ConfigureAwait(false);
    
            _recordingId = response.Value.RecordingId;
            return Ok($"RecordingId: {_recordingId}");
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:25:00