Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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));
        }