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

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

2009/05/11

1.應用場(chǎng)景
  電信增值應用。客戶(hù)打電話(huà)進(jìn)入系統,按鍵選擇聊天室,或者自動(dòng)查找匹配的用戶(hù),進(jìn)行一對一的聊天。

2.源碼片段

  假定呼入電話(huà),聽(tīng)到提示音,按鍵為1的為等待聊天用戶(hù),電話(huà)呼入按鍵為2的為主動(dòng)尋找等待聊天的用戶(hù)

//全局變量定義

SCPMANAGER g_SCPManager
CALL g_TheCall
int g_iTaskID

sub main(LIST& cpl)
{
int iCallID, iRet

//注冊系統錯誤處理函數
EventMap(INF_SYS_ERROR, OnSysError, 0)
//注冊?huà)鞕C通知處理函數
EventMap(INF_CTI_ONHOOK, OnCallEndInform, 0)
//注冊被路由通知處理函數
EventMap(INF_CTI_ROUTED, OnRoutedInform, 0)
//注冊取消路由通知處理函數
EventMap(INF_CTI_UNROUTED, OnUnroutedInform, 0)
//注冊異步結束通知處理函數
EventMap(INF_SYS_ASYNCFINISHED, OnAsyncFinishedInform, 0)

//在BOOT進(jìn)程啟動(dòng)該進(jìn)程時(shí),參數是按照CALLID、ANO、BNO,UUD順序先后存放在參數列表cpl中
//根據業(yè)務(wù)需要取出參數值

//獲得命令行參數的callid
cpl.GetItem(0, iCallID, iRet)
Log(DBG, "Call Income: CallID=", iCallID)

//根據對象ID獲得當前Call對象
g_SCPManager.FindCallByID(iCallID, g_TheCall, iRet)
//設置Call對象的業(yè)務(wù)處理進(jìn)程ID為當前進(jìn)程
g_TheCall.AttachCurrentProcess(iRet)
//應答CALL
g_TheCall.Answer(iRet)


//來(lái)話(huà)聊天業(yè)務(wù)處理過(guò)程:
//來(lái)話(huà)應答成功后,首先進(jìn)行放音收碼,在分析用戶(hù)的按鍵
// 如果用戶(hù)按鍵為"1",則假定用戶(hù)為等候交談的客戶(hù),設置業(yè)務(wù)參數名值對為("Number"、"Waiting"),用戶(hù)聽(tīng)音樂(lè )等待其它用戶(hù)的交談申請
// 如果用戶(hù)按鍵為"2",則假定用戶(hù)為主動(dòng)尋找交談的客戶(hù),則從業(yè)務(wù)參數名值對為("Number"、"Waiting")的等待用戶(hù)中查找一個(gè)進(jìn)行交談,并把等待呼叫的名值對該為("Number"、"Connecting")
// 如果用戶(hù)按鍵為其它,則在循環(huán)播放收碼
while(true)
{
//同步循環(huán)放音收碼
string sDigits,sTermChar
g_TheCall.PlayReceiveDTMF(true, "welcome.vox", 1, "*", sTermChar, sDigits, -1, iRet)

switch(sDigits)
{
case("1")
//等待被連接
Log(DBG, "Playing wait music to Income Call(", iCallID, ").")
g_TheCall.Play(true, true, "musichold.vox", g_iTaskID, iRet)
//設置呼叫對象的業(yè)務(wù)名值對
g_TheCall.SetParam("Number", sDigits, iRet)
//注冊被連接事件函數
EventMap(INF_CTI_ROUTED, OnRoutedInform, 1)

//無(wú)限等待(直到用戶(hù)主動(dòng)掛機)
Wait(-1)
break

case("2")
//設置呼叫對象為查找用戶(hù)的標志
g_TheCall.SetParam("Number", sDigits, iRet)
//查找空閑等候用戶(hù),主動(dòng)進(jìn)行連接
Log(DBG, "Matching user(", iCallID, ")...")

//查找交談對象并進(jìn)行連接操作,實(shí)現通話(huà)交流
MatchWaitingUser(g_TheCall)

//無(wú)限等待(直到用戶(hù)主動(dòng)掛機)
Wait(-1)
break

default
Log(DBG, "用戶(hù)按鍵其它碼,需重新收碼,Digits=", sDigits)
break
}//end of Switch
}// end of While

Log(DBG, "Finished. Bye.")
}

