コード例 #1
0
        /// <summary>
        /// Agents the logout.
        /// </summary>
        /// <param name="proxyId">The proxy identifier.</param>
        /// <returns></returns>
        public OutputValues AgentLogout(int proxyId)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestAgentLogout requestAgentlogout = RequestAgentLogout.Create();
                requestAgentlogout.ProxyClientId = proxyId;

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestAgentlogout);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAgentLogout = (EventAck)message;
                            logger.Info("-------------AgentLogout----------------");
                            logger.Info("ProxyClientId    :" + proxyId);
                            logger.Info("Name    :" + eventAgentLogout.Name.ToString());
                            logger.Info("----------------------------------------");
                            logger.Trace(eventAgentLogout.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Agent Logout Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError            = (EventError)message;
                            string     LoginErrorCode        = Convert.ToString(eventError.ErrorCode);
                            string     LoginErrorDescription = Convert.ToString(eventError.ErrorDescription);
                            logger.Trace(eventError.ToString());
                            output.ErrorCode   = eventError.ErrorCode;
                            output.MessageCode = "2002";
                            output.Message     = "AgentLogout() : " + LoginErrorDescription;
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Agent Logout UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("AgentLogout() : Interaction Server Protocol is Null..");
                }
            }
            catch (Exception commonException)
            {
                logger.Error("Error occurred while Agent Logout request " + commonException.ToString());
                output.MessageCode = "2001";
                output.Message     = commonException.Message;
            }
            return(output);
        }
コード例 #2
0
ファイル: ModuleHolder.cs プロジェクト: RapidScada/scada-v6
 /// <summary>
 /// Calls the OnEventAck method of the modules.
 /// </summary>
 public void OnEventAck(EventAck eventAck)
 {
     lock (moduleLock)
     {
         foreach (ModuleLogic moduleLogic in logicModules)
         {
             try
             {
                 moduleLogic.OnEventAck(eventAck);
             }
             catch (Exception ex)
             {
                 log.WriteError(ex, ServerPhrases.ErrorInModule, nameof(OnEventAck), moduleLogic.Code);
             }
         }
     }
 }
コード例 #3
0
        /// <summary>
        /// Acknowledges the event.
        /// </summary>
        public void AckEvent(EventAck eventAck)
        {
            if (eventAck == null)
            {
                throw new ArgumentNullException(nameof(eventAck));
            }

            RestoreConnection();

            DataPacket request = CreateRequest(FunctionID.AckEvent);
            int        index   = ArgumentIndex;

            CopyInt64(eventAck.EventID, outBuf, ref index);
            CopyTime(eventAck.Timestamp, outBuf, ref index);
            CopyInt32(eventAck.UserID, outBuf, ref index);
            request.BufferLength = index;

            SendRequest(request);
            ReceiveResponse(request);
        }
コード例 #4
0
        /// <summary>
        /// Acknowledges the event.
        /// </summary>
        private void AckEvent(ConnectedClient client, DataPacket request, out ResponsePacket response)
        {
            byte[] buffer = request.Buffer;
            int    index  = ArgumentIndex;

            EventAck eventAck = new EventAck
            {
                EventID   = GetInt64(buffer, ref index),
                Timestamp = GetTime(buffer, ref index),
                UserID    = GetInt32(buffer, ref index)
            };

            if (eventAck.UserID <= 0)
            {
                eventAck.UserID = client.UserID;
            }

            coreLogic.AckEvent(eventAck);
            response = new ResponsePacket(request, client.OutBuf);
        }
コード例 #5
0
ファイル: BasicEAL.cs プロジェクト: RapidScada/scada-v6
        /// <summary>
        /// Acknowledges the event.
        /// </summary>
        public override void AckEvent(EventAck eventAck)
        {
            EventTable eventTable = GetEventTable(ScadaUtils.RetrieveTimeFromID(eventAck.EventID));
            Event      ev         = eventTable.GetEventByID(eventAck.EventID);

            if (ev != null)
            {
                stopwatch.Restart();
                ev.Ack          = true;
                ev.AckTimestamp = eventAck.Timestamp;
                ev.AckUserID    = eventAck.UserID;

                adapter.FileName = eventTable.FileName;
                adapter.WriteEventAck(ev);
                eventTable.LastWriteTime = File.GetLastWriteTimeUtc(eventTable.FileName);

                stopwatch.Stop();
                arcLog?.WriteAction(ServerPhrases.AckEventCompleted, stopwatch.ElapsedMilliseconds);
            }
        }
