Exemple #1
0
        /// <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);
            }
        }