首页>>厂商>>CT中间件厂商>>朗深技术

UniMedia 6S级电话语音中间件典型应用-自动人工互转 [附源码]

2009/05/15

1.应用场景

  在呼叫中心系统,在对客户提供IVR自动语音服务过程中,可以根据需要中断自动流程,转入人工进行服务,在人工服务完成后,可以再次转入IVR,并且,能够从中断的位置继续自动服务流程。目前其他中间件从人工转入自动后,将重新开始新的IVR交互或从指定位置继续,其中的过程数据均已丢失。

2.源码片段

//假定CTI引擎的人工服务结束通知开关已经打开,即CTI引擎的system.config中的参数AGENTOVETOIVR=1,缺省是AGENTOVETOIVR=0
/////////////////////////////

//全局变量声明
SCPMANAGER g_SCPManager

//进程主函数
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进程启动该进程时,参数是按照CALLID、ANO、BNO,UUD顺序先后存放在参数列表cpl中
//根据业务需要取出参数值

//获取进程命令行参数中的CallID
cpl.GetItem(0, iCallID, iRet)

Log(DBG, "Call Income: CallID=", iCallID)

//根据对象ID获得当前Call对象
g_SCPManager.FindCallByID(iCallID, callOriginal, iRet)
//设置Call对象的业务处理进程ID为当前进程
callOriginal.AttachCurrentProcess(iRet)
//应答CALL
callOriginal.Answer(iRet)

callOriginal.Play(false,false,"welcome.vox", iTaskID, iRet)

//来话转换2000ACD队列,等候人工座席服务
callOriginal.Forward("2000",-1,"",iRet)
if (iRet == RET_SUCC)
{
Log(DBG,"转ACD队列成功")
}

//等待人工服务结束事件
EventWait(INF_CTI_AGENTSERVICEOVER,callOriginal.CallID,-1,isTimeout)
//等到后继续其它流程处理
callOriginal.Play(false,false,"musichold.vox", iTaskID, iRet)
//...

//等待用户挂机事件
Wait(-1)
}

//挂机通知处理函数
sub OnCallEndInform(int tag, CALL& call)
{
Log(INF, "OnHooked. CallID=", call.CallID)
Log(INF, "Exit...")

//脚步进程因用户挂机结束
Exit("OnHook")
}

//错误处理函数
sub OnSysError(int tag)
{
Log(ERR, "System error: ", __LASTERRSTR__)

//脚步进程因命令调用失败结束
Exit("Error")
}

CTI论坛报道


相关链接:
UniMedia 6S级电话语音中间件典型应用-J2EE呼叫中心 2009-05-13
UniMedia 6S级电话语音中间件典型应用-电话QQ 2009-05-12
UniMedia 6S级电话语音中间件典型应用-B/S呼叫中心 2009-05-11
UniMedia 6S级电话语音中间件典型应用-企话通 2009-05-08
UniMedia 6S级电话语音中间件典型应用-C/S呼叫中心 2009-05-07