コード例 #6
0
 /// <summary>
 /// Acknowledges the event.
 /// </summary>
 public void AckEvent(EventAck eventAck)
 {
     foreach (EventArchiveLogic archiveLogic in eventArchives)
     {
         if (archiveLogic.IsReady)
         {
             try
             {
                 archiveLogic.Lock();
                 archiveLogic.AckEvent(eventAck);
                 archiveLogic.LastWriteTime = DateTime.UtcNow;
             }
             catch (Exception ex)
             {
                 log.WriteError(ex, ServerPhrases.ErrorInArchive, nameof(AckEvent), archiveLogic.Code);
             }
             finally
             {
                 Unlock(archiveLogic);
             }
         }
     }
 }
コード例 #7
0
ファイル: PostgreEAL.cs プロジェクト: RapidScada/scada-v6
        /// <summary>
        /// Acknowledges the event.
        /// </summary>
        public override void AckEvent(EventAck eventAck)
        {
            try
            {
                stopwatch.Restart();
                conn.Open();

                string sql = $"UPDATE {queryBuilder.EventTable} " +
                             "SET ack = true, ack_timestamp = @ackTimestamp, ack_user_id = @ackUserID " +
                             "WHERE event_id = @eventID AND @startTime <= time_stamp AND time_stamp < @endTime";

                DateTime      eventTime = ScadaUtils.RetrieveTimeFromID(eventAck.EventID);
                NpgsqlCommand cmd       = new NpgsqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("ackTimestamp", eventAck.Timestamp);
                cmd.Parameters.AddWithValue("ackUserID", eventAck.UserID);
                cmd.Parameters.AddWithValue("eventID", eventAck.EventID);
                cmd.Parameters.AddWithValue("startTime", eventTime);
                cmd.Parameters.AddWithValue("endTime", eventTime.AddSeconds(1.0));
                int rowsAffected = cmd.ExecuteNonQuery();
                stopwatch.Stop();

                if (rowsAffected > 0)
                {
                    arcLog?.WriteAction(ServerPhrases.AckEventCompleted, eventAck.EventID,
                                        stopwatch.ElapsedMilliseconds);
                }
                else
                {
                    arcLog?.WriteAction(ServerPhrases.AckEventNotFound, eventAck.EventID);
                }
            }
            finally
            {
                conn.Close();
            }
        }
