Ejemplo n.º 1
0
 public void DetermineEmmotion(AgentEvent currentEvent, Agent agent)
 {
     if (currentEvent.EventType == AgentEventType.ActionsOfAgents)
     {
         if (currentEvent.EventIsPositive)
         {
             CreateEmotion(EmotionType.joy, agent);
         }
         else
         {
             if (agent.AgentPersontality.Neuroticism < 5)
             {
                 CreateEmotion(EmotionType.dispair, agent);
             }
             else if (agent.AgentPersontality.Extraversion > 5)
             {
                 CreateEmotion(EmotionType.anger, agent);
             }
         }
     }
     if (currentEvent.EventType == AgentEventType.AspectsOfObjects)
     {
     }
     if (currentEvent.EventType == AgentEventType.ConsequencesOfEvents)
     {
     }
 }
Ejemplo n.º 2
0
        public HttpResponse ManualTimeEntry(string formatteddate, string location, string agent, string eventtype, int hours, int minutes)
        {
            try
            {
                Response.ContentType = "application/json";

                AgentEventClient aec = new AgentEventClient();

                DateTime eventdate = DateTime.ParseExact(formatteddate, "yyyyMMdd", CultureInfo.InvariantCulture);
                DateTime eventtime = new DateTime(eventdate.Year, eventdate.Month, eventdate.Day, hours, minutes, 0);

                AgentEvent manualevent = new AgentEvent();

                manualevent.PartitionKey = eventtime.ToString("yyyyMM");
                manualevent.RowKey       = ShortGuidGenerator.NewGuid();
                manualevent.EventTime    = eventtime;
                manualevent.Agent        = agent;
                manualevent.EventType    = eventtype;
                manualevent.Location     = location;

                aec.AddNewItem(manualevent);

                Response.Write("{\"result\": \"ok\"}");
                Response.End();
            }
            catch (Exception ex)
            {
                Response.ContentType = "application/json";
                Response.Write(DefaultErrorResponse(ex.Message));
                Response.End();
            }

            return(null);
        }
Ejemplo n.º 3
0
        private void GetNextEvent(Object state)
        {
            AgentEvent pEvent = null;

            try
            {
                if (mpEventPollingTimer != null)
                {
                    //Pause timer while we check for an event for this agent
                    mpEventPollingTimer.Change(Timeout.Infinite, Timeout.Infinite);

                    //Get this agent's next event and raise it to all subscribers
                    pEvent = WSEvents.getNextAgentEventAck(miAgentIndex, mlLastEvent);
                    if (pEvent != null)
                    {
                        mlLastEvent = pEvent.eventTimestamp;
                        Console.WriteLine("AWS Event: id<" + pEvent.eventId + ">, payload<" + pEvent.payload.GetType() + ">");
                        OnEventArrival(new CEventArrivalArgs(pEvent));
                    }
                }
            }
            catch (Exception pError)
            {
                Console.WriteLine(pError.StackTrace);
            }
            finally
            {
                if (mpEventPollingTimer != null)
                {
                    // If we got an event, there's probably another one waiting.  Fire the timer immediately.
                    // Otherwise, fire timer in 100ms.
                    mpEventPollingTimer.Change(pEvent != null ? 0 : 100, Timeout.Infinite);
                }
            }
        }
Ejemplo n.º 4
0
 private void agentCallbackListener(object sender, AgentEvent e)
 {
     if (e.value == "LoadComplete")
     {
         LoadComplete(this, null);
     }
 }
