/// <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); }
/// <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"); }