コード例 #8
0
        public void ReceiveEmailEvents(IMessage events)
        {
            try
            {
                if ((Settings.SFDCOptions.SFDCPopupPages != null) && (events != null))
                {
                    this._logger.Info("Agent Email Event : " + events.Name);
                    switch (events.Id)
                    {
                    case EventInvite.MessageId:
                        this._eventInvite           = (EventInvite)events;
                        Settings.EmailProxyClientId = _eventInvite.ProxyClientId;
                        IXNCustomData emailInviteData = new IXNCustomData();
                        emailInviteData.InteractionId        = this._eventInvite.Interaction.InteractionId;
                        emailInviteData.OpenMediaInteraction = this._eventInvite.Interaction;
                        emailInviteData.UserData             = this._eventInvite.Interaction.InteractionUserData;
                        GetEmailData(emailInviteData.InteractionId, emailInviteData);
                        EmailInvite.GetInstance().PopupRecords(emailInviteData, emailInviteData.InteractionType);

                        if ((this._eventInvite.VisibilityMode.ToString() != "Coach") && (this._eventInvite.VisibilityMode.ToString() != "Conference"))
                        {
                        }

                        break;

                    case EventPulledInteractions.MessageId:
                        this._eventPulledInteractions = (EventPulledInteractions)events;
                        if (this._eventPulledInteractions.Interactions.Count == 1)
                        {
                            string             str             = this._eventPulledInteractions.Interactions.AllKeys.GetValue(0).ToString();
                            object[]           kvc             = this._eventPulledInteractions.Interactions.GetValues(str);
                            KeyValueCollection collection      = (KeyValueCollection)kvc[0];
                            IXNCustomData      emailPulledData = new IXNCustomData();
                            emailPulledData.InteractionId = collection["InteractionId"].ToString();
                            GetEmailData(emailPulledData.InteractionId, emailPulledData);
                            if (emailPulledData.IXN_Attributes.TypeId == "Inbound")
                            {
                                emailPulledData.InteractionType = SFDCCallType.InboundEmailPulled;
                            }
                            else if (emailPulledData.IXN_Attributes.TypeId == "Outbound")
                            {
                                emailPulledData.InteractionType = SFDCCallType.OutboundEmailPulled;
                            }
                            EmailPulled.GetInstance().PopupRecords(emailPulledData, emailPulledData.InteractionType);
                        }
                        break;

                    case EventAck.MessageId:
                        this._eventAck = (EventAck)events;
                        if (_eventAck.Extension != null && _eventAck.Extension.ContainsKey("InteractionId") && _eventAck.Extension["InteractionId"] != null)
                        {
                            string type = GetEmailInteractionContent(_eventAck.Extension["InteractionId"].ToString(), "type");
                            if (type.Equals("OutboundNew"))
                            {
                                string ToAddress = GetEmailInteractionContent(_eventAck.Extension["InteractionId"].ToString(), "to");
                                if (!String.IsNullOrEmpty(ToAddress))
                                {
                                    IXNCustomData emailAckData = new IXNCustomData();
                                    emailAckData.InteractionType = SFDCCallType.OutboundEmailSuccess;
                                    emailAckData.InteractionId   = _eventAck.Extension["InteractionId"].ToString();
                                    GetEmailData(emailAckData.InteractionId, emailAckData);
                                    if (IsClick2Email && SFDCHttpServer._emailData.ContainsKey(ToAddress))
                                    {
                                        Settings.ClickToEmailData.Add(_eventAck.Extension["InteractionId"].ToString(), SFDCHttpServer._emailData[ToAddress]);
                                        EmailManager.GetInstance().GetClickToEmailLogs(emailAckData, _eventAck.Extension["InteractionId"].ToString(), SFDCCallType.OutboundEmailSuccess, SFDCHttpServer._emailData[ToAddress], "create");
                                        IsClick2Email = false;
                                    }
                                    else
                                    {
                                        EmailCreate.GetInstance().PopupRecords(emailAckData, SFDCCallType.OutboundEmailSuccess);
                                    }
                                }
                                else
                                {
                                    this._logger.Warn("ReceiveEmailEvents : ToAddress is not found in EventAck");
                                }
                            }
                            else if (type.Equals("OutboundReply"))
                            {
                                string ToAddress = GetEmailInteractionContent(_eventAck.Extension["InteractionId"].ToString(), "to");
                                if (!String.IsNullOrEmpty(ToAddress))
                                {
                                    IXNCustomData outEmailData = new IXNCustomData();
                                    outEmailData.InteractionType = SFDCCallType.OutboundEmailSuccess;
                                    outEmailData.InteractionId   = _eventAck.Extension["InteractionId"].ToString();
                                    GetEmailData(outEmailData.InteractionId, outEmailData);
                                    if (IsClick2Email && SFDCHttpServer._emailData.ContainsKey(ToAddress))
                                    {
                                        Settings.ClickToEmailData.Add(_eventAck.Extension["InteractionId"].ToString(), SFDCHttpServer._emailData[ToAddress]);
                                        EmailManager.GetInstance().GetClickToEmailLogs(outEmailData, _eventAck.Extension["InteractionId"].ToString(), SFDCCallType.OutboundEmailSuccess, SFDCHttpServer._emailData[ToAddress], "create");
                                        IsClick2Email = false;
                                    }
                                    else
                                    {
                                        EmailCreate.GetInstance().PopupRecords(outEmailData, SFDCCallType.OutboundEmailSuccess);
                                    }
                                }
                                else
                                {
                                    this._logger.Warn("ReceiveEmailEvents : ToAddress is not found in EventAck");
                                }
                            }
                        }
                        break;
                    }
                }
            }
            catch (Exception exception)
            {
                this._logger.Error("ReceiveEmailEvents : Error occured while receiving Email events " + exception.ToString());
            }
        }
コード例 #9
0
ファイル: ModuleLogic.cs プロジェクト: RapidScada/scada-v6
 /// <summary>
 /// Performs actions when acknowledging an event.
 /// </summary>
 public virtual void OnEventAck(EventAck eventAck)
 {
 }