//查找函數的業(yè)務(wù)處理過(guò)程:
//首先給主動(dòng)查找用戶(hù)播放等待提示語(yǔ)音
//然后根據呼叫對象的名值對從全局呼叫對象實(shí)例管理器中查找等待呼叫
//如果成功找到,則停止當前呼叫的提示語(yǔ)音,主動(dòng)進(jìn)行連接通話(huà)操作
//如果沒(méi)有找到,則等待1秒鐘在循環(huán)查找
sub MatchWaitingUser(CALL& call)
{
int iRet,iTaskID

//異步循環(huán)放音
call.Play(true, true, "waiting.vox", iTaskID, iRet)


while(true)
{
CALL callWait
//根據名值對查找等待呼叫對象
g_SCPManager.FindCallByParam("Number", "1", callWait, iRet)
if (iRet == RET_SUCC)
{
//重新設置等待連接呼叫的名值對
callWait.SetParam("Number","Connecting",iRet)

//找到等待用戶(hù),停止當前呼叫的語(yǔ)音提示
call.StopOP(iTaskID, iRet)

//主動(dòng)連接兩個(gè)CALL
call.ConnectCall(callWait, iRet)
break
}
else
{
//沒(méi)有找到,1000毫秒后繼續尋找
Wait(1000)
}
}//end of while
}

//Chat工程中所有事件處理函數實(shí)現

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

//掛機通知處理函數
sub OnCallEndInform(int tag, CALL& call)
{
Log(INF, "OnHooked. CallID=", call.CallID)
Log(INF, "Exit...")
Exit("掛機退出")
}

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

int iRet
string paraValue
//在連接前已經(jīng)把等待呼叫的名值對的值由1改為Connecting
call1.GetParam("Number", paraValue, iRet)
if (paraValue == "Connecting")
{
//call1如果是被連接的等待用戶(hù),需要停止它已經(jīng)在播放的等候音樂(lè )
call1.StopOP(g_iTaskID, iRet)
}
}

//取消路由通知處理函數
sub OnUnroutedInform(int tag, CALL& call1, CALL& call2)
{
Log(INF, "Unrouted. CallID1=", call1.CallID, " CallID2=", call2.CallID)
}

//異步結束通知處理函數
sub OnAsyncFinishedInform(int tag, CALL& call, int optype, int taskid, int ret)
{
if (ret == RET_SUCC)
{
Log(INF, "異步結束OK. CallID=", call.CallID, " optype=", optype, " taskid=", taskid)
}
else
{
Log(INF, "異步結束FAIL. CallID=", call.CallID, " optype=", optype, " taskid=", taskid)
}
}

CTI論壇報道


相關(guān)鏈接:
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-B/S呼叫中心 2009-05-11
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-企話(huà)通 2009-05-08
UniMedia 6S級電話(huà)語(yǔ)音中間件典型應用-C/S呼叫中心 2009-05-07
朗深技術(shù) UniMedia——6S級電話(huà)語(yǔ)音中間件 2009-05-06
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 榆中县| 奉新县| 松滋市| 新龙县| 临泉县| 汶川县| 阳春市| 平湖市| 绥德县| 全南县| 南岸区| 五大连池市| 巴彦淖尔市| 米泉市| 灵璧县| 顺昌县| 江油市| 临洮县| 米林县| 克拉玛依市| 荆门市| 南溪县| 襄城县| 瑞金市| 庆元县| 化隆| 铁岭县| 库尔勒市| 新闻| 大英县| 武强县| 湖口县| 顺义区| 汉川市| 宁陕县| 含山县| 洪江市| 林芝县| 苗栗市| 清苑县| 白沙| http://444 http://444 http://444 http://444 http://444 http://444