Ejemplo n.º 5
0
 public bool execute(ReconCOM rc, String[] argv)
 {
     try
     {
         int    iRet;
         String user = argv.Length > 1 ? argv[1] : "System";
         //String username = argv.Length > 2 ? argv[2] : "carols";
         AgentEvent ae = new AgentEvent();
         iRet = rc.T_AgentGetState(user, 2, out ae);
         System.Console.WriteLine();
         if (iRet == (int)enErrorCode.E_SUCCESS)
         {
             System.Console.WriteLine("AgentState:" + (enAgentState)ae.AgentState);
             //System.Console.WriteLine("EventName:" + ae.EventName);
             return(true);
         }
         System.Console.WriteLine((enErrorCode)iRet);
         return(false);
     }
     catch (Exception ex)
     {
         System.Console.WriteLine("Exception: ", ex + " - " + ex.Message);
         return(false);
     }
 }
Ejemplo n.º 6
0
        public void raiseEvent(Event evt)
        {
            if (evt == null)
            {
                logwrite.write("raiseEvent", ":::::::::::::::::::::::: evt NULL ::::::::::::::::::::::::");
                return;
            }

            AgentEvent agentEvent = null;
            CallEvent  callEvent  = null;
            ErrorEvent errorEvent = null;

            if (evt is AgentEvent)
            {
                agentEvent = (AgentEvent)evt;
                raiseAgentEvent(agentEvent);
            }
            else if (evt is CallEvent)
            {
                callEvent = (CallEvent)evt;
                raiseCallEvent(callEvent);
            }
            else if (evt is ErrorEvent)
            {
                errorEvent = (ErrorEvent)evt;
                raiseErrorEvent(errorEvent);
            }
        }
Ejemplo n.º 7
0
        public int checkPreAgentState()
        {
            // 로그인하기전 서버에 상담원 상태를 먼저 체크한다.
            AgentStateVO agentStateVO = checkAgentState();

            if (agentStateVO != null)
            {
                AgentEvent evt = new AgentEvent();
                evt.setEvtMsg(agentStateVO.getXmppMsg());
                evt.setAgentState(agentStateVO.getState());
                evt.setReasonCode(agentStateVO.getReasonCode());
                evt.setEvtCode(EVENT_TYPE.ON_LOGGEDON);
                evt.setIsFirstLogin(true);
                finesseObj.raiseEvent(evt);

                if (agentStateVO.getState().Equals(AGENTSTATE.TALKING))
                {
                    XMLParser xmlParser = new XMLParser(logwrite, agent);

                    string talkingState = httpHandler.checkDialogID((string)currentServer["IP"], agent);
                    talkingState = talkingState.Replace("\n", "");

                    Event evt_ = xmlParser.parseXML(talkingState);
                    finesseObj.raiseEvent(evt_);
                }
                return(ERRORCODE.SUCCESS);
            }
            else
            {
                return(ERRORCODE.FAIL);
            }
        }
Ejemplo n.º 8
0
        private Event getUserEvent(XmlNodeList nodeList)
        {
            // AgentState 이벤트
            AgentEvent evt = new AgentEvent();

            evt.setEvtCode(EVENT_TYPE.ON_AGENTSTATE_CHANGE);

            XmlNode nodeone = nodeList.Item(0);

            foreach (XmlNode node1 in nodeone.ChildNodes)
            {
                if (node1.Name.Equals("state"))
                {
                    // 상담원 상태 데이터
                    evt.setAgentState(node1.InnerText.ToString());
                    // logwrite.write("### EVENT CHECK ###", "Agentstate : " + node1.InnerText.ToString());
                }
                if (node1.Name.Equals("reasonCode"))
                {
                    foreach (XmlNode node2 in node1.ChildNodes)
                    {
                        // 상세 이석사유코드 데이터
                        if (node2.Name.Equals("code"))
                        {
                            evt.setReasonCode(node2.InnerText.ToString());
                            // logwrite.write("### EVENT CHECK ###", "setReasonCode : " + node2.InnerText.ToString());
                        }
                    }
                }
            }
            return(evt);
        }
Ejemplo n.º 9
0
 private void agentCallbackListener(object sender, AgentEvent e)
 {
     if (e.value == "LoadComplete")
     {
         XmlDocument doc = new XmlDocument();
         doc.LoadXml("<CAMERA ZOOM=\"1.6\"/>");
         agent.perform(doc);
         LoadComplete(this, null);
     }
 }