コード例 #10
0
        /// <summary>
        /// Agents the login.
        /// </summary>
        /// <param name="agentId">The agent identifier.</param>
        /// <param name="placeId">The place identifier.</param>
        /// <param name="proxyId">The proxy identifier.</param>
        /// <param name="chatMedia">The chat media.</param>
        /// <param name="chatMediaState">State of the chat media.</param>
        /// <param name="tenantId">The tenant identifier.</param>
        /// <returns></returns>
        public OutputValues AgentLogin(string agentId, string placeId, int proxyId, int tenantDBID, Dictionary <string, int> mediaList)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestAgentLogin requestAgentlogin = RequestAgentLogin.Create();
                requestAgentlogin.AgentId       = agentId;
                requestAgentlogin.PlaceId       = placeId;
                requestAgentlogin.ProxyClientId = proxyId;
                requestAgentlogin.MediaList     = new Genesyslab.Platform.Commons.Collections.KeyValueCollection();
                foreach (KeyValuePair <string, int> media in mediaList)
                {
                    requestAgentlogin.MediaList.Add(media.Key, media.Value);
                }
                requestAgentlogin.TenantId = tenantDBID;
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestAgentlogin);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAgentLogin = (EventAck)message;
                            logger.Info("--------------AgentLogin-----------------");
                            logger.Info("AgentId    :" + agentId);
                            logger.Info("PlaceId    :" + placeId);
                            logger.Info("ProxyClientId    :" + proxyId);
                            foreach (KeyValuePair <string, int> media in mediaList)
                            {
                                logger.Info("Media Name   :" + media.Key + "\t Media State  :" + media.Value);
                            }
                            logger.Info("TenantId    :" + requestAgentlogin.TenantId);
                            logger.Info("Name    :" + eventAgentLogin.Name.ToString());
                            logger.Info("----------------------------------------");
                            logger.Trace(eventAgentLogin.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Agent Login Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError            = (EventError)message;
                            string     LoginErrorCode        = Convert.ToString(eventError.ErrorCode);
                            string     LoginErrorDescription = Convert.ToString(eventError.ErrorDescription);
                            logger.Trace(eventError.ToString());
                            output.ErrorCode   = eventError.ErrorCode;
                            output.MessageCode = "2002";
                            output.Message     = LoginErrorDescription;
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2002";
                        output.Message     = "Agent Login UnSuccessful";
                    }
                }
                else
                {
                    output.MessageCode = "2001";
                    output.Message     = "Interaction Server Protocol is Null";
                    logger.Warn("AgentLogin() : Interaction Server Protocol is Null..");
                }
            }
            catch (Exception commonException)
            {
                logger.Error("Error occurred while Agent Login request " + commonException.ToString());
                output.MessageCode = "2001";
                output.Message     = commonException.Message;
            }
            return(output);
        }
