Example #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);
        }
Example #2
0
        /// <summary>
        /// Получение атрибута, отвечающего за возможность канала говорить в бридже
        /// </summary>
        /// <param name="bridgeType">Тип snoop-бриджа</param>
        /// <param name="channelForSpeak">Канал может только говорить в бридж</param>
        /// <returns>in - канал будут слышать другие участники бриджа, none - канал "немой"</returns>
        private static string GetSpyForSnoop(SnoopBridgeType bridgeType, bool channelForSpeak)
        {
            if (bridgeType == SnoopBridgeType.Listen || channelForSpeak)
            {
                return("in");
            }

            return("none");
        }