新太openEAPBS坐席业务开发手册.docx
《新太openEAPBS坐席业务开发手册.docx》由会员分享,可在线阅读,更多相关《新太openEAPBS坐席业务开发手册.docx(11页珍藏版)》请在冰豆网上搜索。
![新太openEAPBS坐席业务开发手册.docx](https://file1.bdocx.com/fileroot1/2022-12/7/0f61d2d7-1049-4cac-b4e8-2ae5c29dae4e/0f61d2d7-1049-4cac-b4e8-2ae5c29dae4e1.gif)
新太openEAPBS坐席业务开发手册
openEAP-BS坐席业务开发手册
编制:
新太科技开发中心
2007.06.04
目录
1.编写说明3
2.核心类库3
2.1.eap_agent_common.jar3
3.坐席业务应用的开发3
3.1.坐席业务应用服务端接口3
3.1.1.获取操作员相关信息3
3.1.2.获取来电客户相关信息5
3.2.坐席业务模块前台操作(HTML/JavaScript)6
3.2.1.坐席框架界面说明6
3.2.2.frame_cti桢内提供的可访问对象6
3.3.坐席业务模块中处理常用话路事件/消息7
3.4.座席框架与IVR相关的相关约定9
3.5.坐席控件提供TCP话务操作接口9
3.6.坐席控件提供HTTP话务操作接口10
1.编写说明
本手册是为指导开发人员在openEAP1.1以上平台上开发坐席业务应用而编写的。
开发人员编写的坐席业务Web应用是基于坐席框架的,用来实现某一客户需求的,带界面或不带界面的web模块。
首先,坐席业务Web应用的开发必须遵循J2EE规范。
为了配置和使用的方便,坐席业务Web应用也需要基于openEAP平台,需要符合openEAP业务开发规范《openEAP平台应用开发手册》。
坐席业务Web应用需要部署在新太openEAP企业应用平台上,与坐席框架应用agent.war部署在一起。
在符合openEAP业务开发规范的前提下,开发坐席业务Web应用,请阅读本手册。
2.核心类库
2.1.eap_agent_common.jar
提供与坐席框架相关接口的API。
3.坐席业务应用的开发
3.1.坐席业务应用服务端接口
坐席业务应用服务端是指运行于openEAP—J2EE容器中JavaVM中的后台JSP/JavaBean等程序代码。
3.1.1.获取操作员相关信息
可以通过从坐席框架的共享变量获取或openEAP平台两种接口方法获取登录的操作员信息。
1)从坐席框架的共享变量获取:
通过此接口获取坐席登陆信息,请在坐席业务程序开发的时候引入坐席开发类库eap_agent_common.jar,该文件位于(openEAP)/eapserver/lib目录下。
打包发布时不需要将此jar一起打包到坐席业务程序中。
示例代码如下:
//import类来自eap_agent_common.jar
importcom.suntek.app.session.SessionRegister;
importcom.suntek.app.consts.CallConst;
Vectorv_AgentInfo=null;
Objecto=SessionRegister.getUserProperty(SessionRegister.USERTYPE_OPERATOR,
SessionRegister.getUserId(request,null),
CallConst.SESSION_AGENT_INFO);
if(o!
=null){
v_AgentInfo=(Vector)o;
StringagentId=(String)v_AgentInfo.elementAt
(1);//工号
StringagentName=(String)v_AgentInfo.elementAt
(2);//姓名
StringloginTime=(String)v_AgentInfo.elementAt(3);//登录时间
StringagentPwd=(String)v_AgentInfo.elementAt(4);//密码
StringagentSkill=(String)v_AgentInfo.elementAt(5);//职务102为班长
StringmacVol=(String)v_AgentInfo.elementAt(6);//Mac卡音量
StringqueueTips=(String)v_AgentInfo.elementAt(7);//排队提示标记
StringagentBureauid=(String)v_AgentInfo.elementAt(8);//企业编码3位
StringagentOrg=(String)v_AgentInfo.elementAt(9);//部门编码
StringentBriefName=(String)v_AgentInfo.elementAt(10);//企业简称
StringagentTele=(String)v_AgentInfo.elementAt(11);//话机号码
StringisMac=(String)v_AgentInfo.elementAt(13);//是否Mac话机
StringentCallNum=(String)v_AgentInfo.elementAt(15);//企业接入号码
}
2)从openEAP平台获取:
通过此接口获取坐席登陆信息,请在坐席业务程序开发的时候引入openEAP开发类库eap_core.jar和eap_structure.jar,该文件位于(openEAP)/eapserver/lib目录下。
坐席业务程序需要按openEAP的规范中的“Web统一登录认证”部分规范来编码。
打包发布时不需要将此jar一起打包到坐席业务程序中。
示例代码如下:
StringuserId="";
StringuserName="";
StringuserOrg="";
try{
userId=request.getUserPrincipal().getName();
FrameUserModelloginStaff=newFrameUserModel(userId);
userName=loginStaff.getUserName();
StringskillId=loginStaff.getExtendProperty("SKILLID");
Listl=loginStaff.getOwnerDepartment();
if(l!
=null||l.size()>0){
DepartmentModelstruct=(DepartmentModel)l.get(0);
userOrg=struct.getDepartmentName();
}
}
catch(Exceptione){}
3.1.2.获取来电客户相关信息
客户来电相关信息可以通过坐席框架的共享内存变量来获取。
方法如下:
1)呼叫相关默认变量
//import类来自eap_agent_common.jar
importcom.suntek.app.session.SessionRegister;
importcom.suntek.app.consts.CallConst;
StringuserId=SessionRegister.getUserId(request,null);
//呼叫的唯一标识,业务模块可以用此变量作业务操作的主键,
//可以通过此主键查找到相关呼叫信息
StringcallId=(String)SessionRegister.getCallProperty(userId,"CallID");
//计费编号
Stringbillid=(String)SessionRegister.getCallProperty(userId,CallConst.BILLID);
//主叫,被叫,原主叫,原被叫
Stringcaller=(String)SessionRegister.getCallProperty(userId,CallConst.CALLER);
Stringcalled=(String)SessionRegister.getCallProperty(userId,CallConst.CALLED);
Stringorgcaller=(String)SessionRegister.getCallProperty(userId,CallConst.ORG_CALLER);
Stringorgcalled=(String)SessionRegister.getCallProperty(userId,CallConst.ORG_CALLED);
//呼叫类型及名称
Stringcause=(String)SessionRegister.getCallProperty(userId,CallConst.CAUSE);
Stringcausename=(String)SessionRegister.getCallProperty(userId,CallConst.CAUSE_NAME);
//呼叫开始时间(YYYY-MM-DDHH:
mm:
ss格式)
StringcallbeginTime=(String)SessionRegister.getCallProperty(userId,“CallBeginTimeStamp”);
//呼叫开始时间与结束时间
StringcallbeginTime=(String)SessionRegister.getCallProperty(userId,“CONNECTED_TIME”);
StringcallendTime=(String)SessionRegister.getCallProperty(userId,“DISCONNECTED_TIME”);
2)IVR传给坐席的用户附加数据的获取
//用户附加数据,此串由IVR传送到坐席
StringuserData=(String)SessionRegister.getCallProperty(userId,CallConst.USER_DATA);
userData的格式为*key1=value1*key2=value2*…,请业务开发人员与ivr开发人员约定内容
可以在业务模块中通过key的名称直接获取其对应的值
Stringvalue=(String)SessionRegister.getCallProperty(userId,“KeyName”);
3.2.坐席业务模块前台操作(HTML/JavaScript)
坐席业务程序前台是指由IE执行的HTML页面或javascript代码等内容。
3.2.1.坐席框架界面说明
如上图所示,用户自定义的业务模块通过openEAP平台部署,和角色权限分配后,业务模块的功能菜单在菜单栏显示,而业务模块的操作界面在“业务操作区”展现。
坐席话路控件则加载在桢frame_cti中,业务模块可以通过top.frames[‘frame_cti’].控件名称的方式来访问。
3.2.2.frame_cti桢内提供的可访问对象
1)表单splogin提供的HTML元素
frame_cti桢内提供了一个form对象splogin可供业务模块访问。
其可访问的元素如下:
varmyFrame=top.frames['frame_cti']
//坐席员工号,姓名,坐席话机号码,呼叫的唯一标识
varagentID=myFrame.splogin.agentID.value;
varagentName=myFrame.splogin.agentName.value;
varagentNumber=myFrame.splogin.agentNumber.value;
varcallID=myFrame.splogin.CallID.value;
2)话路控件元素
//软话机控件,提供包括外呼,咨询,转移,挂机等话路操作接口,详细请参考《SoftPhone开发指南.doc》
myFrame.document.all.SPDLL
3.3.坐席业务模块中处理常用话路事件/消息
坐席框架中如果需要处理常用的话路事件或消息,其实现原理为:
用户自定义的模块在web应用加载的时候调用坐席接口,注册一个URL(可对应于一个Jsp页面),注册的jsp页面在坐席登录后,作为坐席框架总页面的一个子桢被加载。
当坐席框架收到各话路事件后,将回调该注册的URL中的指定的javascript方法,该URL中的javascript方法名称和参数固定。
实现则由用户自行开发。
请按如下步骤编码。
1.各业务模块中,如果需要处理话路事件/消息,请在web.xml中配置应用listener类,比如:
com.suntek.cc.app.xxxx
2.各业务模块自行实现listener类中的方法contextInitialized()和contextDestroyed(),listener类需要implementsServletContextListener
//在contextInitialized()中把业务模块中事件处理的URL注册进来
publicvoidcontextInitialized(ServletContextEventevent){
//注册全局URL,每个坐席员的页面均会加载
com.suntek.app.session.AppRegister.registAppEventHadleUrl("处理事件的URL");
//或注册URL时同时加入模块名,只有具有该模块菜单权限的坐席员的页面才会加载本URL,需要2.0#20070724或以后的坐席框架和openEAP2.11或以后版本支持。
com.suntek.app.session.AppRegister.registAppEventHadleUrl(moduleName+"^"+url);
}
//在contextDestroyed()中把业务模块中事件处理的URL移走
publicvoidcontextDestroyed(ServletContextEventevent){
//反注册某URL
com.suntek.app.session.AppRegister.unregistAppEventHadleUrl("处理事件的URL");
//或
com.suntek.app.session.AppRegister.unregistAppEventHadleUrl(moduleName+"^"+url);
}
3.各业务模块在处理事件/消息的URL中实现以下事件处理javascript脚本
//振铃事件
functionOnEvtAlerting(Caller,Called,OrgCaller,OrgCalled,UserData,BillID,Cause,WaitTime,UserFlag,GroupID,ServiceID,ServiceType,BureauID){
//alert("OnEvtAlerting");
}
//电话接通事件
functionOnEvtConnected(Caller,Called,OrgCaller,OrgCalled,UserData,BillID,Cause,WaitTime,UserFlag,GroupID,ServiceID,ServiceType,BureauID){
//alert("OnEvtConnected");
}
//电话挂机事件
functionOnEvtDisConnected(Caller,Called,OrgCaller,OrgCalled,UserData,BillID,Cause,WaitTime,UserFlag,GroupID,ServiceID,ServiceType,BureauID){
//alert("OnEvtDisConnected");
}
//外呼响应事件
functionOnRespMakeCall(Status){
//alert("OnRespMakeCall");
}
//远端咨询结束事件
functionOnEvtConsultCallCleared(Caller,Called,OrgCaller,OrgCalled,AgentID,UserData,BillID,ServiceID,ServiceType){
//alert("OnEvtConsultCallCleared");
}
//消息通知事件
functionOnEvtGeneral(EventId,Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8,Param9,Param10,Param11,Param12){
//alert("OnEvtGeneral");
}
//登录响应事件
functionOnRespLogon(Status,AgentID,TelNum,Cause){
//addyourcode
}
//注销响应事件
functionOnRespLogoff(Status){
//addyourcode
}
4.坐席框架中将获取注册的URL,接收到事件/消息后分别调用各URL中的对应方法.
3.4.座席框架与IVR相关的相关约定
IVR转移到坐席,用户数据的格式请用*key1=value1*key2=value2*…,以便于坐席将相关数据load到内存中,供其它业务模块共享。
IVR转移到坐席或经IVR进行远端咨询后转移到坐席的时候,如果用户数据里含有*url=http:
//xxxx*target=yyyy*时,坐席会自动转移到该URL。
如果target=blank,则会将此URL以弹出窗口方式展示。
否则,将在坐席框架的主显示界面展示。
3.5.坐席控件提供TCP话务操作接口
坐席登录进入系统后,坐席控件会在坐席本机(localhost)开启TCP服务端口(端口号依坐席框架配置决定,假定为9083)提供Socket服务。
坐席控件作为Server端,第三方系统作为Client端,采用长连接方式。
您可以编写客户端Socket通讯程序,启动后连接到该坐席机的IP和9083端口,如果您的客户端程序跑在坐席机上,可以连接127.0.0.19083端口
客户端程序与Server连接之后,可以收到Server端的两个事件通知
1.电话接通事件通知
●坐席接通客户电话后,坐席会发消息给client程序。
格式为:
主叫,被叫,坐席号码,坐席工号,开始时间
说明:
包体为String型,由5个字段构成,字段之间用半角逗号分开
2.电话挂机事件通知
●坐席电话挂机后,坐席也会发消息给client程序。
格式为:
主叫,被叫,坐席号码,0,结束时间
说明:
包体为String型,由5个字段构成,字段之间用半角逗号分开
与上面接通事件接口不同的是:
第四个字段固定为0
客户端程序与Server连接之后,可以主动给Server端发送消息进行外呼,转移,咨询三个操作。
●外呼,转移,咨询三个接口所对应参数和格式如下:
外呼:
*Function=CallOut*Called=被叫号码*
转移:
*Function=TransferCall*Called=被叫号码*
咨询:
*Function=ConsultationCall*Called=被叫号码*
说明:
请按以上三个格式发送字符型请求包,您只需要替换被叫号码即可,不要漏掉前后的星号。
Server端如果返回字符型“OK”,表示接口收到的参数无误,并成功调用了相关的方法(外呼,转移,咨询)等。
如果返回为其它,表示失败,失败描述在返回串里。
如(受限号码,或被叫为空等)
3.6.坐席控件提供HTTP话务操作接口
坐席登录进入系统后,坐席控件会在坐席本机(localhost)开启HTTP服务端口(端口号8881)提供服务。
坐席控件作为Server端,第三方模块或网页作为Client端,发送HTTP请求。
客户端程序或网页可以向本机的8881端口发送http请求(直接request)进行外呼,转移,咨询三个操作。
●外呼,转移,咨询三个接口所对应URL如下:
外呼:
http:
//localhost:
8881/Action?
CS_task=MakeCall&Caller=123&Called=456&UserData=附加数据
转移:
http:
//localhost:
8881/Action?
CS_task=SingleStepTransferCall&Caller=123&Called=456&UserData=附加数据
咨询:
*http:
//localhost:
8881/Action?
CS_task=ConsultationCall&Caller=123&Called=456&UserData=附加数据
说明:
请按以上三个格式发送字符型请求包,您只需要替换被叫号码即可。
Server端如果返回HTTP包体内容为“OK”,表示已成功调用。
如果返回为其它,表示失败,失败描述在返回包里。
如(受限号码,或被叫为空等)