コード例 #11
0
        public OutputValues RequestPlaceWorkbin(string interactionId, string agentId,
                                                //string placeId,
                                                string workbin, int proxyId)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                WorkbinInfo workbinInfo = WorkbinInfo.Create();
                workbinInfo.WorkbinAgentId = agentId;
                //  workbinInfo.WorkbinPlaceId = placeId;
                workbinInfo.WorkbinTypeId = workbin;

                RequestPlaceInWorkbin requestPlaceInWorkbin = RequestPlaceInWorkbin.Create();
                requestPlaceInWorkbin.InteractionId = interactionId;
                requestPlaceInWorkbin.ProxyClientId = proxyId;

                requestPlaceInWorkbin.Workbin = workbinInfo;

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestPlaceInWorkbin);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------PlaceInWorkbin-------------");
                            logger.Info("AgentID  :" + agentId);
                            logger.Info("InteractionID  :" + interactionId);
                            // logger.Info("PlaceID  :" + placeId);
                            logger.Info("ProxyID        :" + proxyId);
                            logger.Info("Workbin        :" + workbin);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Place in Workbin Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Email Interaction-------------");
                            logger.Info("AgentID  :" + agentId);
                            logger.Info("InteractionID  :" + interactionId);
                            // logger.Info("PlaceID  :" + placeId);
                            logger.Info("ProxyID        :" + proxyId);
                            logger.Info("Workbin        :" + workbin);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = Convert.ToString(eventError.ErrorDescription);
                            logger.Error("Error occurred while placeinworkbin : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Place in Workbin UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("PlaceInWorkbin() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while Accept the request " + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #12
0
        /// <summary>
        /// Accepts the interaction.
        /// </summary>
        /// <param name="ticketID">The ticket identifier.</param>
        /// <param name="interactionID">The interaction identifier.</param>
        /// <param name="proxyID">The proxy identifier.</param>
        /// <returns></returns>
        public OutputValues AcceptInteraction(int ticketID, string interactionID, int proxyID)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestAccept requestAccept = RequestAccept.Create();
                requestAccept.TicketId      = ticketID;
                requestAccept.InteractionId = interactionID;
                requestAccept.ProxyClientId = Convert.ToInt32(proxyID);
                //added 27-02-2015
                requestAccept.InitialInFocusState = true;
                //end
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestAccept);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------Accepted  Interaction-------------");
                            logger.Info("TicketID  :" + ticketID);
                            logger.Info("InteractionID  :" + interactionID);
                            logger.Info("ProxyID        :" + proxyID);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Accept Interaction Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Email Interaction-------------");
                            logger.Info("TicketID  :" + ticketID);
                            logger.Info("InteractionID  :" + interactionID);
                            logger.Info("ProxyID        :" + proxyID);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = Convert.ToString(eventError.ErrorDescription);
                            logger.Error("Error occurred while accepting the interaction : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Agent Not Ready UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("AcceptChatInteraction() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while Accept the request " + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #13
0
        public OutputValues TransferInteractiontoQueue(int proxyClientId, string interactionID, string queueName)
        {
            OutputValues output = OutputValues.GetInstance();

            try
            {
                RequestChangeProperties requestChangeProperties = RequestChangeProperties.Create();
                RequestPlaceInQueue     requestPlaceInQueue     = RequestPlaceInQueue.Create();

                KeyValueCollection attachData = new KeyValueCollection();
                attachData.Add("EmailSkills", queueName);

                requestChangeProperties.ChangedProperties = attachData;
                requestChangeProperties.InteractionId     = interactionID;
                requestChangeProperties.ProxyClientId     = proxyClientId;

                requestPlaceInQueue.InteractionId   = interactionID;
                requestPlaceInQueue.Queue           = queueName;
                requestPlaceInQueue.ProxyClientId   = proxyClientId;
                requestPlaceInQueue.AddedProperties = attachData;

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestPlaceInQueue);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------Transfer Interaction By Queue-------------");
                            logger.Info("InteractionId  :" + interactionID);
                            logger.Info("ProxyClientId    :" + proxyClientId);
                            logger.Info("QueueName    :" + queueName);
                            logger.Info("--------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Transfer interaction Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Transfer Interaction By Queue-------------");
                            logger.Info("InteractionId  :" + interactionID);
                            logger.Info("ProxyClientId    :" + proxyClientId);
                            logger.Info("QueueName    :" + queueName);
                            logger.Info("--------------------------------------------");
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = Convert.ToString(eventError.ErrorDescription);
                            logger.Error("Error occurred while transferring  interaction : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Transfer Interaction UnSuccessful";
                    }
                    Settings.InteractionProtocol.Send(requestPlaceInQueue);
                    logger.Info("------------Transfer Interaction By Queue-------------");
                    logger.Info("InteractionId  :" + interactionID);
                    logger.Info("ProxyClientId    :" + proxyClientId);
                    logger.Info("QueueName    :" + queueName);
                    logger.Info("--------------------------------------------");
                    logger.Info(requestChangeProperties.ToString());
                    logger.Info(requestPlaceInQueue.ToString());
                }
                else
                {
                    logger.Warn("TransferInteractiontoQueue() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while transfer the interaction" + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #14
0
        public OutputValues TransferInteractiontoAgent(int proxyClientId, string interactionID, string agentID)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestTransfer requestTransfer = RequestTransfer.Create();
                requestTransfer.ProxyClientId = proxyClientId;
                requestTransfer.InteractionId = interactionID;
                requestTransfer.AgentId       = agentID;
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestTransfer);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------Transfer Interaction to agent-------------");
                            logger.Info("AgentID  :" + requestTransfer.AgentId);
                            logger.Info("ProxyClientId  :" + requestTransfer.ProxyClientId);
                            logger.Info("InteractionId  :" + requestTransfer.InteractionId);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Transfer interaction Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Transferring Interaction to Agent-------------");
                            logger.Info("AgentID  :" + requestTransfer.AgentId);
                            logger.Info("ProxyClientId  :" + requestTransfer.ProxyClientId);
                            logger.Info("InteractionId  :" + requestTransfer.InteractionId);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = Convert.ToString(eventError.ErrorDescription);
                            logger.Error("Error occurred while transferring  interaction : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Transfer Interaction UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("TransferInteraction() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while transfer the interaction" + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #15
0
 /// <summary>
 /// Acknowledges the event.
 /// </summary>
 public abstract void AckEvent(EventAck eventAck);
コード例 #16
0
        /// <summary>
        /// Agents the ready.
        /// </summary>
        /// <param name="proxyClientId">The proxy client identifier.</param>
        /// <param name="mediaType">Type of the media.</param>
        /// <returns></returns>
        public OutputValues AgentNotReadyWithReason(int proxyClientId, string mediaType, string reason, string code)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                KeyValueCollection ReasonCode = new KeyValueCollection();
                if (!string.IsNullOrEmpty(reason))
                {
                    ReasonCode.Add("Name", reason);
                    ReasonCode.Add("Code", code);
                }
                RequestChangeMediaStateReason requestChangeMediaStateReason = RequestChangeMediaStateReason.Create(proxyClientId, ReasonCode, mediaType, ReasonInfo.Create(mediaType, reason, Convert.ToInt32(code)));
                //requestChangeMediaStateReason.ProxyClientId = proxyClientId;
                //requestChangeMediaStateReason.MediaTypeName = mediaType;

                //requestChangeMediaStateReason.Extension = ReasonCode;
                //requestChangeMediaStateReason.Reason = ReasonInfo.Create(mediaType, reason, Convert.ToInt32(code));

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestChangeMediaStateReason);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAgentNotReady = (EventAck)message;
                            logger.Info("----------------AgentNotReadyWithReason-------------");
                            logger.Info("ProxyClientId    :" + proxyClientId);
                            logger.Info("MediaTypeName    :" + mediaType);
                            logger.Info("Name    :" + eventAgentNotReady.Name.ToString());
                            logger.Info("Reason Name    :" + reason);
                            logger.Info("Reason Code    :" + code);
                            logger.Info("----------------------------------------------------");
                            logger.Trace(eventAgentNotReady.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Agent Not Ready with reason Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError            = (EventError)message;
                            string     LoginErrorCode        = Convert.ToString(eventError.ErrorCode);
                            string     LoginErrorDescription = Convert.ToString(eventError.ErrorDescription);
                            logger.Trace(eventError.ToString());
                            output.ErrorCode   = eventError.ErrorCode;
                            output.MessageCode = "2002";
                            output.Message     = "AgentNotReadyWithReason() : " + LoginErrorDescription;
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Agent Not Ready with reason UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("AgentNotReadyWithReason() : Interaction Server Protocol is Null..");
                }
            }
            catch (Exception commonException)
            {
                logger.Error("Error occurred while Agent Not Ready with reason request " + commonException.ToString());
                output.MessageCode = "2001";
                output.Message     = commonException.Message;
            }
            return(output);
        }
