| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "OpAutoCall.h"
- #include "VirtualChan.h"
- #include "OperationReactor.h"
- #include "FsProxy.h"
- COpAutoCall::COpAutoCall(COperationReactor * pParent, long Instance) : COperation(pParent, Instance)
- {
- }
- COpAutoCall::~COpAutoCall(void)
- {
- }
- bool COpAutoCall::start(LineOpParam * pParam)
- {
- // 保存主被叫号码
- m_CallerNum = pParam->szParam1; // 分机 主叫
- m_CalleeNum = pParam->szParam2; // 被叫
- m_CallerAgent = pParam->nParam1; // 分机对应的坐席
- int taskId = pParam->nParam3; // 任务id
- int callType = pParam->nParam2; // 自动外呼任务类型
- // 启动日志
- LOG_INFO("{OpAutoCall}: 执行自动外呼, AgentID = %s, CallerNum = %s, CalleeNum = %s", m_CallerAgent.c_str(), m_CallerNum.c_str(), m_CalleeNum.c_str());
- return CFsProxy::GetInstance().AutoCall(uniqueId() , m_CallerNum, m_CalleeNum, callType, taskId);
- }
- bool COpAutoCall::hangup(long InstanceHangup)
- {
- // 外呼取消日志
- LOG_INFO("{OpAutoCall}: 中继自动呼叫中挂机, TrunkNo = %lu, DestNum = %s", m_pHostChan->no(), m_CalleeNum.c_str());
- if (m_pHostChan == nullptr)
- return false;
- m_InstanceCancel = InstanceHangup;
- return CFsProxy::GetInstance().kill(uniqueId(), m_pHostChan);
- }
- void COpAutoCall::onBackgroudJobDone(PBG_JOB_NOTIFY pNotify)
- {
- if (pNotify->JobCmd == ESL_CMD_MAKE_CALL)
- {
- if(pNotify->JobBody.find(ESL_JOB_DONE_RES_OK) ==string::npos)
- _end(false);
- }
- }
- //void COpAutoCall::onAssoChanStateUpdated(VirtualChan * pAssoChan)
- //{
- // if (m_pHostChan == nullptr)
- // {
- // attachHostChan(pAssoChan);
- // onHostChanStateUpdated(pAssoChan);
- // }
- //}
- void COpAutoCall::onHostChanStateUpdated(VirtualChan * pHostChan)
- {
- switch ((int)pHostChan->state())
- {
- case CHAN_LOGIC_STATE_RING_BACK:
- m_pParent->onOpProcess(m_Instance, pHostChan->no(), pHostChan->no(), pHostChan->type(), pHostChan->callerNum(), pHostChan->calleeNum());
- break;
- case CHAN_LOGIC_STATE_STANDBY:
- _end(true);
- break;
- case CHAN_LOGIC_STATE_FREE:
- _end(false);
- break;
- }
- }
- void COpAutoCall::_end(bool IsSucceed)
- {
- uint32_t TrunkNo = 0;
- if (m_pHostChan != nullptr)
- TrunkNo = m_pHostChan->no();
- if (IsSucceed)
- {
- LOG_INFO("{OpAutoCall}: 中继自动外呼成功, TrunkNo = %lu, DestNum = %s", TrunkNo, m_CalleeNum.c_str());
- }
- else
- {
- LOG_WARN("{OpAutoCall}: 中继自动外呼失败, TrunkNo = %lu, DestNum = %s", TrunkNo, m_CalleeNum.c_str());
- }
- // 返回执行结果
- if (m_InstanceCancel != FS_LINK_INSTANCE_INVALID)
- m_pParent->onOpResult(m_InstanceCancel, !IsSucceed);
- m_pParent->onOpResult(m_Instance, this, IsSucceed, std::to_string(TrunkNo));
- }
|