使用Java應(yīng)用程序快速實(shí)現(xiàn)自己的專用IVR 
 2009/06/04
1.涉及的組件
  Jcom.jar
                  2.應(yīng)用環(huán)境
  使用Java Application開發(fā)固定流程的IVR。 
                  3.目標(biāo)功能
  來話后放音,放音完成后掛機(jī)。
                  4.主要代碼片段
///////////////////////////////////////////////////////////////////////////////
Part 1: 主處理類
package examples;
import lioncen.cti.jcom.engine.*;
import lioncen.cti.jcom.object.*;
import java.awt.*;
import java.awt.event.*;
/**
 * 全局事件處理器
 * 從CTIEventAdapter繼承,用來實(shí)現(xiàn)CTI全局消息處理
 */
class MyCTIEventHandler extends CTIEventAdapter
{
	/**
	 * 來話通知,產(chǎn)生單獨(dú)的線程去處理邏輯
	 */
	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();
	}
	/**
	 * 掛機(jī)通知,輸出日志
	 */
	public void callEnd(int pid, CALL call)
	{
		SCPMANAGER.ctiLog.Debug("MainEventHandler", 
"PID=" + pid + " CallEnd: CallID=" + call.callID);
	}
}
/**  主處理類,應(yīng)用入口
*  收到來話事件后,產(chǎn)生單獨(dú)的處理線程處理話務(wù)邏輯
 */
public class JComTest
{
	//定義靜態(tài)的管理器對象
	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);
			}
		});
		
		//設(shè)置管理器對象的消息處理器
		mgr.ctiEventListener = new MyCTIEventHandler();
	}
}
///////////////////////////////////////////////////////////////////
Part 2: 電話處理線程類
package examples;
import lioncen.cti.jcom.*;
import lioncen.cti.jcom.object.*;
import lioncen.cti.jcom.engine.*;
/**
 * 線程事件處理函數(shù)
* 從CTIThreadEventAdapter繼承,用來實(shí)現(xiàn)線程消息處理
*
 */
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);
	}
	/**
	 * 掛機(jī)通知
	 */
	public void callEnd(CTITeleThread thd, CALL call)
	{
		SCPMANAGER.ctiLog.Debug("ThreadEventHandler", "PID=" + thd.processID 
				+ " CallEnd: CallID=" + call.callID);
		thd.terminate = true;
	}
	
	// 其它消息與本例子無關(guān),請參考JCOM API
	
}
/**
* 
 *  處理電話邏輯的線程類
 *   一個(gè)簡單的例子
 *   收到電話后應(yīng)答,并開始循環(huán)播放Welcome.vox文件,播放30秒后掛機(jī)
 */
public class JComDemoThread extends CTITeleThread
{
	public JComDemoThread(CALL call)
	{
		//構(gòu)造基類
		super(call);
		//設(shè)置線程中管理器對象對應(yīng)的時(shí)間處理器
		thdSCPManager.thdEventListener = new MyThreadEventHandler();
	}
	
	public void Sleep(int msec)
	{
		try
		{
			sleep(msec);
		}
		catch (InterruptedException e)
		{
		}
	}
	
	public void run()
	{
		//應(yīng)答電話
		int ret = originalCall.answer();
		if (ret == CTIConst.RET_FAIL)
		{
			System.out.println("應(yīng)答失敗");
			return;
		}
	
		//設(shè)置關(guān)聯(lián)的線程ID,后續(xù)關(guān)于此線程的消息將直接通知線程
		originalCall.attachProcessID(processID);
		//顯示來話信息
		System.out.println("來話:主叫=" 
				+ originalCall.getAno() 
				+ " 被叫=" + originalCall.getBno() 
				+ " 時(shí)間=" + originalCall.getOccurTime());
		//循環(huán)異步放音,播放CTI服務(wù)器上的D:\\vox\\welcome.vox文件
		int taskid = originalCall.play(true, true, "D:\\vox\\welcome.vox");
		//放音等待30秒
		Sleep(30000);
		
		//停止放音
		originalCall.stopOP(taskid);
		//掛機(jī)
		originalCall.onHook();
		
		//等待掛機(jī)消息,掛機(jī)消息處理函數(shù)中設(shè)置terminate為true
		while (terminate == false)
		{
			Sleep(1000);
		}
		
		//線程清理,很重要!
		finalize();
	}
}
CTI論壇報(bào)道
 相關(guān)鏈接:
鸡东县|
田阳县|
津市市|
永善县|
通化市|
屏山县|
沛县|
永嘉县|
浮山县|
沐川县|
东兴市|
卢氏县|
云和县|
东乡族自治县|
永福县|
马边|
平原县|
介休市|
海城市|
汉中市|
绵阳市|
余庆县|
惠州市|
石河子市|
大洼县|
襄汾县|
牙克石市|
定南县|
孝昌县|
高淳县|
海安县|
阳西县|
汨罗市|
清涧县|
万山特区|
都兰县|
榆树市|
房山区|
灵台县|
贵南县|
灌阳县|