コード例 #17
0
        public OutputValues NotifyWorbin(int proxyClientId, string workbinType, string worbinEmpId, string workbinGroupId = null, string WorkbinPlaceId = null, string workbinPlaceGroupId = null)
        {
            OutputValues outPutValues = new OutputValues();

            outPutValues.Message     = string.Empty;
            outPutValues.MessageCode = string.Empty;
            outPutValues.ErrorCode   = 0;
            KeyValueCollection keyVC = new KeyValueCollection();

            keyVC.Add("event_processing_stopped", 1);
            try
            {
                RequestWorkbinNotifications reqWorkbinNotifications = RequestWorkbinNotifications.Create();
                reqWorkbinNotifications.Workbin = WorkbinInfo.Create(workbinType);
                reqWorkbinNotifications.Workbin.WorkbinAgentId = worbinEmpId;
                if (!string.IsNullOrEmpty(workbinGroupId))
                {
                    reqWorkbinNotifications.Workbin.WorkbinGroupId = workbinGroupId;
                }
                if (!string.IsNullOrEmpty(workbinPlaceGroupId))
                {
                    reqWorkbinNotifications.Workbin.WorkbinPlaceGroupId = workbinPlaceGroupId;
                }
                if (!string.IsNullOrEmpty(WorkbinPlaceId))
                {
                    reqWorkbinNotifications.Workbin.WorkbinPlaceId = WorkbinPlaceId;
                }
                reqWorkbinNotifications.Reason                = ReasonInfo.Create();
                reqWorkbinNotifications.ProxyClientId         = proxyClientId;
                reqWorkbinNotifications.NotifyPropertyChanges = 1;
                reqWorkbinNotifications.Extension             = keyVC;
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(reqWorkbinNotifications);

                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck _requestWorkbinNotifications = (EventAck)message;
                            logger.Info("------------Request Workbin Notifications-------------");
                            logger.Trace(_requestWorkbinNotifications.ToString());
                            outPutValues.MessageCode = "200";
                            logger.Trace(_requestWorkbinNotifications.ProxyClientId);
                            outPutValues.Message = "Request Workbin Notifications Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Trace(eventError.ToString());
                            outPutValues.MessageCode = "2001";
                            outPutValues.Message     = "NotifyWorbin() : " + Convert.ToString(eventError.ErrorDescription);
                            break;
                        }
                    }
                }
            }
            catch (Exception error)
            {
                logger.Error(error.Message.ToString());
                outPutValues.MessageCode = "2001";
                outPutValues.Message     = "NotifyWorbin() : " + error.Message.ToString();
            }

            return(outPutValues);
        }
