View Only
Discussion Thread View

What is the correct way to watch the interactions in a conference?

  • 1.  What is the correct way to watch the interactions in a conference?

    Posted 12-05-2017 23:58
    I have a watcher that is watching MyInteractions and I am able to store the interaction object in my cookie... Everything works fine as expected. However, when a conference is created, it seems that the parties that are in the conference are not longer watched since they probably no longer owned by me. So if I want to mute/unmute or hold/unhold a single party in the conference, my queue won't be aware of that change. What is the correct way to watch all parties in a conference? Here is how I watch my queue protected void WatchMyInteractions() { var interactionManager = GetInteractionManager(); QueueId queueId = new QueueId(QueueType.MyInteractions, "my-username"); InteractionQueue _interactionQueue = new InteractionQueue(interactionManager, queueId); // Individual interaction and conference interaction adds/removes/changes can be received, // as an alternative to the "batching" of QueueContentsChanged. // (If there is a QueueContentsChanged event handler, then the individual added/removed/changed events will not be fired.) _interactionQueue.InteractionAdded += QueueInteractionAdded; _interactionQueue.InteractionChanged += QueueInteractionChanged; _interactionQueue.InteractionRemoved += QueueInteractionRemoved; _interactionQueue.ConferenceInteractionAdded += QueueConferenceAdded; _interactionQueue.ConferenceInteractionChanged += QueueConferenceChanged; _interactionQueue.ConferenceInteractionRemoved += QueueConferenceRemoved; _interactionQueue.LostRights += QueueLostRights; _interactionQueue.StartWatching(GetAttributes()); } protected string[] GetAttributes() { return string[] { InteractionAttributeName.CallIdKey, InteractionAttributeName.InteractionId, InteractionAttributeName.InteractionType, InteractionAttributeName.RemoteAddress, InteractionAttributeName.RemoteName, InteractionAttributeName.RemoteId, InteractionAttributeName.State, InteractionAttributeName.Direction, InteractionAttributeName.StateDescription, InteractionAttributeName.Capabilities, InteractionAttributeName.Muted, InteractionAttributeName.ConferenceId, InteractionAttributeName.CallType, InteractionAttributeName.Recorders, InteractionAttributeName.SupervisorRecorders, InteractionAttributeName.LocalId, InteractionAttributeName.LocalName, InteractionAttributeName.StationQueueNames, "Eic_CallState", "Eic_State", "Eic_IRRecordingId", "Eic_ConferenceMembers", }; } This is how I create a conference, the interactionIds are identified using a checkbox. so when the user select more than 1 interactionId, I send these Ids to the server. public JsonpResult MakeConference(IEnumerable<long> interactionIds) { var resource = new ConferenceResource(); try { List<Interaction> interactions = new List<Interaction>(); foreach (long interactionId in interactionIds) { var interaction = GetInteraction(interactionId); if (interaction != null) { interactions.Add(interaction); } } if (interactions.Any()) { var conference = GetInteractionManager().MakeNewConference(interactions.ToArray()); resource.ConferenceId = conference.ConferenceId.Id; resource.InteractionIds = interactions.Select(x => x.InteractionId.Id).ToList(); resource.IsSuccess = true; resource.HttpCode = 200; } else { throw new Exception("No interactions were provided!"); } } catch (Exception ex) { resource.Error = ex.Message; resource.InnerError = (ex.InnerException == null) ? "" : ex.InnerException.ToString(); resource.HttpCode = (int)System.Net.HttpStatusCode.SeeOther; } return new JsonpResult(resource); }