/// <summary> /// Выполнить команду /// </summary> protected override async Task InternalExecute(Channel channel, StasisStartEventArgs args) { if (!(args is RecordingEventArgs eventArgs)) { throw new ArgumentException($"RecordingStartedCommand. Incorrect argument type {nameof(args)}"); } try { var audioRecord = await AudioRecordRepository.GetRecordByName(eventArgs.RecordName); if (audioRecord != null) { audioRecord.RecordingStartTime = eventArgs.EventTime; await AudioRecordRepository.UpdateRecord(audioRecord); } else { Logger.Warning($"RecordingStartedCommand. AudioRecord not found. RecordName: {eventArgs.RecordName}."); } } catch (Exception ex) { Logger.Warning("RecordingStartedCommand.Error.", ex); } }
/// <summary> /// Выполнить команду /// </summary> protected override async Task InternalExecute(Channel channel, StasisStartEventArgs args) { if (!(args is RecordingEventArgs eventArgs)) { throw new ArgumentException($"RecordingEndedCommand. Incorrect argument type {nameof(args)}"); } try { var audioRecord = await AudioRecordRepository.GetRecordByName(eventArgs.RecordName); if (audioRecord == null || audioRecord.RecordingStartTime.HasValue == false) { Logger.Warning($"Record with name {eventArgs.RecordName} not found"); return; } Logger.Information($"Audio record created. RecordName: {eventArgs.RecordName};"); await _queueSender.Publish(new AudioRecordedIntegrationEvent { LineId = audioRecord.LineId, CallId = audioRecord.CallId, FileName = $"{eventArgs.RecordName}.{AsteriskAriClient.RecordingFormat}", RecordingStartTime = audioRecord.RecordingStartTime.Value, RecordingEndTime = eventArgs.EventTime }); audioRecord.RecordingEndTime = eventArgs.EventTime; await AudioRecordRepository.UpdateRecord(audioRecord); } catch (Exception ex) { Logger.Warning("RecordingEndedCommand.Error.", ex); } }
/// <summary> /// Начать запись канала /// </summary> protected async Task <Result> StartRecordingChannel(string snoopChannelId, Guid callId, Guid?lineId) { if (!_asteriskOptions.RecordingEnabled) { return(Result.Failure(ErrorCodes.RecordingError)); } var audioRecord = new AudioRecord { CallId = callId, LineId = lineId, FileName = snoopChannelId }; await AudioRecordRepository.AddAudioRecord(audioRecord); var result = await AriClient.StartRecordingChannel(snoopChannelId); if (result.IsFailure) { Logger.Warning($"StartRecordingChannel. Could not start recording channel. CallId: {callId}"); return(result); } Logger.Information($"StartRecordingChannel. Channel recording started. {snoopChannelId}"); return(Result.Success()); }
/// <summary> /// Начать запись разговора /// </summary> protected async Task StartCallRecording(string initialChannelId, Guid initialCallId, string extension, ChannelRoleType role, string mainBridgeId, Guid?lineId = null) { if (!_asteriskOptions.RecordingEnabled) { return; } var recordsBridgeId = GetCommonRecordingBridgeId(mainBridgeId); var fullAudioRecord = new AudioRecord { FileName = $"{recordsBridgeId}", LineId = lineId, CallId = null }; await AudioRecordRepository.AddAudioRecord(fullAudioRecord); await AriClient.CreateBridge(recordsBridgeId); await AddChannelToCommonRecordingBridge(initialChannelId, extension, role, mainBridgeId, initialCallId, lineId); var result = await AriClient.StartRecordingBridge(recordsBridgeId); if (result.IsFailure) { Logger.Warning($"StartCallRecording. Failed to start call recording. MainBridgeId: {mainBridgeId}"); return; } await CreateSnoopChannelForRecording(initialChannelId, extension, role, false, initialCallId, lineId); Logger.Information($"StartRecordingBridge. Bridge recording started. {mainBridgeId}"); }
private async Task DestroyRecordingBridge(string bridgeId) { var commonRecordsBridgeId = GetCommonRecordingBridgeId(bridgeId); var audioRecordCommon = await AudioRecordRepository.GetRecordByName(commonRecordsBridgeId); if (audioRecordCommon == null) { return; } var recordingBridgeId = GetCommonRecordingBridgeId(bridgeId); AriClient.DestroyBridge(recordingBridgeId); }
private async Task UpdateAudioRecords(string mainBridgeId, Guid initCallId, Guid?lineId) { var commonBridgeId = GetCommonRecordingBridgeId(mainBridgeId); var audioRecord = await AudioRecordRepository.GetRecordByName(commonBridgeId); if (audioRecord != null) { audioRecord.LineId = lineId; await AudioRecordRepository.UpdateRecord(audioRecord); } var initCallRecord = await AudioRecordRepository.GetRecordByCallId(initCallId); if (initCallRecord != null) { initCallRecord.LineId = lineId; await AudioRecordRepository.UpdateRecord(initCallRecord); } }