コード例 #18
0
        public string SubmitNewInteraction(int tenantId, int proxyClientId, string queuename, KeyValueCollection userdata)
        {
            string interactionID = string.Empty;

            try
            {
                RequestSubmit requestSumbit = RequestSubmit.Create();
                requestSumbit.TenantId           = tenantId;
                requestSumbit.ProxyClientId      = proxyClientId;
                requestSumbit.Queue              = queuename;
                requestSumbit.InteractionType    = "Outbound";
                requestSumbit.InteractionSubtype = "OutboundNew";
                requestSumbit.MediaType          = "email";
                requestSumbit.UserData           = userdata;

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestSumbit);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------Submit New Email Interaction-------------");
                            logger.Info("TenantID  :" + requestSumbit.TenantId);
                            logger.Info("ProxyClientId  :" + requestSumbit.ProxyClientId);
                            logger.Info("Queue  :" + requestSumbit.Queue);
                            logger.Info("InteractionType        :" + requestSumbit.InteractionType);
                            logger.Info("InteractionSubtype        :" + requestSumbit.InteractionSubtype);
                            logger.Info("MediaType        :" + requestSumbit.MediaType);
                            logger.Info("UserData        :" + requestSumbit.UserData.ToString());
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            if (eventAck.Extension.ContainsKey("InteractionId"))
                            {
                                interactionID = eventAck.Extension["InteractionId"].ToString();
                            }
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Submitting new  Interaction-------------");
                            logger.Info("TenantID  :" + requestSumbit.TenantId);
                            logger.Info("ProxyClientId  :" + requestSumbit.ProxyClientId);
                            logger.Info("Queue  :" + requestSumbit.Queue);
                            logger.Info("InteractionType        :" + requestSumbit.InteractionType);
                            logger.Info("InteractionSubtype        :" + requestSumbit.InteractionSubtype);
                            logger.Info("MediaType        :" + requestSumbit.MediaType);
                            logger.Info("UserData        :" + requestSumbit.UserData.ToString());
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventError.ToString());
                            interactionID = string.Empty;
                            logger.Error("Error occurred while submittting new interaction : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        interactionID = string.Empty;
                    }
                }
                else
                {
                    logger.Warn("PlaceInWorkbin() : Interaction Server protocol is Null..");
                    interactionID = string.Empty;
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while submit the new email interaction" + generalException.ToString());
                interactionID = string.Empty;
            }
            return(interactionID);
        }
コード例 #19
0
        /// <summary>
        /// Rejects the interaction.
        /// </summary>
        /// <param name="ticketID">The ticket identifier.</param>
        /// <param name="interactionID">The interaction identifier.</param>
        /// <param name="proxyID">The proxy identifier.</param>
        /// <returns></returns>
        public OutputValues RejectInteraction(int ticketID, string interactionID, int proxyID, KeyValueCollection data)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestReject requestReject = RequestReject.Create();
                requestReject.TicketId      = ticketID;
                requestReject.InteractionId = interactionID;
                requestReject.ProxyClientId = proxyID;
                requestReject.Extension     = data;
                ReasonInfo reasonInfo = ReasonInfo.Create();
                reasonInfo.ReasonDescription = "Agent has reject this interaction";
                requestReject.Reason         = reasonInfo;
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestReject);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventInteractionReject = (EventAck)message;
                            logger.Info("------------RejectInteraction-------------");
                            logger.Info("InteractionId  :" + interactionID);
                            logger.Info("ProxyClientId    :" + proxyID);
                            logger.Info("---------------------------------------------");
                            logger.Trace(eventInteractionReject.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Reject Interaction Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError            = (EventError)message;
                            string     LoginErrorCode        = Convert.ToString(eventError.ErrorCode);
                            string     LoginErrorDescription = Convert.ToString(eventError.ErrorDescription);
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = "RejectInteraction() : " + LoginErrorDescription;
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Agent Reject Interaction UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("RejectInteraction() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while Reject Interaction request " + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #20
0
        public OutputValues RequestPlaceQueue(string interactionId, int proxyId, string queueName)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestPlaceInQueue requestPlaceInQueue = RequestPlaceInQueue.Create();
                requestPlaceInQueue.InteractionId = interactionId;
                requestPlaceInQueue.Queue         = queueName;
                requestPlaceInQueue.ProxyClientId = proxyId;

                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestPlaceInQueue);
                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAck = (EventAck)message;
                            logger.Info("------------PlaceInQueue-------------");
                            logger.Info("InteractionID  :" + interactionId);
                            logger.Info("ProxyID        :" + proxyId);
                            logger.Info("Queue Name        :" + queueName);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventAck.ToString());
                            output.MessageCode = "200";
                            output.Message     = "Place in Queue Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError = (EventError)message;
                            logger.Info("------------Error on Place In Queue-------------");
                            logger.Info("InteractionID  :" + interactionId);
                            logger.Info("ProxyID        :" + proxyId);
                            logger.Info("Queue Name        :" + queueName);
                            logger.Info("----------------------------------------------");
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = Convert.ToString(eventError.ErrorDescription);
                            logger.Error("Error occurred while placeinqueue : " + Convert.ToString(eventError.ErrorDescription));
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Place in Queue UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("PlaceInQueue() : Interaction Server protocol is Null..");
                }
            }
            catch (Exception generalException)
            {
                logger.Error("Error occurred while Accept the request " + generalException.ToString());
                output.MessageCode = "2001";
                output.Message     = generalException.Message;
            }
            return(output);
        }
