Results 1 to 2 of 2

Thread: Why the QueueInteractionAdded event handles waits until the recipient picks up?

  1. #1
    Join Date
    Apr 2016
    Posts
    33

    Why the QueueInteractionAdded event handles waits until the recipient picks up?

    I am trying to use the IceLib in a Asp.Net MVC 5 Environment. So far, I am able to interact with the interaction successful. With an issue in the queue watching process.

    To watch my queue, I create a WebSocket connection between the browser and the server using SignalR package. Inside my SignalR Hub, I call the following code when the client connects to the server so when a interaction is added, changes or removed from the queue, the browser is notified.


    Code:
            private void WatchMyInteractions(ViewCompanyServer dialerServer)
            {
                var interactionManager = GetInteractionManager(ConnectionManager);
    
                QueueId queueId = new QueueId(QueueType.MyInteractions, GetIdentity.Name);
                InteractionQueue _interactionQueue = new InteractionQueue(interactionManager, queueId);
    
                _interactionQueue.InteractionAdded += QueueInteractionAdded;
                _interactionQueue.InteractionChanged += QueueInteractionChanged;
                _interactionQueue.InteractionRemoved += QueueInteractionRemoved;
                _interactionQueue.StartWatching(GetAttributes());
            }
    
    
            public void QueueInteractionAdded(object sender, InteractionAttributesEventArgs e)
            {
                // This line sends the interaction attributes to the browser
                SendInteraction(e.Interaction, "Added"); // PROBLEM - this code hangs until the recipient pick up before the message is sent to the browser.
            }
    
            public void QueueInteractionChanged(object sender, InteractionAttributesEventArgs e)
            {
                // This line sends the interaction attributes to the browser
                SendInteraction(e.Interaction, "Changed");
            }
    
            public void QueueInteractionRemoved(object sender, InteractionEventArgs e)
            {
                // This line sends the interaction attributes to the browser
                SendInteraction(e.Interaction, "Removed");
            }
    
            protected void SendInteraction(Interaction interaction, string type)
            {
                if (interaction != null)
                {
                    // This just create a new GenericModel with the attributes that are being watched.
                    var obj = new InteractionQueueGenericModel(interaction, type);
                    
    
                    // This line converts the object to json then send it to the browser.
                    Clients.User(GetIdentity.Name).updatePhone(JsonConvert.SerializeObject(obj));
                }
            }
    However, I am running into a problem when making the call while watching my Queue. When the call is made using the code below, the application waits/hangs until the other-party/recipient picks up before the `SendInteraction(e.Interaction, "Added")` is processed. So the browser, won't know that a call is being made "or the it does not know that e.Interaction.State == "Proceeding" " until after the SendInteraction() method is called.

    In another words, the `QueueInteractionAdded()` method gets called, but it hang on the `SendInteraction()` line until the other party picks up before the message is sent to the browser. Then after that, any change to the interaction the user is notified correctly.

    I currency make my calls using following code
    Code:
    InteractionsManager.GetInstance(session).MakeCall(new CallInteractionParameters("800-000-4444"));
    How can I prevent the app from having to wait on the `SendInteraction(e.Interaction, "Added")` line?


    What am I doing wrong here?

  2. #2
    Join Date
    Apr 2016
    Posts
    33
    I think I figured out how to get it to work without having to wait, but not sure the exact cause!

    It seems that one of more of the following attributes takes a while to get populated which cause the app to take a while.

    Code:
    private static readonly string[] _WatchedAttributes = {
                                                                      
                                                                      InteractionAttributeName.RemoteAddress,
                                                                      InteractionAttributeName.RemoteName,
                                                                      InteractionAttributeName.RemoteId,
                                                                      InteractionAttributeName.Direction,
                                                                      InteractionAttributeName.CallType,
                                                                      InteractionAttributeName.StateDescription,
                                                                      InteractionAttributeName.Muted,
                                                                      InteractionAttributeName.ConferenceId,
                                                                      InteractionAttributeName.LocalId,
                                                                      InteractionAttributeName.LocalName,
                                                                      "Eic_CallState"
    
                                                                  }
    So to get this to work, I only accessed the following properties on the `QueueInteractionAdded` event CallIdKey, InteractionId.Id, State and Direction.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •