2009/05/15
1.應用場(chǎng)景//假定CTI引擎的人工服務(wù)結束通知開(kāi)關(guān)已經(jīng)打開(kāi),即CTI引擎的system.config中的參數AGENTOVETOIVR=1,缺省是AGENTOVETOIVR=0
/////////////////////////////
//全局變量聲明
SCPMANAGER g_SCPManager
//進(jìn)程主函數
sub main(LIST& cpl)
{
int iCallID, iTaskID, iRet
CALL callOriginal
bool isTimeout
//注冊系統錯誤事件處理函數
EventMap(INF_SYS_ERROR, OnSysError, 0)
//注冊CALL掛機事件處理函數
EventMap(INF_CTI_ONHOOK, OnCallEndInform, 0)
//在BOOT進(jìn)程啟動(dòng)該進(jìn)程時(shí),參數是按照CALLID、ANO、BNO,UUD順序先后存放在參數列表cpl中
//根據業(yè)務(wù)需要取出參數值
//獲取進(jìn)程命令行參數中的CallID
cpl.GetItem(0, iCallID, iRet)
Log(DBG, "Call Income: CallID=", iCallID)
//根據對象ID獲得當前Call對象
g_SCPManager.FindCallByID(iCallID, callOriginal, iRet)
//設置Call對象的業(yè)務(wù)處理進(jìn)程ID為當前進(jìn)程
callOriginal.AttachCurrentProcess(iRet)
//應答CALL
callOriginal.Answer(iRet)
callOriginal.Play(false,false,"welcome.vox", iTaskID, iRet)
//來(lái)話(huà)轉換2000ACD隊列,等候人工座席服務(wù)
callOriginal.Forward("2000",-1,"",iRet)
if (iRet == RET_SUCC)
{
Log(DBG,"轉ACD隊列成功")
}
//等待人工服務(wù)結束事件
EventWait(INF_CTI_AGENTSERVICEOVER,callOriginal.CallID,-1,isTimeout)
//等到后繼續其它流程處理
callOriginal.Play(false,false,"musichold.vox", iTaskID, iRet)
//...
//等待用戶(hù)掛機事件
Wait(-1)
}
//掛機通知處理函數
sub OnCallEndInform(int tag, CALL& call)
{
Log(INF, "OnHooked. CallID=", call.CallID)
Log(INF, "Exit...")
//腳步進(jìn)程因用戶(hù)掛機結束
Exit("OnHook")
}
//錯誤處理函數
sub OnSysError(int tag)
{
Log(ERR, "System error: ", __LASTERRSTR__)
//腳步進(jìn)程因命令調用失敗結束
Exit("Error")
}
CTI論壇報道