コード例 #21
0
        /// <summary>
        /// Agents the register.
        /// </summary>
        /// <param name="clientName">Name of the client.</param>
        /// <returns></returns>
        public OutputValues AgentRegister(string clientName)
        {
            OutputValues output = OutputValues.GetInstance();

            output.Message     = string.Empty;
            output.MessageCode = string.Empty;
            output.ErrorCode   = 0;
            try
            {
                RequestRegisterClient requestRegisterClient = RequestRegisterClient.Create();
                requestRegisterClient.ClientName    = clientName;
                requestRegisterClient.ClientType    = InteractionClient.AgentApplication;
                requestRegisterClient.ProxyClientId = 0;
                requestRegisterClient.Extension     = null;
                if (Settings.InteractionProtocol != null && Settings.InteractionProtocol.State == ChannelState.Opened)
                {
                    IMessage message = Settings.InteractionProtocol.Request(requestRegisterClient);

                    if (message != null)
                    {
                        switch (message.Id)
                        {
                        case EventAck.MessageId:
                            EventAck eventAgentRegister = (EventAck)message;
                            logger.Info("------------AgentRegister-------------");
                            logger.Info("ClientName    :" + clientName);
                            logger.Info("--------------------------------------");
                            logger.Trace(eventAgentRegister.ToString());
                            output.MessageCode = "200";
                            output.ProxyID     = eventAgentRegister.ProxyClientId;
                            output.Message     = "Agent Register Successful";
                            break;

                        case EventError.MessageId:
                            EventError eventError            = (EventError)message;
                            string     LoginErrorCode        = Convert.ToString(eventError.ErrorCode);
                            string     LoginErrorDescription = Convert.ToString(eventError.ErrorDescription);
                            logger.Trace(eventError.ToString());
                            output.MessageCode = "2001";
                            output.Message     = "AgentRegister() : " + LoginErrorDescription;
                            break;
                        }
                    }
                    else
                    {
                        output.MessageCode = "2001";
                        output.Message     = "Agent Register UnSuccessful";
                    }
                }
                else
                {
                    logger.Warn("AgentRegister() : Interaction Server Protocol is Null..");
                }
            }
            catch (Exception commonException)
            {
                logger.Error("Error occurred while Register request " + commonException.ToString());
                output.MessageCode = "2001";
                output.Message     = commonException.Message;
            }
            return(output);
        }
コード例 #22
0
        /// <summary>
        /// Notifies the email interaction.
        /// </summary>
        /// <param name="message">The message.</param>
        public void NotifyEmailInteraction(Genesyslab.Platform.Commons.Protocols.IMessage message)
        {
            try
            {
                switch (message.Id)
                {
                case EventInvite.MessageId:

                    // Newly Added
                    // Start
                    CheckAutoAnswer(message as EventInvite);
                    // Stop

                    //Old Code
                    // Start
                    //  EventInvite eventInvite = message as EventInvite;
                    //if (ConfigContainer.Instance().AllKeys.Contains("email.enable.auto-answer")
                    //    && ((string)ConfigContainer.Instance().GetValue("email.enable.auto-answer")).ToLower().Equals("true"))
                    //{
                    //    //EmailNotifier.needPerformAccept = true;
                    //    _taskbarNotifier.eventInvite = eventInvite;
                    //    _taskbarNotifier.ReadContactName();
                    //    _taskbarNotifier.DoEmailAccept();
                    //}
                    //else
                    //    ShowEmailNotifier(eventInvite);
                    // Stop

                    break;

                case EventRevoked.MessageId:
                    EventRevoked eventRevoked = message as EventRevoked;
                    if (_taskbarNotifier != null)
                    {
                        _taskbarNotifier.BindInfo(eventRevoked);
                    }

                    break;

                case EventAck.MessageId:
                    EventAck eventAck = message as EventAck;

                    break;

                case EventPulledInteractions.MessageId:
                    EventPulledInteractions puledIteraction = message as EventPulledInteractions;
                    if (puledIteraction.Interactions != null && puledIteraction.Interactions.Count > 0)
                    {
                        string[] keys           = puledIteraction.Interactions.AllKeys;
                        var      _interactionID = keys[0];
                        if (_interactionID != null)
                        {
                            EmailMainWindow mailWindow = new EmailMainWindow(puledIteraction);
                            mailWindow.Show();
                        }
                    }
                    break;
                }
            }
            catch (Exception exception)
            {
                logger.Error("NotifyEmailInteraction" + exception.ToString());
            }
        }