/** 长沙乐科信息技术有限公司 基于WebSocket的坐席客户端事件范例 1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 2 new一个TLWSA对象,每个页面只能有一个实例 3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化 4 写事件callack函数,并赋值给tlwsa的callback 5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码 6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线 其他功能的调用方法请参考相关代码 **/ var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器 var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例 window.onload=function() //必须第一个调用的方法,初始化websocket相关变量 { tlwsa.initTLWSA(); } //函数调用的应答 注意 是类TLWSA 不是实例tlwsa TLWSA.onOpenreturn=onopenreturn; TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn; TLWSA.onLoginreturn=onloginreturn; TLWSA.onMutereturn=onmutereturn; TLWSA.onUnmutereturn=onunmutereturn; TLWSA.onSetphonenumberreturn=onsetphonenumberreturn; TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果 TLWSA.onAcwreturn=onacwreturn; TLWSA.onWcareturn=onwcareturn; TLWSA.onCallreturn=oncallreturn; TLWSA.onCancelcallreturn=oncancelcallreturn; TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝 TLWSA.onCanceltransferreturn=oncanceltransferreturn; TLWSA.onBlindtransferreturn=onblindtransferreturn; TLWSA.onTransfertoivrreturn=ontransfertoivrreturn; TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn; TLWSA.onStartlistenreturn=onstartlistenreturn; TLWSA.onStoplistenreturn=onstoplistenreturn; TLWSA.onKillreturn=onkillreturn; TLWSA.onForceonhookreturn=onforceonhookreturn; TLWSA.onIntrudereturn=onintrudereturn; TLWSA.onGetcallreturn=ongetcallreturn; TLWSA.onAnswercallreturn=onanswercallreturn; TLWSA.onOnhookreturn=ononhookreturn; TLWSA.onHoldcallreturn=onholdcallreturn; TLWSA.onSwapcallreturn=onswapcallreturn; TLWSA.onActivatecallreturn=onactivatecallreturn; TLWSA.onUnholdcallreturn=onunholdcallreturn; TLWSA.onLoginotheragentreturn=onloginotheragentreturn; TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn; TLWSA.onAnswerqueuereturn=onanswerqueuereturn; TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn; TLWSA.onConsulttransferreturn=onconsulttransferreturn; TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn; TLWSA.onGetnodestatereturn=ongetnodestatereturn; TLWSA.onTransfernodereturn=ontransfernodereturn; //会议相关 TLWSA.onConferencestartreturn=onconferencestartreturn; TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn; TLWSA.onConferencequeryreturn=onconferencequeryreturn; TLWSA.onConferencedismissreturn=onconferencedismissreturn; TLWSA.onConferencekickoutreturn=onconferencekickoutreturn; TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn; //主动事件 TLWSA.onCallin=oncallin; TLWSA.onCallend=oncallend; TLWSA.onAcw=onacw; TLWSA.onWca = onwca; TLWSA.onLogoff = onlogoff; //被强制注销事件 TLWSA.onCallresult=oncallresult; TLWSA.onTransferresult=ontransferresult; TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer; TLWSA.onBlindtransferresult=onblindtransferresult; TLWSA.onAnswer=onanswer; TLWSA.onClosed=onclosed; TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断 TLWSA.onHoldcallreleased=onholdcallreleased; TLWSA.onKeepcallreleased=onkeepcallreleased; TLWSA.onCalleealerting=oncalleealerting; TLWSA.onQueue=onqueue; TLWSA.onQuitqueue=onquitqueue; TLWSA.onRecvmsg=onrecvmsg; TLWSA.onHookstate=onhookstate; TLWSA.onHardwarefail=onhardwarefail; TLWSA.onMisscall=onmisscall; TLWSA.onConferencememberstate=onconferencememberstate; TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步 TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver; TLWSA.onStatechange=onstatechange; TLWSA.onMyStatechange=onmystatechange; //应答回调 function onopenreturn(err) { log('应答:连接服务器结果 '+err); } function onopenslaveserverreturn(err) { log('应答:连接备用服务器结果 '+err); } function onloginreturn(err) //登录结果 { log('应答:登录请求结果 '+err); } function onmutereturn(err) { log('应答:静音请求结果 '+err); } function onunmutereturn(err) { log('应答:取消静音请求结果 '+err); } function onsetphonenumberreturn(err) { log('应答:报告坐席电话号码请求结果 '+err); } function onlogoffreturn(err) //注销请求结果 { log('应答:注销请求结果 '+err); } function onacwreturn(err) { log('应答:离席请求结果 '+err); } function onwcareturn(err) { log('应答:复席请求结果 '+err); } function oncallreturn(err) { log('应答:呼叫请求结果 '+err); } function oncancelcallreturn(err) { log('应答:停止呼叫请求结果 ' + err); } function ontransferreturn(err) { log('应答:转移请求结果 ' + err); } function oncanceltransferreturn(err) { log('应答:停止转移请求结果 ' + err); } function onblindtransferreturn(err) { log('应答:盲转请求结果 ' + err); } function ontransfertoivrreturn(err) { log('应答:转ivr请求结果 ' + err); } function ontransfertoivrandwaitreturn(err) { log('应答:转ivr并等待请求结果 ' + err); } function onstartlistenreturn(err) { log('应答:监听请求结果 ' + err); } function onstoplistenreturn(err) { log('应答:停止监听请求结果 ' + err); } function onkillreturn(err) { log('应答:强制处理请求结果 ' + err); } function onforceonhookreturn(err) { log('应答:强拆坐席请求结果 ' + err); } function onintrudereturn(err) { log('应答:强插请求结果 ' + err); } function ongetcallreturn(err,caller,callee,data,crs) { log('应答:代接请求结果 ' + err+' caller:'+caller+' callee:'+callee+' data:'+data+' crs:'+crs); } function onanswercallreturn(err) { log('应答:应答请求结果 ' + err); } function ononhookreturn(err) { log('应答:挂机请求结果 ' + err); } function onholdcallreturn(err) { log('应答:保持请求结果 ' + err); } function onswapcallreturn(err) { log('应答:切换呼叫请求结果 ' + err); } function onactivatecallreturn(err) { log('应答:激活呼叫请求结果 ' + err); } function onunholdcallreturn(err) { log('应答:取回保持呼叫请求结果 ' + err); } function onloginotheragentreturn(err) { log('应答:登录其他坐席请求结果 ' + err); } function onsendmessagetoagentreturn(err) { log('应答:发送消息请求结果 ' + err); } function onanswerqueuereturn(err) { log('应答:应答队列中的外线请求结果 ' + err); } function onsubscribestateinforeturn(err){ log('应答:订阅状态变化消息请求结果 ' + err); } function onconsulttransferreturn(err){ log('应答:咨询转移请求结果 '+err); } function oncompleteconsulttransferreturn(err){ log('应答:完成咨询转移请求结果 '+err); } function ongetnodestatereturn(jso) { log('node state 结果 '+JSON.stringify(jso)); } function ontransfernodereturn(jso) { log('transfer node 结果 '+JSON.stringify(jso)) } function onconferencestartreturn(jso) { log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid+' json:'+JSON.stringify(jso)); if(jso.err == 0) conferenceid.value=jso.conferenceid; } function onconferenceappendmemberreturn(jso) { log('添加会议成员 结果 '+JSON.stringify(jso)) } function onconferencequeryreturn(jso) { log('会议状态查询 结果 '+JSON.stringify(jso)) } function onconferencedismissreturn(jso) { log('解散会议 结果 '+JSON.stringify(jso)) } function onconferencekickoutreturn(jso) { log('踢出成员 结果 '+JSON.stringify(jso)) } function onconferencechangememberstatereturn(jso) { log('改变成员状态 结果 '+jso.err+' json:'+JSON.stringify(jso)) } //主动事件回调 function oncallin(jso) //呼入通知 { log('事件:呼入通知,主被叫和用户数据是: '+jso.caller +' ' +jso.callee+' '+jso.data+JSON.stringify(jso)); } function oncallend() //呼叫结束通知 { log('事件:通话结束'); } function onacw() { log('事件:你已经进入离席状态'); } function onwca() { log('事件:你已经进入就绪状态'); } function onlogoff() //被动注销事件(网络中断 / 被踢) { log('事件:您已经被注销'); } function oncallresult(err) { log('事件:呼叫结果 '+JSON.stringify(err)); } function ontransferresult(err) { log('事件:转移结果 ' + err); } function onconsulttransfercalleeanswer(crs){ log('事件:咨询转移被叫应答 crs=' + crs); } function onblindtransferresult(err) { log('事件:盲转结果 ' + err); } function onanswer(err) { log('事件:应答' + err); } function onclosed(err) { log('事件:与服务器的网络连接中断'+err); } function onslaveserverclosed(err) { log('事件:与备用服务器的网络连接中断'+err); } function onholdcallreleased(err) { log('事件:被保持的对方已挂机'+err); } function onkeepcallreleased(err) { log('事件:转回ivr并等待的外线已挂机'+err); } function oncalleealerting(err) { log('事件:呼叫的外线已经开始振铃'+err); } function onqueue(crs,caller,callee,data) { log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data) } function onquitqueue(crs) { log('事件:外线退出队列,crs= '+crs) } function onrecvmsg(msg, from) { log('事件:收到来自'+ from+'的消息:' + msg); } function onhookstate(hookstate, hktime) { log('事件:坐席叉簧状态'+hookstate+'时间'+hktime); } function onhardwarefail(err) { log('事件:keygoe交换机硬件故障'+err); } function onmisscall(err) { log('事件:呼损'+err); } //新状态 1-呼叫失败 2-呼叫应答进入会议 3-会议中挂机退出会议 function onconferencememberstate(jso) { log('会议成员状态发生变化 ' + JSON.stringify(jso)); } function onslaveserverfail(jso) { log('注意:备用服务器已失联'+' json:'+JSON.stringify(jso)); } function onswitchtoslaveserver(jso) { log('注意:主服务器故障,已经切换到备用服务器'+jso); } //事件回调函数结束 function queryAgentState() { log('排队外线数量 '+tlwsa.tlaGetacdlength()); log('外线总数量 '+tlwsa.tlaGettrknumber()); var agcount=tlwsa.tlaGetagentcount(); log('登录坐席数量 '+agcount); for(var ind=0;ind