/// <summary> /// Создать snoop-копию канала /// </summary> protected async Task InitializeSnoopChannel( string agentChannelId, string agentExtension, ChannelRoleType agentRole, Guid agentCallId, string destinationBridgeId, StasisStartEventArgs startEventArgs, SnoopBridgeType bridgeType, bool channelForSpeak = false) { var whisper = GetWhisperForSnoop(bridgeType, channelForSpeak); var spy = GetSpyForSnoop(bridgeType, channelForSpeak); var snoopChannelId = GetSnoopChannelId(agentRole, agentExtension) + $"_spy-{spy}_whisper-{whisper}"; startEventArgs.RouteData.ToExtension = agentExtension; startEventArgs.RouteData.ToCallId = agentCallId; var snoopArgs = new StasisStartEventArgs { EventType = channelForSpeak ? StasisStartEventType.AddToSpeakSnoopBridge : StasisStartEventType.AddToSnoopBridge, ChannelId = snoopChannelId, BridgeId = destinationBridgeId, RouteData = startEventArgs.RouteData, OriginalChannelId = agentChannelId }; var encodedArgs = JsonSerializer.EncodeData(snoopArgs); await AriClient.SnoopChannel(agentChannelId, spy, whisper, encodedArgs, snoopChannelId); }
/// <summary> /// Создать snoop-копию канала для записи /// </summary> /// <param name="channelId">Идентификатор исходного канала</param> /// <param name="extension">Номер</param> /// <param name="role">Роль канала</param> /// <param name="forCommonRecord">Признак того, что копия канала создана для записи разговора всех участников в один файл</param> /// <param name="callId">Идентификатор звонка</param> /// <param name="lineId">Идентификатор линии</param> /// <returns>SnoopChannelId</returns> private async Task <Result <string> > CreateSnoopChannelForRecording( string channelId, string extension, ChannelRoleType role, bool forCommonRecord, Guid callId, Guid?lineId) { if (!_asteriskOptions.RecordingEnabled) { return(Result.Failure(ErrorCodes.RecordingError)); } var routeData = new RouteCallDto { ToCallId = callId, LineId = lineId }; var snoopChannelId = GetSnoopChannelIdForRecord(role, extension); var snoopArgs = new StasisStartEventArgs { EventType = StasisStartEventType.IgnoreStasisEvent, ChannelId = snoopChannelId, OriginalChannelId = channelId, RouteData = routeData }; var encodedArgs = JsonSerializer.EncodeData(snoopArgs); await AriClient.SnoopChannel(channelId, "in", "none", encodedArgs, snoopChannelId); if (forCommonRecord) { return(Result.Success(snoopChannelId)); } var recordingResult = await StartRecordingChannel(snoopChannelId, callId, lineId); if (recordingResult.IsFailure) { Logger.Information($"CreateSnoopChannelForRecording. StartRecordingChannelError: {recordingResult.ErrorMessage}"); return(Result.Failure(ErrorCodes.RecordingError)); } return(Result.Success(snoopChannelId)); }