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