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