Ejemplo n.º 10
0
        private void raiseAgentEvent(AgentEvent evt)
        {
            string evtCode    = evt.getEvtCode();
            string evtMessage = evt.getEvtMsg();

            evtMessage = evtMessage.Replace("\n", "");

            switch (evtCode)
            {
            case EVENT_TYPE.ON_CONNECTION:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnConnection ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnConnection(evt.getCurFinesseIP(), evt.getCurAemsIP(), evt.getCurIspsIP(), evtMessage);
                break;

            case EVENT_TYPE.ON_DISCONNECTION:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnDisConnection ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnDisConnection(evt.getCurFinesseIP(), evt.getCurAemsIP(), evt.getCurIspsIP(), evtMessage);
                break;

            case EVENT_TYPE.ON_AGENTSTATE_CHANGE:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnAgentStateChange ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "STATE : " + evt.getAgentState() + " , REASONCODE : " + evt.getReasonCode());
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnAgentStateChange(evt.getAgentState(), evt.getReasonCode(), evtMessage);
                // NOTREADY 상태에서 내선 콜이 인입되었다가 Alerting 상태에서 콜이 종료되면, Finesse 가 이전 상태 이벤트를 주지 않는다..
                // 그래서 상태관리 하다가 NOTREADY 에서 Alerting 이벤트가 오고, Drop 이벤트가 오면 이전상태 이벤트를 강제로 발생시키도록...
                agentCurrentState = evt.getAgentState();

                if (agentCurrentState.Equals(AGENTSTATE.LOGOUT))
                {
                    // 로그아웃 요청 되면 Finesse XMPP 세션도 Close 요청한다. 재 로그인시 XMPP 재인증을 받아야  하기 때문에.
                    FinesseClient.disconnect();
                }
                break;

            case EVENT_TYPE.ON_LOGGEDON:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnAgentLoggedOn ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "STATE : " + evt.getAgentState() + " , REASONCODE : " + evt.getReasonCode());
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnAgentLoggedOn(evt.getAgentState(), evt.getReasonCode(), evtMessage);
                break;

            default:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: UNKWON EVENT ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                break;
            }
        }
Ejemplo n.º 11
0
            public bool StartTriggered(AgentEvent agentEvent)
            {
                switch (agentEvent)
                {
                case BuffApplyEvent buffApplyEvent when buffApplyEvent.Buff.Id == buffId:
                case InitialBuffEvent initialBuffEvent when initialBuffEvent.Skill.Id == buffId:
                    return(true);

                default:
                    return(false);
                }
            }
            public bool Action(CancellationToken ct)
            {
                if (ct.IsCancellationRequested)
                {
                    return(false);
                }

                if (IEnumerableEx.IsNullOrEmpty(targetUsers))
                {
                    using (var db = new GameDbContext(dbo_game))
                    {
                        db.Database.ExecuteSqlRaw(
                            "INSERT INTO `game_mails`(`userid`, `typeid`, `title`, `message`, `sentdate`, " +
                            "`item1id`, `item2id`, `item3id`, `item4id`, `item5id`, `item1cnt`, `item2cnt`, `item3cnt`, `item4cnt`, `item5cnt`) " +
                            "SELECT `id`, {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13} FROM `game_users`",
                            (int)mail.typeid, mail.title, mail.message, mail.sentdate.ToDBFormatString(), mail.item1id, mail.item2id, mail.item3id, mail.item4id, mail.item5id,
                            mail.item1cnt, mail.item2cnt, mail.item3cnt, mail.item4cnt, mail.item5cnt);

                        db.agent_events.Add(AgentEvent.Create(AgentEvent.TypeID.MailCreateAll));
                        db.SaveChanges();
                    }
                }
                else
                {
                    var mails = new List <GameUser.Mail>();
                    foreach (var userid in targetUsers)
                    {
                        var newmail = new GameUser.Mail();
                        DataMapping.Copy(mail, newmail);
                        newmail.userid = userid;
                        mails.Add(newmail);
                    }

                    using (var db = new GameDbContext(dbo_game))
                    {
                        db.ChangeTracker.AutoDetectChangesEnabled = false;
                        db.game_mails.AddRange(mails);
                        db.ChangeTracker.AutoDetectChangesEnabled = true;

                        if (ct.IsCancellationRequested)
                        {
                            return(false);
                        }
                        db.SaveChanges();

                        db.agent_events.Add(AgentEvent.Create(AgentEvent.TypeID.MailCreate, mails.First().id, mails.Last().id));
                        db.SaveChanges();
                    }
                }

                return(true);
            }
