/// <inheritdoc /> protected override async Task InternalExecute(Channel channel, StasisStartEventArgs args) { var routeData = args.RouteData; if (!routeData.LineId.HasValue) { return; } await AriClient.Answer(channel.Id); await InitializeRecordingChannel(channel.Id, routeData.ToExtension, ChannelRoleType.Conference, args.BridgeId, routeData.ToCallId, routeData.LineId); var bridge = await AriClient.GetBridge(args.BridgeId); await AriClient.AddChannelToBridge(bridge.Id, channel.Id); await SnoopChannelByAllAssistantsChannels(channel.Id, routeData.ToExtension, ChannelRoleType.Conference, routeData.ToCallId, args); Logger.Information($"Channel added to call in conference mode. ChannelId: {channel.Id}. CallId: {routeData.ToCallId}"); var channelForIncomingCall = await ChannelRepository.GetChannelForIncomingCall(routeData.LineId.Value); if (channelForIncomingCall != null && channelForIncomingCall.Interrupted) { channelForIncomingCall.Interrupted = false; await ChannelRepository.UpdateChannel(channelForIncomingCall); } var channelEntity = new DAL.Entities.Channel { ChannelId = channel.Id, BridgeId = args.BridgeId, CallId = routeData.ToCallId, Extension = routeData.ToExtension, Role = ChannelRoleType.Conference, LineId = routeData.LineId }; await ChannelRepository.AddChannel(channelEntity); }
/// <summary> /// Создать главный бридж, добавить туда канал, включить приветствие ожидания и начать запись /// </summary> private async Task <string> InitializeMainBridge(string channelId, string callerExtension, Guid initialCallId) { try { await AriClient.Answer(channelId); var mainBridge = await AriClient.CreateBridge(); await AriClient.AddChannelToBridge(mainBridge.Id, channelId); await StartCallRecording(channelId, initialCallId, callerExtension, ChannelRoleType.ExternalChannel, mainBridge.Id); await AriClient.StartMohInBridgeAsync(mainBridge.Id); Logger.Information($"InitializeMainBridge. Channel {channelId} added to bridge {mainBridge.Id}"); return(mainBridge.Id); } catch (Exception ex) { Logger.Warning($"InitializeMainBridge Error. {ex.Message}.", ex); return(null); } }