#include "StdAfx.h" #include "IncomingCall.h" #include "MsgCenter.h" #include "NetworkAcd.h" CIncomingCall::CIncomingCall(CPduEntity* pCmd) { updateQueueInfo(pCmd); } CIncomingCall::~CIncomingCall(void) { // 添加消息可供视图刷新 CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_FINISH, (const PARAM)m_IvrFlowId); } /***************************************************************** **【函数名称】 setCallState **【函数功能】 设置排队呼叫状态 **【参数】 **【返回值】 ****************************************************************/ void CIncomingCall::setCallState( OUTER_CALL_STATE State ) { m_CallState = State; // 添加消息可供视图刷新 CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_INFO_UPDATE, (const PARAM)m_IvrFlowId); } /***************************************************************** **【函数名称】 updateQueueInfo **【函数功能】 更新请求排队信息 **【参数】 pCmd: 更新排队信息的命令内容 **【返回值】 ****************************************************************/ void CIncomingCall::updateQueueInfo( CPduEntity* pCmd ) { // PDU命令 m_Cmd = *pCmd; // 排队状态 m_CallState = OUTER_CALL_WAITING; // 基础信息 if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 请求排队 { m_IvrFlowId = m_Cmd.GetDataInt(1); m_CallId = m_Cmd.GetDataULong(2); m_AgentStrategy = (AGENT_STRATEGY)m_Cmd.GetDataUInt(3); m_GroupNo = m_Cmd.GetDataUInt(4); m_VipLevel = m_Cmd.GetDataInt(5); m_CallerNum = m_Cmd.GetDataString(6); m_InfoEx = m_Cmd.GetDataString(7); } // end if // 添加消息可供视图刷新 CMsgCenter::GetInstance().pushMsg(ACD_MSG_CALL_INFO_UPDATE, (const PARAM)m_IvrFlowId); } /***************************************************************** **【函数名称】 onQueueOK **【函数功能】 请求座席成功处理 **【参数】 AgentId: 成功请求到的座席工号 Exten: 成功请求到的座席分机号 **【返回值】 ****************************************************************/ void CIncomingCall::onQueueOK( UINT AgentId, UINT Exten ) { // 发送执行结果返回命令 m_Cmd.SetToExecReturn(); m_Cmd.SetDataBool(0, true); if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 请求座席命令 { m_Cmd.SetDataUInt(9, AgentId); m_Cmd.SetDataUInt(10, Exten); } else // 继续请求排队命令 { m_Cmd.SetDataUInt(7, AgentId); m_Cmd.SetDataUInt(8, Exten); } // end if CNetworkAcd::GetInstance().send2Cti(&m_Cmd); } /***************************************************************** **【函数名称】 onQueueFailed **【函数功能】 请求座席失败处理 **【参数】 Reason: 失败原因 **【返回值】 ****************************************************************/ void CIncomingCall::onQueueFailed( UINT Reason, UINT PosInQueue) { // 发送执行结果返回命令 if(m_Cmd.GetCmdType() == PDU_CMD_IVR_WANT_AGENT) // 继续等待排队命令不需返回 { // 暂停请求座席 setCallState(OUTER_CALL_PAUSE); // 返回执行结果 m_Cmd.SetToExecReturn(); m_Cmd.SetDataBool(0, false); m_Cmd.SetDataUInt(8, Reason); m_Cmd.SetDataUInt(9, PosInQueue); CNetworkAcd::GetInstance().send2Cti(&m_Cmd); } else { setCallState(OUTER_CALL_WAITING); } }