Ejemplo n.º 13
0
 private void recon_OnAgentEvent(AgentEvent ae)
 {
     System.Console.WriteLine("EventName:" + ae.EventName);
     System.Console.WriteLine("AgentUsername:"******"AgentLoginID:" + ae.AgentLoginID);
     System.Console.WriteLine("Party_Number:" + ae.Party_Number);
     System.Console.WriteLine("HardwareLogin:"******"1059",2,out
     //System.Console.WriteLine("AgentState:" + (enAgentState)ae.AgentState);
     //System.Console.WriteLine("AgentAuxState:" + ae.AgentAuxState);
     //System.Console.WriteLine("MediaType:" + ae.MediaType);
     //System.Console.WriteLine("Timestamp:" + ae.Timestamp);
     //System.Console.WriteLine("T_GetSysDataKey:" + rc.T_GetSysDataKey((int)enSysDataKeys.voiceMsgCallDataKey_AgentLoginID));
 }
Ejemplo n.º 14
0
        /// <summary>
        /// 绑定坐席当前状态列表
        /// </summary>
        private void BandAgentList()
        {
            try
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Extension", typeof(string)); //分机号码
                dt.Columns.Add("StateName", typeof(string)); //状态名称
                //dt.Columns.Add("State", typeof(int));//状态
                //dt.Columns.Add("Party_Number", typeof(string));//分机号码
                dt.Columns.Add("OrderNum", typeof(string));//排序字段
                for (int i = 1040; i < 1099; i++)
                {
                    AgentEvent ae = new AgentEvent();
                    int        r  = Program.rc.T_AgentGetState(i.ToString(), 2, out ae);
                    if (ae != null)
                    {
                        DataRow dr = dt.NewRow();
                        dr["Extension"] = ae.AgentUsername;
                        //dr["State"] = ae.AgentState;
                        dr["StateName"] = ShowAgentState(ae.AgentState, ae.AgentAuxState);
                        //dr["Party_Number"] = ae.Party_Number;
                        if ((int)ae.AgentState == (int)enAgentState.agentStateReady)
                        {
                            dr["OrderNum"] = "1";
                        }
                        dt.Rows.Add(dr);
                        Marshal.ReleaseComObject(ae);
                    }
                }
                dt.DefaultView.Sort     = "OrderNum Desc";
                dgvAgentList.DataSource = dt.DefaultView.ToTable();

                foreach (DataGridViewRow item in dgvAgentList.Rows)
                {
                    item.Selected = false;
                }

                if (IsLocationSelected)
                {
                    if (RowIndex >= 0)
                    {
                        dgvAgentList.Rows[RowIndex].Selected = true;
                    }
                }
            }
            catch (Exception e)
            {
                Loger.Log4Net.Error("获取坐席状态出错", e);
            }
        }
        /// <summary>
        /// 插入或更新话务数据
        /// </summary>
        /// <param name="ae">AgentEvent</param>
        /// <param name="kvl">话务随路数据List</param>
        /// <param name="msg">输出信息</param>
        /// <returns></returns>
        public bool InsertCallRecord(AgentEvent ae, KeyValueList kvl, ref string msg)
        {
            bitauto.sys.ncc.CallRecord.CallRecord_ORIG model = crService.GetCallRecord_ORIGByCallID(CallRecordAuthorizeCode, Main.NewCallID, ref msg);

            switch (ae.AgentState)
            {
            //
            case (int)enAgentState.agentStateIntiated:
                break;

            case (int)enAgentState.agentStateRinging:
                break;

            case (int)enAgentState.agentStateWorking:
                break;


            //置为 话后(事后处理开始)
            case (int)enAgentState.agentStateAfterCallWork:
                //电话状态:呼出-2;呼入-1  只有呼入状态下才会记录事后处理时间和事后处理时长
                if (model != null)
                {
                    if (model.CallStatus == 1)
                    {
                        model.AfterWorkBeginTime = main.GetTime(ae.Timestamp);
                    }
                }
                break;

            //置为 置闲(事后处理结束)
            case (int)enAgentState.agentStateReady:
                //电话状态:呼出-2;呼入-1  只有呼入状态下才会记录事后处理时间和事后处理时长
                if (model != null)
                {
                    if (model.CallStatus == 1)
                    {
                        TimeSpan tsSpan = (TimeSpan)(main.GetTime(ae.Timestamp) - model.AfterWorkBeginTime);
                        model.AfterWorkTime = (int)tsSpan.TotalSeconds;    //事后处理时长
                    }
                }
                break;
            }
            return(crService.InsertCallRecord(CallRecordAuthorizeCode, model, ref msg));
        }
