UniMedia 6S級電話語音中間件典型應用-自動人工互轉(zhuǎn)
[附源碼]
2009/05/15
1.應用場景
在呼叫中心系統(tǒng),在對客戶提供IVR自動語音服務過程中,可以根據(jù)需要中斷自動流程,轉(zhuǎn)入人工進行服務,在人工服務完成后,可以再次轉(zhuǎn)入IVR,并且,能夠從中斷的位置繼續(xù)自動服務流程。目前其他中間件從人工轉(zhuǎn)入自動后,將重新開始新的IVR交互或從指定位置繼續(xù),其中的過程數(shù)據(jù)均已丟失。
2.源碼片段
//假定CTI引擎的人工服務結(jié)束通知開關已經(jīng)打開,即CTI引擎的system.config中的參數(shù)AGENTOVETOIVR=1,缺省是AGENTOVETOIVR=0
/////////////////////////////
//全局變量聲明
SCPMANAGER g_SCPManager
//進程主函數(shù)
sub main(LIST& cpl)
{
int iCallID, iTaskID, iRet
CALL callOriginal
bool isTimeout
//注冊系統(tǒng)錯誤事件處理函數(shù)
EventMap(INF_SYS_ERROR, OnSysError, 0)
//注冊CALL掛機事件處理函數(shù)
EventMap(INF_CTI_ONHOOK, OnCallEndInform, 0)
//在BOOT進程啟動該進程時,參數(shù)是按照CALLID、ANO、BNO,UUD順序先后存放在參數(shù)列表cpl中
//根據(jù)業(yè)務需要取出參數(shù)值
//獲取進程命令行參數(shù)中的CallID
cpl.GetItem(0, iCallID, iRet)
Log(DBG, "Call Income: CallID=", iCallID)
//根據(jù)對象ID獲得當前Call對象
g_SCPManager.FindCallByID(iCallID, callOriginal, iRet)
//設置Call對象的業(yè)務處理進程ID為當前進程
callOriginal.AttachCurrentProcess(iRet)
//應答CALL
callOriginal.Answer(iRet)
callOriginal.Play(false,false,"welcome.vox", iTaskID, iRet)
//來話轉(zhuǎn)換2000ACD隊列,等候人工座席服務
callOriginal.Forward("2000",-1,"",iRet)
if (iRet == RET_SUCC)
{
Log(DBG,"轉(zhuǎn)ACD隊列成功")
}
//等待人工服務結(jié)束事件
EventWait(INF_CTI_AGENTSERVICEOVER,callOriginal.CallID,-1,isTimeout)
//等到后繼續(xù)其它流程處理
callOriginal.Play(false,false,"musichold.vox", iTaskID, iRet)
//...
//等待用戶掛機事件
Wait(-1)
}
//掛機通知處理函數(shù)
sub OnCallEndInform(int tag, CALL& call)
{
Log(INF, "OnHooked. CallID=", call.CallID)
Log(INF, "Exit...")
//腳步進程因用戶掛機結(jié)束
Exit("OnHook")
}
//錯誤處理函數(shù)
sub OnSysError(int tag)
{
Log(ERR, "System error: ", __LASTERRSTR__)
//腳步進程因命令調(diào)用失敗結(jié)束
Exit("Error")
}
CTI論壇報道
相關鏈接:
阿拉善盟|
公主岭市|
大丰市|
虹口区|
洛扎县|
定远县|
澄江县|
辽宁省|
房产|
庆城县|
滨海县|
和静县|
电白县|
蒲江县|
鄂伦春自治旗|
锡林郭勒盟|
温宿县|
嫩江县|
苏尼特右旗|
仲巴县|
华蓥市|
板桥市|
马公市|
青龙|
巴马|
黔南|
象州县|
增城市|
密云县|
东兴市|
凤山县|
承德市|
鸡西市|
张家港市|
郁南县|
南城县|
富顺县|
石林|
鹤岗市|
昌平区|
旬邑县|