首頁(yè)>>廠(chǎng)商>>CT中間件廠(chǎng)商>>朗深技術(shù)

UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-多機同振 [附源碼]

2009/05/15

1.應用場(chǎng)景

  用戶(hù)有多個(gè)號碼,在撥其中一個(gè)號碼時(shí),另一個(gè)號碼同時(shí)振鈴,并且接通一個(gè)后,另一個(gè)停止振鈴。

2.源碼片段
  假定發(fā)起呼叫的內線(xiàn)分機為1000,同時(shí)響鈴的分機為1001,1002,具體代碼
//////////////////////////////////////////////////////////////////
CALL callOriginal
CALL callFst
CALL callSnd
//全局變量聲明
SCPMANAGER g_SCPManager

//進(jìn)程主函數
sub main(LIST& cpl)
{
int iCallID, iTaskID, iRet
string sBno1,sBno2

//注冊系統錯誤事件處理函數
EventMap(INF_SYS_ERROR, OnSysError, 0)
//注冊CALL掛機事件處理函數
EventMap(INF_CTI_ONHOOK, OnCallEndInform, 0)
//注冊異步結束事件處理函數
EventMap(INF_SYS_ASYNCFINISHED, OnAsyncFinished, 0)
//注冊CALL連接事件處理函數
EventMap(INF_CTI_ROUTED, OnRoutedInform, 0)


//獲取進(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)

//給主叫放等待音樂(lè )
callOriginal.Play(true,true,"musichold.vox",iTaskID,iRet)

Log(DBG,"給主叫播放等待音樂(lè )成功,TASKID=",iTaskID)

//根據業(yè)務(wù)需求確定多個(gè)被叫號碼
sBno1 = "1001"
sBno2 = "1002"


int iMakeTaskID1,iMakeTaskID2
//發(fā)起兩次呼叫
g_SCPManager.MakeCall("",sBno1,-1,true,callFst,iMakeTaskID1,iRet)
if (iRet == RET_FAIL)
{
Log(DBG,"呼出失敗,Bno=",sBno1, "; error:",__LASTERRSTR__)
callOriginal.OnHook(iRet)
Exit("Make Call Fail")
}
else
{
//設置Call對象的業(yè)務(wù)處理進(jìn)程ID為當前進(jìn)程
callFst.AttachCurrentProcess(iRet)
Log(DBG,"正在呼出,Bno=",sBno1, "; CallID=",callFst.CallID)
}

g_SCPManager.MakeCall("",sBno2,-1,true,callSnd,iMakeTaskID2,iRet)
if (iRet == RET_FAIL)
{
Log(DBG,"呼出失敗,Bno=",sBno2, "; error:",__LASTERRSTR__)
callFst.OnHook(iRet)
callOriginal.OnHook(iRet)
Exit("Make Call Fail")
}
else
{
//設置Call對象的業(yè)務(wù)處理進(jìn)程ID為當前進(jìn)程
callSnd.AttachCurrentProcess(iRet)
Log(DBG,"正在呼出,Bno=",sBno2, "; CallID=",callSnd.CallID)
}

Log(DBG,"等待主叫用戶(hù)掛機...")
//等待用戶(hù)掛機事件
Wait(-1)
}

//掛機通知處理函數,只有主叫掛機才結束腳本線(xiàn)程
sub OnCallEndInform(int tag, CALL& call)
{
Log(INF, "OnHooked. CallID=", call.CallID)
if (call.CallID == callOriginal.CallID)
{
Log(INF,"因主叫用戶(hù)掛機,準備結束腳本線(xiàn)程...")
//增加下面三行就可以了
int ret
callFst.StopOP(-1,ret)
callSnd.StopOP(-1,ret)
Exit("callOriginal onhook")
}
}

//錯誤處理函數
sub OnSysError(int tag)
{
Log(ERR, "System error: ", __LASTERRSTR__)
}

//異步結束事件
sub OnAsyncFinished(int tag, CALL& call, int optype, int taskid, int ret)
{
int iRet

if (ret == RET_SUCC)
{
Log(INF, "異步結束OK. CallID=", call.CallID, " optype=", optype, " taskid=", taskid)
//如果是MAKE CALL成功異步事件需要進(jìn)行連接處理
if (optype == 8)
{
//停止主叫等待音樂(lè )
callOriginal.StopOP(-1,iRet)
//連接主叫和先摘機的被叫
callOriginal.ConnectCall(call,iRet)

//停止還沒(méi)有摘機的呼叫
if (call.CallID == callFst.CallID)
{

callSnd.StopOP(-1,iRet)
}
elseif(call.CallID == callSnd.CallID)
{
callFst.StopOP(-1,iRet)
}
}//make call 異步結束
}
else
{
Log(INF, "異步結束FAIL. CallID=", call.CallID, " optype=", optype, " taskid=", taskid)
}
}

//被路由通知處理函數
sub OnRoutedInform(int tag, CALL& call1, CALL& call2)
{
Log(INF, "Routed. CallID1=", call1.CallID, " CallID2=", call2.CallID)

CTI論壇報道


相關(guān)鏈接:
UniMedia 6S級電話(huà)語(yǔ)音中間件應用-自動(dòng)人工互轉 2009-05-15
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-J2EE呼叫中心 2009-05-13
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-電話(huà)QQ 2009-05-12
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-B/S呼叫中心 2009-05-11
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-企話(huà)通 2009-05-08
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 新巴尔虎右旗| 清新县| 陕西省| 宁波市| 秦皇岛市| 扎囊县| 融水| 莲花县| 衡山县| 石台县| 勐海县| 监利县| 武强县| 双柏县| 普洱| 资兴市| 祁东县| 彭州市| 柳河县| 凤冈县| 青海省| 拜泉县| 石台县| 武乡县| 四子王旗| 边坝县| 吴旗县| 高州市| 揭阳市| 淄博市| 宜兰市| 九龙坡区| 萍乡市| 区。| 景德镇市| 仁布县| 措勤县| 牙克石市| 新化县| 霍城县| 社旗县| http://444 http://444 http://444 http://444 http://444 http://444