Ejemplo n.º 16
0
 public bool StartTriggered(AgentEvent agentEvent)
 {
     return(agentEvent is TStarting);
 }
Ejemplo n.º 17
0
 public bool EndTriggered(AgentEvent agentEvent)
 {
     return(agentEvent is BuffRemoveEvent buffRemoveEvent && buffRemoveEvent.Buff.Id == buffId);
 }
Ejemplo n.º 18
0
 public NewEventMessage(Agent agent, AgentEvent agentEvent)
 {
     Agent = agent;
     AgentEvent = agentEvent;
 }
Ejemplo n.º 19
0
        private void raiseCallEvent(CallEvent evt)
        {
            string evtCode    = evt.getEvtCode();
            string evtMessage = evt.getEvtMsg();

            callDataTable = evt.getCallVariable();

            evtMessage = evtMessage.Replace("\n", "");

            StringBuilder callState = new StringBuilder();

            foreach (DictionaryEntry item in evt.getCallStateTable())
            {
                callState.Append(item.Key).Append("^").Append(item.Value).Append("|");
            }
            if (callState.ToString().EndsWith("|"))
            {
                string tempStr = callState.ToString().Substring(0, callState.ToString().Length - 1);
                callState = new StringBuilder();
                callState.Append(tempStr);
            }

            StringBuilder callAction = new StringBuilder();

            foreach (string str in evt.getActionList())
            {
                callAction.Append(str).Append("^");
            }
            if (callAction.ToString().EndsWith("^"))
            {
                string tempStr = callAction.ToString().Substring(0, callAction.ToString().Length - 1);
                callAction = new StringBuilder();
                callAction.Append(tempStr);
            }

            switch (evtCode)
            {
            case EVENT_TYPE.ON_CONNECTION:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnConnection ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnConnection(evt.getCurFinesseIP(), evt.getCurAemsIP(), evt.getCurIspsIP(), evtMessage);
                break;

            case EVENT_TYPE.ON_DISCONNECTION:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: GetEventOnDisConnection ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                GetEventOnDisConnection(evt.getCurFinesseIP(), evt.getCurAemsIP(), evt.getCurIspsIP(), evtMessage);
                break;

            case EVENT_TYPE.ALERTING:
                writeCallEventLog("GetEventOnCallAlerting", evt);
                setActiveDialogID(evt);
                GetEventOnCallAlerting(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());

                if (agentCurrentState.Equals(AGENTSTATE.NOT_READY))
                {
                    // 상담원 현재 상태가 NOTREADY 인데 Alerting 이벤트가 발생했다는건, 내선인입콜 케이스
                    isInternalCall = true;
                }
                else
                {
                    isInternalCall = false;
                }
                break;

            case EVENT_TYPE.FAILED:
                writeCallEventLog("GetEventOnCallFailed", evt);
                setActiveDialogID(evt);
                GetEventOnCallFailed(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                break;

            case EVENT_TYPE.ACTIVE:
                writeCallEventLog("GetEventOnCallActive", evt);
                setActiveDialogID(evt);
                GetEventOnCallActive(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());

                if (evt.getToAddress() != null && evt.getToAddress().Equals(phonePadNum))
                {
                    // 폰패드 컨퍼런스
                    logwrite.write("raiseEvent", "PhonePad Conference Start");
                    phonePadCallID = dialogID;      // phonePad 콜 구분을 위한 DialogID 세팅
                    fnConference();
                }
                break;

            case EVENT_TYPE.HELD:
                writeCallEventLog("GetEventOnCallHeld", evt);
                //setActiveDialogID(evt);
                GetEventOnCallHeld(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                break;

            case EVENT_TYPE.INITIATING:
                writeCallEventLog("GetEventOnCallInitiating", evt);
                setActiveDialogID(evt);
                GetEventOnCallInitiating(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                break;

            case EVENT_TYPE.INITIATED:
                writeCallEventLog("GetEventOnCallInitiated", evt);
                setActiveDialogID(evt);
                GetEventOnCallInitiated(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                break;


            case EVENT_TYPE.WRAP_UP:
                writeCallEventLog("GetEventOnCallWrapUp", evt);
                // checkTable(callEvent.getCallVariable());

                removeDialogID(evt);
                GetEventOnCallWrapUp(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                break;

            case EVENT_TYPE.DROPPED:
                writeCallEventLog("GetEventOnCallDropped", evt);
                // checkTable(callEvent.getCallVariable());
                removeDialogID(evt);

                GetEventOnCallDropped(evt.getDialogID(), evt.getCallType(), evt.getFromAddress(), evt.getToAddress(), callState.ToString(), callAction.ToString());
                if (evt.getCallType().Equals(CALL.CONFERENCE) && evt.getDialogID().Equals(phonePadCallID))
                {
                    // 폰패드 이후 Dropped 이벤트일 경우 폰패드 결과를 요청한다.
                    getPhonePadInfo();
                }
                if (isInternalCall)
                {
                    // NOTREADY 상태에서 내선콜이 인입되었다가 Alerting 도중에 콜이 종료되면 상담원 이전상태 이벤트를 Finesse  가 주지 않아
                    // 임의적으로 상담원상태 요청 이후 상태 이벤트를 발생시킨다.
                    AgentStateVO agentStateVO = FinesseClient.checkAgentState();      // 이전 상담원 상태체크
                    AgentEvent   evt_         = new AgentEvent();
                    evt_.setEvtMsg(agentStateVO.getXmppMsg());
                    evt_.setAgentState(agentStateVO.getState());
                    evt_.setReasonCode(agentStateVO.getReasonCode());
                    evt_.setEvtCode(EVENT_TYPE.ON_AGENTSTATE_CHANGE);
                    raiseEvent(evt_);
                }
                break;

            default:
                logwrite.write("raiseEvent", ":::::::::::::::::::::::::::::::::::: UNKWON EVENT ::::::::::::::::::::::::::::::::::::");
                logwrite.write("raiseEvent", evtMessage);
                logwrite.write("raiseEvent", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::");
                setActiveDialogID(evt);
                break;
            }
        }
        public static List <AgentDailyActivity> Create(List <Agent> agentprofiles, DateTime startdate, DateTime enddate, string agent)
        {
            AgentEventClient  aec        = new AgentEventClient();
            List <AgentEvent> allrecords = new List <AgentEvent>();

            DateTime cursordate = startdate;

            if (agent != null && agent != "")
            {
                while (cursordate <= enddate)
                {
                    allrecords.AddRange(aec.GetAllByPartition(cursordate.ToString("yyyyMM")).Where(x => x.EventTime.ToString("yyyyMMdd") == cursordate.ToString("yyyyMMdd") && x.Agent == agent).OrderBy(x => x.Timestamp));
                    cursordate = cursordate.AddDays(1);
                }
            }
            else
            {
                while (cursordate <= enddate)
                {
                    allrecords.AddRange(aec.GetAllByPartition(cursordate.ToString("yyyyMM")).Where(x => x.EventTime.ToString("yyyyMMdd") == cursordate.ToString("yyyyMMdd")).OrderBy(x => x.Timestamp));
                    cursordate = cursordate.AddDays(1);
                }
            }

            List <AgentDailyActivity> retlist = new List <AgentDailyActivity>();

            List <AgentLocationDate> alds = GetAgentDateList(allrecords);

            DateTime currenttime = EasternTimeConverter.Convert(DateTime.UtcNow);

            foreach (AgentLocationDate ald in alds)
            {
                try
                {
                    if (ald.Agent == "victorr")
                    {
                        Console.Write("");
                    }
                    AgentEvent logonevent  = GetLogonEvent(allrecords, ald);
                    AgentEvent logoffevent = GetLogoffEvent(allrecords, ald);

                    double hoursworked = 0;

                    Agent a = agentprofiles.SingleOrDefault(x => x.LoginName == ald.Agent.Replace("cindy", "sydneyc"));
                    bool  currentlyloggedon = false;
                    if (a.CurrentStatus == "loggedon" && logonevent != null && logonevent.EventTime.ToString("yyyyMMdd") == currenttime.ToString("yyyyMMdd"))
                    {
                        currentlyloggedon = true;
                    }


                    if (logonevent != null && logoffevent != null)
                    {
                        if (currentlyloggedon)
                        {
                            //relogged on
                            hoursworked = (double)(currenttime.Ticks - logonevent.EventTime.Ticks) / TimeSpan.TicksPerHour;
                        }
                        else
                        {
                            hoursworked = (double)(logoffevent.EventTime.Ticks - logonevent.EventTime.Ticks) / TimeSpan.TicksPerHour;
                        }
                    }
                    else if (logonevent != null && logoffevent == null && logonevent.EventTime.ToString("yyyyMMdd") == currenttime.ToString("yyyyMMdd"))
                    {
                        hoursworked = (double)(currenttime.Ticks - logonevent.EventTime.Ticks) / TimeSpan.TicksPerHour;
                    }


                    retlist.Add(new AgentDailyActivity
                    {
                        FormattedDate = ald.Date,
                        Agent         = ald.Agent,
                        Location      = ald.Location,

                        LogonTime = logonevent != null ? logonevent.EventTime.ToString("HH:mm") : "",
                        LogonHour = logonevent != null ? int.Parse(logonevent.EventTime.ToString("HH")) : -1,


                        LogoffTime = logoffevent != null && !currentlyloggedon ? logoffevent.EventTime.ToString("HH:mm") : "",
                        LogoffHour = logoffevent != null && !currentlyloggedon ? int.Parse(logoffevent.EventTime.ToString("HH")) : -1,

                        Hours = hoursworked
                    });
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }

            return(retlist);
        }
Ejemplo n.º 21
0
 public NewEventMessage(Agent agent, AgentEvent agentEvent)
 {
     Agent      = agent;
     AgentEvent = agentEvent;
 }
Ejemplo n.º 22
0
 public CEventArrivalArgs(AgentEvent pNextEvent)
 {
     mpNextEvent = pNextEvent;
 }
Ejemplo n.º 23
0
 public bool EndTriggered(AgentEvent agentEvent)
 {
     return(agentEvent is TEnding);
 }
Ejemplo n.º 24
0
 public void AgentEventHandler(object sender, AgentEvent e)
 {
     AgentEvents.Add(e);
 }
Ejemplo n.º 25
0
        public HttpResponse logoff(string location, string agent, string code)
        {
            try
            {
                Response.ContentType = "application/json";

                AgentClient ac = new AgentClient();
                Agent       a  = ac.GetAll().Execute().Where(x => x.LoginName == agent).SingleOrDefault();

                if (a == null)
                {
                    throw new Exception("Invalid agent ID or code");
                }

                if (a.LoginCode == code)
                {
                    DateTime nowTime = EasternTimeConverter.Convert(DateTime.UtcNow);


                    AgentEventClient aec       = new AgentEventClient();
                    AgentEvent       lastEvent = aec.GetAll().Execute().Where(x => x.Agent == agent).OrderByDescending(x => x.EventTime).FirstOrDefault();

                    string hoursworked = "No prior logon.";
                    string production  = "No results.";
                    if (lastEvent.EventType == "logon")
                    {
                        long     elapsedTicks = nowTime.Ticks - lastEvent.EventTime.Ticks;
                        TimeSpan ts           = new TimeSpan(elapsedTicks);
                        hoursworked = ts.Hours.ToString() + "h : " + ts.Minutes + "m logged.";

                        //Count how many leads
                        List <SkillCowRequestSubmission> allrecords = new List <SkillCowRequestSubmission>();

                        DateTime cursordate = lastEvent.EventTime;

                        SkillCowRequestSubmissionClient rsc = new SkillCowRequestSubmissionClient();
                        while (cursordate <= nowTime)
                        {
                            CloudTableQuery <SkillCowRequestSubmission> query = rsc.GetAll(cursordate.ToString("yyyyMMdd"));
                            allrecords.AddRange(query.Execute().Where(x => x.UtmCampaign == location && x.UtmContent == agent).OrderBy(x => x.Timestamp));
                            cursordate = cursordate.AddDays(1);
                        }

                        //tally up
                        int totalschoolleads = 0;
                        int totalindeedjobs  = 0;
                        int totalcourses     = 0;
                        foreach (SkillCowRequestSubmission x in allrecords)
                        {
                            switch (x.SourceForm)
                            {
                            case "schoolform":
                                totalschoolleads++;
                                break;

                            case "indeedjob":
                                totalindeedjobs++;
                                break;

                            case "udemycourse":
                                totalcourses++;
                                break;
                            }
                        }
                        if (totalschoolleads + totalindeedjobs + totalcourses > 0)
                        {
                            production  = "\n";
                            production += totalschoolleads + " school leads\n";
                            production += totalindeedjobs + " indeed jobs\n";
                            production += totalcourses + " udemy courses";
                        }
                    }

                    //Log event
                    aec.AddNewItem(new AgentEvent(agent, "logoff", location));

                    a.CurrentLocation = "";
                    a.CurrentStatus   = "loggedoff";
                    ac.Update(a);

#if DEBUG
#else
                    Telephony t = new Telephony();

                    string message = agent + " logged OFF at " + location + "\n" + hoursworked + "\n" + production;
                    //Send to Rick
                    //t.SendSMS("+19174340659", message);

                    t.SendSMS("+19179578770", message);
#endif

                    Response.Write("{\"result\": \"ok\", \"logonname\": \"" + a.LoginName + "\"}");
                    Response.End();
                }
                else
                {
                    throw new Exception("Invalid agent ID or code");
                }
            }
            catch (Exception ex)
            {
                Response.ContentType = "application/json";
                Response.Write(DefaultErrorResponse(ex.Message));
                Response.End();
            }

            return(null);
        }