首页
>>
厂商
>>
CT中间件厂商
>>
朗深技术
使用Java应用程序快速实现自己的专用IVR
2009/06/04
1.涉及的组件
Jcom.jar
2.应用环境
使用Java Application开发固定流程的IVR。
3.目标功能
来话后放音,放音完成后挂机。
4.主要代码片段
///////////////////////////////////////////////////////////////////////////////
Part 1: 主处理类
package examples;
import lioncen.cti.jcom.engine.*;
import lioncen.cti.jcom.object.*;
import java.awt.*;
import java.awt.event.*;
/**
* 全局事件处理器
* 从CTIEventAdapter继承,用来实现CTI全局消息处理
*/
class MyCTIEventHandler extends CTIEventAdapter
{
/**
* 来话通知,产生单独的线程去处理逻辑
*/
public void callIncome(int pid, CALL call, String ano, String bno)
{
SCPMANAGER.ctiLog.Debug("MainEventHandler",
"PID=" + pid + " CallIncome: Ano=" + ano
+ " Bno=" + bno + " CallID=" + call.callID);
JComDemoThread teleThd = new JComDemoThread(call);
teleThd.start();
}
/**
* 挂机通知,输出日志
*/
public void callEnd(int pid, CALL call)
{
SCPMANAGER.ctiLog.Debug("MainEventHandler",
"PID=" + pid + " CallEnd: CallID=" + call.callID);
}
}
/** 主处理类,应用入口
* 收到来话事件后,产生单独的处理线程处理话务逻辑
*/
public class JComTest
{
//定义静态的管理器对象
static SCPMANAGER mgr = new SCPMANAGER();
public static void main(String Args[])
{
Frame mywin = new Frame("JCom Test");
mywin.setSize(300, 300);
mywin.setBackground(Color.BLUE);
mywin.setVisible(true);
mywin.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
SCPMANAGER.ctiEngine.stop();
SCPMANAGER.ctiLog.Notify("Main", "程序正常退出");
System.exit(0);
}
});
//设置管理器对象的消息处理器
mgr.ctiEventListener = new MyCTIEventHandler();
}
}
///////////////////////////////////////////////////////////////////
Part 2: 电话处理线程类
package examples;
import lioncen.cti.jcom.*;
import lioncen.cti.jcom.object.*;
import lioncen.cti.jcom.engine.*;
/**
* 线程事件处理函数
* 从CTIThreadEventAdapter继承,用来实现线程消息处理
*
*/
class MyThreadEventHandler extends CTIThreadEventAdapter
{
/**
* 来话通知
*/
public void callIncome(CTITeleThread thd, CALL call, String ano, String bno)
{
SCPMANAGER.ctiLog.Debug("ThreadEventHandler", "PID=" + thd.processID
+ " CallIncome: Ano=" + ano + " Bno=" + bno);
}
/**
* 挂机通知
*/
public void callEnd(CTITeleThread thd, CALL call)
{
SCPMANAGER.ctiLog.Debug("ThreadEventHandler", "PID=" + thd.processID
+ " CallEnd: CallID=" + call.callID);
thd.terminate = true;
}
// 其它消息与本例子无关,请参考JCOM API
}
/**
*
* 处理电话逻辑的线程类
* 一个简单的例子
* 收到电话后应答,并开始循环播放Welcome.vox文件,播放30秒后挂机
*/
public class JComDemoThread extends CTITeleThread
{
public JComDemoThread(CALL call)
{
//构造基类
super(call);
//设置线程中管理器对象对应的时间处理器
thdSCPManager.thdEventListener = new MyThreadEventHandler();
}
public void Sleep(int msec)
{
try
{
sleep(msec);
}
catch (InterruptedException e)
{
}
}
public void run()
{
//应答电话
int ret = originalCall.answer();
if (ret == CTIConst.RET_FAIL)
{
System.out.println("应答失败");
return;
}
//设置关联的线程ID,后续关于此线程的消息将直接通知线程
originalCall.attachProcessID(processID);
//显示来话信息
System.out.println("来话:主叫="
+ originalCall.getAno()
+ " 被叫=" + originalCall.getBno()
+ " 时间=" + originalCall.getOccurTime());
//循环异步放音,播放CTI服务器上的D:\\vox\\welcome.vox文件
int taskid = originalCall.play(true, true, "D:\\vox\\welcome.vox");
//放音等待30秒
Sleep(30000);
//停止放音
originalCall.stopOP(taskid);
//挂机
originalCall.onHook();
//等待挂机消息,挂机消息处理函数中设置terminate为true
while (terminate == false)
{
Sleep(1000);
}
//线程清理,很重要!
finalize();
}
}
CTI论坛报道
相关链接:
使用C++Builder快速实现自己的专用IVR
2009-06-05
UniMedia Script++常用对象及使用
2009-06-03
UniMedia MSIX座席控件的使用
2009-06-02
UniMedia MSIX座席控件Delphi调用实例解析
2009-06-01
UniMedia IDE集成环境文件操作实例解析
2009-05-22