使用ACS Video Call Recording API遇8527错误:无效加入标识
解决Azure Communication Services录制API错误码8527:Invalid join identity, cannot join call
以下是针对你遇到的问题的排查和解决方案:
检查Server Call ID的有效性
你提供的示例Call ID34117f27-6459-4826-9v44-756rdde1c313不符合UUID规范——UUID仅允许0-9、a-f(小写)字符,这里出现了非法字符v。确认你传递的serverCallId是正确的Server Call ID(而非Call Connection ID),且格式严格匹配UUID标准。验证CallClient的权限配置
录制API需要服务级别的权限,确保:- 在Azure门户中,为你的ACS资源关联的Azure AD应用分配
Communication Call Recording Contributor角色; - 初始化
CallClient时使用的Azure AD凭据,其令牌范围设置为https://communication.azure.com/.default,且令牌包含CommunicationCallRecording权限。
- 在Azure门户中,为你的ACS资源关联的Azure AD应用分配
区分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
相关产品推荐
相关产品推荐

