Browse Source

呼叫中心修复

seimin 3 years ago
parent
commit
98c57448f8

+ 1 - 1
assets/js/controllers/mainCtrl.js

@@ -1647,7 +1647,7 @@ app.controller('AppCtrl', ['$rootScope', '$scope', '$state', '$translate', '$loc
1647 1647
         function oncallin(jso) {
1648 1648
           console.log(jso);//lmm
1649 1649
           $rootScope.callInPhoneNumber = jso.caller;//来电的电话
1650
-          $rootScope.sockid = jso.sockid;//来电的话机id
1650
+          $rootScope.sockid = jso.crs;//来电的话机id
1651 1651
           if (jso) {
1652 1652
             console.log('呼入坐席成功,请摘机-----seimin');
1653 1653
             $.toaster({

+ 419 - 0
assets/js/directives/ola_api2---------------.js

@@ -0,0 +1,419 @@
1
+/**
2
+201606
3
+
4
+基于WebSocket的坐席客户端范例
5
+
6
+1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 
7
+2 new一个TLWSA对象,每个页面只能有一个实例
8
+3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
9
+4 写事件callack函数,并赋值给tlwsa的callback
10
+
11
+5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
12
+6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
13
+
14
+其他功能的调用方法请参考相关代码
15
+
16
+**/
17
+// var phoneNumber = '';
18
+var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
19
+
20
+var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例
21
+window.onload=function() //必须第一个调用的方法,初始化websocket相关变量
22
+{
23
+	tlwsa.initTLWSA();
24
+}
25
+
26
+//函数调用的应答  注意 是类TLWSA 不是实例tlwsa
27
+// TLWSA.onOpenreturn=onopenreturn;
28
+TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn;
29
+
30
+// TLWSA.onLoginreturn=onloginreturn;
31
+TLWSA.onMutereturn=onmutereturn;
32
+TLWSA.onUnmutereturn=onunmutereturn;
33
+// TLWSA.onSetphonenumberreturn=onsetphonenumberreturn;
34
+// TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果
35
+// TLWSA.onAcwreturn=onacwreturn;
36
+// TLWSA.onWcareturn=onwcareturn;
37
+
38
+// TLWSA.onCallreturn=oncallreturn;
39
+TLWSA.onCancelcallreturn=oncancelcallreturn;
40
+// TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝
41
+TLWSA.onCanceltransferreturn=oncanceltransferreturn;
42
+TLWSA.onBlindtransferreturn=onblindtransferreturn;
43
+TLWSA.onTransfertoivrreturn=ontransfertoivrreturn;
44
+TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn;
45
+TLWSA.onStartlistenreturn=onstartlistenreturn;
46
+TLWSA.onStoplistenreturn=onstoplistenreturn;
47
+// TLWSA.onKillreturn=onkillreturn;
48
+TLWSA.onForceonhookreturn=onforceonhookreturn;
49
+TLWSA.onIntrudereturn=onintrudereturn;
50
+TLWSA.onGetcallreturn=ongetcallreturn;
51
+TLWSA.onAnswercallreturn=onanswercallreturn;
52
+TLWSA.onOnhookreturn=ononhookreturn;
53
+TLWSA.onHoldcallreturn=onholdcallreturn;
54
+TLWSA.onSwapcallreturn=onswapcallreturn;
55
+TLWSA.onActivatecallreturn=onactivatecallreturn;
56
+TLWSA.onUnholdcallreturn=onunholdcallreturn;
57
+TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
58
+TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
59
+TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
60
+TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
61
+
62
+TLWSA.onConsulttransferreturn=onconsulttransferreturn;
63
+TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
64
+TLWSA.onGetnodestatereturn=ongetnodestatereturn;
65
+TLWSA.onTransfernodereturn=ontransfernodereturn;
66
+//会议相关
67
+TLWSA.onConferencestartreturn=onconferencestartreturn;
68
+TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn;
69
+TLWSA.onConferencequeryreturn=onconferencequeryreturn;
70
+TLWSA.onConferencedismissreturn=onconferencedismissreturn;
71
+TLWSA.onConferencekickoutreturn=onconferencekickoutreturn;
72
+TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn;
73
+//主动事件
74
+// TLWSA.onCallin=oncallin;
75
+// TLWSA.onCallend=oncallend;
76
+// TLWSA.onAcw=onacw;
77
+// TLWSA.onWca = onwca;
78
+TLWSA.onLogoff = onlogoff; //被强制注销事件
79
+// TLWSA.onCallresult=oncallresult;
80
+// TLWSA.onTransferresult=ontransferresult;
81
+TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer;
82
+TLWSA.onBlindtransferresult=onblindtransferresult;
83
+// TLWSA.onAnswer=onanswer;
84
+// TLWSA.onClosed=onclosed;
85
+TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断
86
+TLWSA.onHoldcallreleased=onholdcallreleased;
87
+TLWSA.onKeepcallreleased=onkeepcallreleased;
88
+TLWSA.onCalleealerting=oncalleealerting;
89
+TLWSA.onQueue=onqueue;
90
+TLWSA.onQuitqueue=onquitqueue;
91
+TLWSA.onRecvmsg=onrecvmsg;
92
+TLWSA.onHookstate=onhookstate;
93
+TLWSA.onHardwarefail=onhardwarefail;
94
+// TLWSA.onMisscall=onmisscall;
95
+TLWSA.onConferencememberstate=onconferencememberstate;
96
+TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
97
+TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
98
+// TLWSA.onStatechange=onstatechange;
99
+TLWSA.onMyStatechange=onmystatechange;
100
+//应答回调
101
+// function onopenreturn(err)
102
+// {
103
+// 	err = Number(err);
104
+// 	if(!err){
105
+// 		console.log('呼叫中心连接成功-----seimin');
106
+// 		//如果设置过话机
107
+// 		if(localStorage.getItem('phoneNumber')){
108
+// 			// 登录并设置号码
109
+// 			phoneNumber = localStorage.getItem('phoneNumber');
110
+// 			tlwsa.tlaLogin(phoneNumber,1,-1);
111
+// 		}
112
+// 	}else{
113
+// 		console.log('呼叫中心连接失败-----seimin');
114
+// 	}
115
+// 	// console.log('应答:连接服务器结果 '+err);
116
+// }
117
+function onopenslaveserverreturn(err)
118
+{
119
+	console.log('应答:连接备用服务器结果 '+err);
120
+}
121
+
122
+// function onloginreturn(err) //登录结果
123
+// {
124
+// 	err = Number(err);
125
+// 	if(!err){
126
+// 		console.log('登录成功-----seimin');
127
+// 		setTimeout(function(){
128
+// 			console.log('开始设置号码【'+phoneNumber+'】-----seimin');
129
+// 			tlwsa.tlaSetphonenumber(phoneNumber);
130
+// 		},0)
131
+// 	}else{
132
+// 		console.log('登录失败-----seimin');
133
+// 	}
134
+// 	console.log('应答:登录请求结果 '+err);
135
+// }
136
+function onmutereturn(err)
137
+{
138
+	console.log('应答:静音请求结果 '+err);
139
+}
140
+function onunmutereturn(err)
141
+{
142
+	console.log('应答:取消静音请求结果 '+err);
143
+}
144
+// function onsetphonenumberreturn(err)
145
+// {
146
+// 	err = Number(err);
147
+// 	if(!err){
148
+// 		console.log('设置号码成功-----seimin');
149
+// 	}else{
150
+// 		console.log('设置号码失败-----seimin');
151
+// 	}
152
+// 	console.log('应答:报告坐席电话号码请求结果 '+err);
153
+// }
154
+// function onlogoffreturn(err) //注销请求结果
155
+// {
156
+// 	console.log('应答:注销请求结果 '+err);
157
+// }
158
+
159
+// function onacwreturn(err)
160
+// {
161
+// 	console.log('应答:离席请求结果 '+err);
162
+// }
163
+// function onwcareturn(err)
164
+// {
165
+// 	console.log('应答:复席请求结果 '+err);
166
+// }
167
+// function oncallreturn(err)
168
+// {
169
+// 	console.log('应答:呼叫请求结果 '+err);
170
+// }
171
+function oncancelcallreturn(err) {
172
+    console.log('应答:停止呼叫请求结果 ' + err);
173
+}
174
+// function ontransferreturn(err) {
175
+//     console.log('应答:转移请求结果 ' + err);
176
+// }
177
+function oncanceltransferreturn(err) {
178
+    console.log('应答:停止转移请求结果 ' + err);
179
+}
180
+function onblindtransferreturn(err) {
181
+    console.log('应答:盲转请求结果 ' + err);
182
+}
183
+function ontransfertoivrreturn(err) {
184
+    console.log('应答:转ivr请求结果 ' + err);
185
+}
186
+function ontransfertoivrandwaitreturn(err) {
187
+    console.log('应答:转ivr并等待请求结果 ' + err);
188
+}
189
+function onstartlistenreturn(err) {
190
+    console.log('应答:监听请求结果 ' + err);
191
+}
192
+function onstoplistenreturn(err) {
193
+    console.log('应答:停止监听请求结果 ' + err);
194
+}
195
+// function onkillreturn(err) {
196
+//     console.log('应答:强制处理请求结果 ' + err);
197
+// }
198
+function onforceonhookreturn(err) {
199
+    console.log('应答:强拆坐席请求结果 ' + err);
200
+}
201
+function onintrudereturn(err) {
202
+    console.log('应答:强插请求结果 ' + err);
203
+}
204
+function ongetcallreturn(err,caller,callee,data,crs) {
205
+    console.log('应答:代接请求结果 ' + err+' '+caller);
206
+}
207
+function onanswercallreturn(err) {
208
+    console.log('应答:应答请求结果 ' + err);
209
+}
210
+function ononhookreturn(err) {
211
+    console.log('应答:挂机请求结果 ' + err);
212
+}
213
+function onholdcallreturn(err) {
214
+    console.log('应答:保持请求结果 ' + err);
215
+}
216
+function onswapcallreturn(err) {
217
+    console.log('应答:切换呼叫请求结果 ' + err);
218
+}
219
+function onactivatecallreturn(err) {
220
+    console.log('应答:激活呼叫请求结果 ' + err);
221
+}
222
+function onunholdcallreturn(err) {
223
+    console.log('应答:取回保持呼叫请求结果 ' + err);
224
+}
225
+function onloginotheragentreturn(err) {
226
+    console.log('应答:登录其他坐席请求结果 ' + err);
227
+}
228
+function onsendmessagetoagentreturn(err) {
229
+    console.log('应答:发送消息请求结果 ' + err);
230
+}
231
+function onanswerqueuereturn(err) {
232
+    console.log('应答:应答队列中的外线请求结果 ' + err);
233
+}
234
+function onsubscribestateinforeturn(err){
235
+	console.log('应答:订阅状态变化消息请求结果 ' + err);
236
+}
237
+function onconsulttransferreturn(err){
238
+	console.log('应答:咨询转移请求结果 '+err);
239
+}
240
+
241
+function oncompleteconsulttransferreturn(err){
242
+	console.log('应答:完成咨询转移请求结果 '+err);
243
+}
244
+function ongetnodestatereturn(jso)
245
+{
246
+	console.log('node state 结果 '+JSON.stringify(jso));
247
+}
248
+function ontransfernodereturn(jso)
249
+{
250
+	console.log('transfer node 结果 '+JSON.stringify(jso))
251
+}
252
+function onconferencestartreturn(jso)
253
+{
254
+	console.log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid);
255
+	if(jso.err == 0)
256
+		conferenceid.value=jso.conferenceid;
257
+}
258
+function onconferenceappendmemberreturn(jso)
259
+{
260
+	console.log('添加会议成员 结果 '+JSON.stringify(jso))
261
+}
262
+function onconferencequeryreturn(jso)
263
+{
264
+	console.log('会议状态查询 结果 '+JSON.stringify(jso))
265
+}
266
+function onconferencedismissreturn(jso)
267
+{
268
+	console.log('解散会议 结果 '+JSON.stringify(jso))
269
+}
270
+function onconferencekickoutreturn(jso)
271
+{
272
+	console.log('踢出成员 结果 '+JSON.stringify(jso))
273
+}
274
+function onconferencechangememberstatereturn(jso)
275
+{
276
+	console.log('改变成员状态 结果 '+jso.err)
277
+}
278
+//主动事件回调
279
+// function oncallin(jso) //呼入通知
280
+// {
281
+// 	console.log('事件:呼入通知,相关数据:  '+JSON.stringify(jso));
282
+// }
283
+// function oncallend(jso) //呼叫结束通知
284
+// {
285
+// 	console.log('事件:通话结束' + JSON.stringify(jso));
286
+// }
287
+// function onacw()
288
+// {
289
+// 	console.log('事件:你已经进入离席状态');
290
+// }
291
+// function onwca()
292
+// {
293
+// 	console.log('事件:你已经进入就绪状态');
294
+// }
295
+function onlogoff() //被动注销事件(网络中断 / 被踢)
296
+{
297
+    console.log('事件:您已经被注销');
298
+}
299
+// function oncallresult(err)
300
+// {
301
+// 	console.log('事件:呼叫结果 '+JSON.stringify(err));
302
+// }
303
+// function ontransferresult(err) {
304
+//     console.log('事件:转移结果 ' + JSON.stringify(err));
305
+// }
306
+function onconsulttransfercalleeanswer(crs){
307
+	console.log('事件:咨询转移被叫应答 crs=' + crs);
308
+}
309
+function onblindtransferresult(err) {
310
+    console.log('事件:盲转结果 ' + JSON.stringify(err));
311
+}
312
+// function onanswer(err) {
313
+//     console.log('事件:应答'+err);
314
+// }
315
+// function onclosed(err) {
316
+//     console.log('事件:与服务器的网络连接中断');
317
+// }
318
+function onslaveserverclosed(err)
319
+{
320
+	console.log('事件:与备用服务器的网络连接中断');
321
+}
322
+function onholdcallreleased(err) {
323
+    console.log('事件:被保持的对方已挂机');
324
+}
325
+function onkeepcallreleased(err) {
326
+    console.log('事件:转回ivr并等待的外线已挂机');
327
+}
328
+function oncalleealerting(err) {
329
+    console.log('事件:呼叫的外线已经开始振铃');
330
+}
331
+function onqueue(crs,caller,callee,data)
332
+{
333
+    console.log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
334
+}
335
+// function onstatechange()
336
+// {
337
+// 	console.log('事件:状态变化----------------------------------------------------');
338
+// 	queryAgentState();
339
+// }
340
+function onmystatechange(jso)
341
+{
342
+	console.log('事件:状态变化----------------------------------------------------');
343
+	console.log(JSON.stringify(jso));
344
+}
345
+function onquitqueue(crs)
346
+{
347
+    console.log('事件:外线退出队列,crs= '+crs)
348
+}
349
+function onrecvmsg(msg, from) {
350
+    console.log('事件:收到来自'+ from+'的消息:' + msg);
351
+}
352
+function onhookstate(jso) {
353
+    console.log('事件:坐席叉簧状态'+JSON.stringify(jso));
354
+}
355
+function onhardwarefail(err) {
356
+    console.log('事件:keygoe交换机硬件故障');
357
+}
358
+// function onmisscall(err) {
359
+//     console.log('事件:呼损');
360
+// }
361
+//新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
362
+function onconferencememberstate(jso)
363
+{
364
+	console.log('会议成员状态发生变化 ' + JSON.stringify(jso));
365
+}
366
+function onslaveserverfail(jso)
367
+{
368
+	console.log('注意:备用服务器已失联');
369
+}
370
+function onswitchtoslaveserver(jso)
371
+{
372
+	console.log('注意:主服务器故障,已经切换到备用服务器');
373
+}
374
+//事件回调函数结束
375
+
376
+function queryAgentState()
377
+{
378
+	console.log('排队外线数量 '+tlwsa.tlaGetacdlength());
379
+	
380
+	console.log('外线总数量 '+tlwsa.tlaGettrknumber());
381
+	
382
+	var agcount=tlwsa.tlaGetagentcount();
383
+	console.log('登录坐席数量 '+agcount);
384
+	for(var ind=0;ind<agcount;ind++)
385
+	{
386
+		console.log('agnet No. ' + ind + ' workid is '+tlwsa.tlaGetagentwid(ind) + ' state is ' + tlwsa.tlaGetagentstate(ind) + '  '+getStateInfo(tlwsa.tlaGetagentstate(ind) ) )
387
+	}
388
+}
389
+
390
+function getLicenseInfo()
391
+{
392
+	ajo=tlwsa.tlaGetlicenseinfo();
393
+	console.log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno);
394
+	
395
+}
396
+function getStateInfo(state)
397
+{
398
+	switch(state)
399
+	{
400
+		case '0':
401
+		return '未登录';
402
+		case '1':
403
+		return '空闲';
404
+		case '2':
405
+		return '离席';
406
+		case '3':
407
+		return '正在振铃';
408
+		case '4':
409
+		return '播报工号';
410
+		case '5':
411
+		return '通话中';
412
+		case '6':
413
+		return '正在外呼';
414
+		case '7':
415
+		return '正在转移';
416
+		case '8':
417
+		return '正在监听';
418
+	}
419
+}

+ 4 - 5
assets/js/directives/ola_api2.js

@@ -57,7 +57,7 @@ TLWSA.onUnholdcallreturn=onunholdcallreturn;
57 57
 TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
58 58
 TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
59 59
 TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
60
-TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
60
+// TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
61 61
 
62 62
 TLWSA.onConsulttransferreturn=onconsulttransferreturn;
63 63
 TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
@@ -96,7 +96,6 @@ TLWSA.onConferencememberstate=onconferencememberstate;
96 96
 TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
97 97
 TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
98 98
 // TLWSA.onStatechange=onstatechange;
99
-TLWSA.onMyStatechange=onmystatechange;
100 99
 //应答回调
101 100
 // function onopenreturn(err)
102 101
 // {
@@ -231,9 +230,9 @@ function onsendmessagetoagentreturn(err) {
231 230
 function onanswerqueuereturn(err) {
232 231
     console.log('应答:应答队列中的外线请求结果 ' + err);
233 232
 }
234
-function onsubscribestateinforeturn(err){
235
-	console.log('应答:订阅状态变化消息请求结果 ' + err);
236
-}
233
+// function onsubscribestateinforeturn(err){
234
+// 	console.log('应答:订阅状态变化消息请求结果 ' + err);
235
+// }
237 236
 function onconsulttransferreturn(err){
238 237
 	console.log('应答:咨询转移请求结果 '+err);
239 238
 }

+ 2 - 2
assets/js/main.js

@@ -18,9 +18,9 @@ var callIp = protocolName + "//192.168.3.122:29005";
18 18
 // var seiminCallIp = '10.175.205.159';//财大
19 19
 var seiminCallIp = '';
20 20
 if(document.domain === 'itsm.zuel.edu.cn'){
21
-    seiminCallIp = '10.175.205.159';//财大
21
+    seiminCallIp = '10.175.205.159:5678';//财大
22 22
 }else{
23
-    seiminCallIp = '192.168.3.233';//本地
23
+    seiminCallIp = '192.168.3.233:5678';//本地
24 24
 }
25 25
 // 信用社
26 26
 // var serverIp = "http://192.168.2.63:80/service"; //跟其他有关

+ 375 - 0
assets/js/script/TLWSADemo---------------.js

@@ -0,0 +1,375 @@
1
+/**
2
+长沙乐科信息技术有限公司 基于WebSocket的坐席客户端事件范例
3
+1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 
4
+2 new一个TLWSA对象,每个页面只能有一个实例
5
+3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
6
+4 写事件callack函数,并赋值给tlwsa的callback
7
+5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
8
+6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
9
+其他功能的调用方法请参考相关代码
10
+**/
11
+
12
+var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
13
+
14
+var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例
15
+window.onload=function() //必须第一个调用的方法,初始化websocket相关变量
16
+{
17
+	tlwsa.initTLWSA();
18
+}
19
+
20
+//函数调用的应答  注意 是类TLWSA 不是实例tlwsa
21
+TLWSA.onOpenreturn=onopenreturn;
22
+TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn;
23
+
24
+TLWSA.onLoginreturn=onloginreturn;
25
+TLWSA.onMutereturn=onmutereturn;
26
+TLWSA.onUnmutereturn=onunmutereturn;
27
+TLWSA.onSetphonenumberreturn=onsetphonenumberreturn;
28
+TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果
29
+TLWSA.onAcwreturn=onacwreturn;
30
+TLWSA.onWcareturn=onwcareturn;
31
+
32
+TLWSA.onCallreturn=oncallreturn;
33
+TLWSA.onCancelcallreturn=oncancelcallreturn;
34
+TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝
35
+TLWSA.onCanceltransferreturn=oncanceltransferreturn;
36
+TLWSA.onBlindtransferreturn=onblindtransferreturn;
37
+TLWSA.onTransfertoivrreturn=ontransfertoivrreturn;
38
+TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn;
39
+TLWSA.onStartlistenreturn=onstartlistenreturn;
40
+TLWSA.onStoplistenreturn=onstoplistenreturn;
41
+TLWSA.onKillreturn=onkillreturn;
42
+TLWSA.onForceonhookreturn=onforceonhookreturn;
43
+TLWSA.onIntrudereturn=onintrudereturn;
44
+TLWSA.onGetcallreturn=ongetcallreturn;
45
+TLWSA.onAnswercallreturn=onanswercallreturn;
46
+TLWSA.onOnhookreturn=ononhookreturn;
47
+TLWSA.onHoldcallreturn=onholdcallreturn;
48
+TLWSA.onSwapcallreturn=onswapcallreturn;
49
+TLWSA.onActivatecallreturn=onactivatecallreturn;
50
+TLWSA.onUnholdcallreturn=onunholdcallreturn;
51
+TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
52
+TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
53
+TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
54
+TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
55
+
56
+TLWSA.onConsulttransferreturn=onconsulttransferreturn;
57
+TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
58
+TLWSA.onGetnodestatereturn=ongetnodestatereturn;
59
+TLWSA.onTransfernodereturn=ontransfernodereturn;
60
+//会议相关
61
+TLWSA.onConferencestartreturn=onconferencestartreturn;
62
+TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn;
63
+TLWSA.onConferencequeryreturn=onconferencequeryreturn;
64
+TLWSA.onConferencedismissreturn=onconferencedismissreturn;
65
+TLWSA.onConferencekickoutreturn=onconferencekickoutreturn;
66
+TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn;
67
+//主动事件
68
+TLWSA.onCallin=oncallin;
69
+TLWSA.onCallend=oncallend;
70
+TLWSA.onAcw=onacw;
71
+TLWSA.onWca = onwca;
72
+TLWSA.onLogoff = onlogoff; //被强制注销事件
73
+TLWSA.onCallresult=oncallresult;
74
+TLWSA.onTransferresult=ontransferresult;
75
+TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer;
76
+TLWSA.onBlindtransferresult=onblindtransferresult;
77
+TLWSA.onAnswer=onanswer;
78
+TLWSA.onClosed=onclosed;
79
+TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断
80
+TLWSA.onHoldcallreleased=onholdcallreleased;
81
+TLWSA.onKeepcallreleased=onkeepcallreleased;
82
+TLWSA.onCalleealerting=oncalleealerting;
83
+TLWSA.onQueue=onqueue;
84
+TLWSA.onQuitqueue=onquitqueue;
85
+TLWSA.onRecvmsg=onrecvmsg;
86
+TLWSA.onHookstate=onhookstate;
87
+TLWSA.onHardwarefail=onhardwarefail;
88
+TLWSA.onMisscall=onmisscall;
89
+TLWSA.onConferencememberstate=onconferencememberstate;
90
+TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
91
+TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
92
+TLWSA.onStatechange=onstatechange;
93
+TLWSA.onMyStatechange=onmystatechange;
94
+//应答回调
95
+function onopenreturn(err)
96
+{
97
+	log('应答:连接服务器结果 '+err);
98
+}
99
+function onopenslaveserverreturn(err)
100
+{
101
+	log('应答:连接备用服务器结果 '+err);
102
+}
103
+
104
+function onloginreturn(err) //登录结果
105
+{
106
+	log('应答:登录请求结果 '+err);
107
+}
108
+function onmutereturn(err)
109
+{
110
+	log('应答:静音请求结果 '+err);
111
+}
112
+function onunmutereturn(err)
113
+{
114
+	log('应答:取消静音请求结果 '+err);
115
+}
116
+function onsetphonenumberreturn(err)
117
+{
118
+	log('应答:报告坐席电话号码请求结果 '+err);
119
+}
120
+function onlogoffreturn(err) //注销请求结果
121
+{
122
+	log('应答:注销请求结果 '+err);
123
+}
124
+
125
+function onacwreturn(err)
126
+{
127
+	log('应答:离席请求结果 '+err);
128
+}
129
+function onwcareturn(err)
130
+{
131
+	log('应答:复席请求结果 '+err);
132
+}
133
+function oncallreturn(err)
134
+{
135
+	log('应答:呼叫请求结果 '+err);
136
+}
137
+function oncancelcallreturn(err) {
138
+    log('应答:停止呼叫请求结果 ' + err);
139
+}
140
+function ontransferreturn(err) {
141
+    log('应答:转移请求结果 ' + err);
142
+}
143
+function oncanceltransferreturn(err) {
144
+    log('应答:停止转移请求结果 ' + err);
145
+}
146
+function onblindtransferreturn(err) {
147
+    log('应答:盲转请求结果 ' + err);
148
+}
149
+function ontransfertoivrreturn(err) {
150
+    log('应答:转ivr请求结果 ' + err);
151
+}
152
+function ontransfertoivrandwaitreturn(err) {
153
+    log('应答:转ivr并等待请求结果 ' + err);
154
+}
155
+function onstartlistenreturn(err) {
156
+    log('应答:监听请求结果 ' + err);
157
+}
158
+function onstoplistenreturn(err) {
159
+    log('应答:停止监听请求结果 ' + err);
160
+}
161
+function onkillreturn(err) {
162
+    log('应答:强制处理请求结果 ' + err);
163
+}
164
+function onforceonhookreturn(err) {
165
+    log('应答:强拆坐席请求结果 ' + err);
166
+}
167
+function onintrudereturn(err) {
168
+    log('应答:强插请求结果 ' + err);
169
+}
170
+function ongetcallreturn(err,caller,callee,data,crs) {
171
+    log('应答:代接请求结果 ' + err+' caller:'+caller+' callee:'+callee+' data:'+data+' crs:'+crs);
172
+}
173
+function onanswercallreturn(err) {
174
+    log('应答:应答请求结果 ' + err);
175
+}
176
+function ononhookreturn(err) {
177
+    log('应答:挂机请求结果 ' + err);
178
+}
179
+function onholdcallreturn(err) {
180
+    log('应答:保持请求结果 ' + err);
181
+}
182
+function onswapcallreturn(err) {
183
+    log('应答:切换呼叫请求结果 ' + err);
184
+}
185
+function onactivatecallreturn(err) {
186
+    log('应答:激活呼叫请求结果 ' + err);
187
+}
188
+function onunholdcallreturn(err) {
189
+    log('应答:取回保持呼叫请求结果 ' + err);
190
+}
191
+function onloginotheragentreturn(err) {
192
+    log('应答:登录其他坐席请求结果 ' + err);
193
+}
194
+function onsendmessagetoagentreturn(err) {
195
+    log('应答:发送消息请求结果 ' + err);
196
+}
197
+function onanswerqueuereturn(err) {
198
+    log('应答:应答队列中的外线请求结果 ' + err);
199
+}
200
+function onsubscribestateinforeturn(err){
201
+	log('应答:订阅状态变化消息请求结果 ' + err);
202
+}
203
+function onconsulttransferreturn(err){
204
+	log('应答:咨询转移请求结果 '+err);
205
+}
206
+
207
+function oncompleteconsulttransferreturn(err){
208
+	log('应答:完成咨询转移请求结果 '+err);
209
+}
210
+function ongetnodestatereturn(jso)
211
+{
212
+	log('node state 结果 '+JSON.stringify(jso));
213
+}
214
+function ontransfernodereturn(jso)
215
+{
216
+	log('transfer node 结果 '+JSON.stringify(jso))
217
+}
218
+function onconferencestartreturn(jso)
219
+{
220
+	log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid+'   json:'+JSON.stringify(jso));
221
+	if(jso.err == 0)
222
+		conferenceid.value=jso.conferenceid;
223
+}
224
+function onconferenceappendmemberreturn(jso)
225
+{
226
+	log('添加会议成员 结果 '+JSON.stringify(jso))
227
+}
228
+function onconferencequeryreturn(jso)
229
+{
230
+	log('会议状态查询 结果 '+JSON.stringify(jso))
231
+}
232
+function onconferencedismissreturn(jso)
233
+{
234
+	log('解散会议 结果 '+JSON.stringify(jso))
235
+}
236
+function onconferencekickoutreturn(jso)
237
+{
238
+	log('踢出成员 结果 '+JSON.stringify(jso))
239
+}
240
+function onconferencechangememberstatereturn(jso)
241
+{
242
+	log('改变成员状态 结果 '+jso.err+'   json:'+JSON.stringify(jso))
243
+}
244
+//主动事件回调
245
+function oncallin(jso) //呼入通知
246
+{
247
+	log('事件:呼入通知,主被叫和用户数据是:  '+jso.caller +'  ' +jso.callee+' '+jso.data+JSON.stringify(jso));
248
+}
249
+function oncallend() //呼叫结束通知
250
+{
251
+	log('事件:通话结束');
252
+}
253
+function onacw()
254
+{
255
+	log('事件:你已经进入离席状态');
256
+}
257
+function onwca()
258
+{
259
+	log('事件:你已经进入就绪状态');
260
+}
261
+function onlogoff() //被动注销事件(网络中断 / 被踢)
262
+{
263
+    log('事件:您已经被注销');
264
+}
265
+function oncallresult(err)
266
+{
267
+	log('事件:呼叫结果 '+JSON.stringify(err));
268
+}
269
+function ontransferresult(err) {
270
+    log('事件:转移结果 ' + err);
271
+}
272
+function onconsulttransfercalleeanswer(crs){
273
+	log('事件:咨询转移被叫应答 crs=' + crs);
274
+}
275
+function onblindtransferresult(err) {
276
+    log('事件:盲转结果 ' + err);
277
+}
278
+function onanswer(err) {
279
+    log('事件:应答' + err);
280
+}
281
+function onclosed(err) {
282
+    log('事件:与服务器的网络连接中断'+err);
283
+}
284
+function onslaveserverclosed(err)
285
+{
286
+	log('事件:与备用服务器的网络连接中断'+err);
287
+}
288
+function onholdcallreleased(err) {
289
+    log('事件:被保持的对方已挂机'+err);
290
+}
291
+function onkeepcallreleased(err) {
292
+    log('事件:转回ivr并等待的外线已挂机'+err);
293
+}
294
+function oncalleealerting(err) {
295
+    log('事件:呼叫的外线已经开始振铃'+err);
296
+}
297
+function onqueue(crs,caller,callee,data)
298
+{
299
+    log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
300
+}
301
+function onquitqueue(crs)
302
+{
303
+    log('事件:外线退出队列,crs= '+crs)
304
+}
305
+function onrecvmsg(msg, from) {
306
+    log('事件:收到来自'+ from+'的消息:' + msg);
307
+}
308
+function onhookstate(hookstate, hktime) {
309
+    log('事件:坐席叉簧状态'+hookstate+'时间'+hktime);
310
+}
311
+function onhardwarefail(err) {
312
+    log('事件:keygoe交换机硬件故障'+err);
313
+}
314
+function onmisscall(err) {
315
+    log('事件:呼损'+err);
316
+}
317
+//新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
318
+function onconferencememberstate(jso)
319
+{
320
+	log('会议成员状态发生变化 ' + JSON.stringify(jso));
321
+}
322
+function onslaveserverfail(jso)
323
+{
324
+	log('注意:备用服务器已失联'+'   json:'+JSON.stringify(jso));
325
+}
326
+function onswitchtoslaveserver(jso)
327
+{
328
+	log('注意:主服务器故障,已经切换到备用服务器'+jso);
329
+}
330
+//事件回调函数结束
331
+
332
+function queryAgentState()
333
+{
334
+	log('排队外线数量 '+tlwsa.tlaGetacdlength());
335
+	
336
+	log('外线总数量 '+tlwsa.tlaGettrknumber());
337
+	
338
+	var agcount=tlwsa.tlaGetagentcount();
339
+	log('登录坐席数量 '+agcount);
340
+	for(var ind=0;ind<agcount;ind++)
341
+	{
342
+		log('agnet No. ' + ind + ' workid is '+tlwsa.tlaGetagentwid(ind) + ' state is ' + tlwsa.tlaGetagentstate(ind) + '  '+getStateInfo(tlwsa.tlaGetagentstate(ind) ) )
343
+	}
344
+}
345
+
346
+function getLicenseInfo()
347
+{
348
+	ajo=tlwsa.tlaGetlicenseinfo();
349
+	log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno+JSON.stringify(ajo));
350
+	
351
+}
352
+function getStateInfo(state)
353
+{
354
+	switch(state)
355
+	{
356
+		case '0':
357
+		return '未登录';
358
+		case '1':
359
+		return '空闲';
360
+		case '2':
361
+		return '离席';
362
+		case '3':
363
+		return '正在振铃';
364
+		case '4':
365
+		return '播报工号';
366
+		case '5':
367
+		return '通话中';
368
+		case '6':
369
+		return '正在外呼';
370
+		case '7':
371
+		return '正在转移';
372
+		case '8':
373
+		return '正在监听';
374
+	}
375
+}

+ 40 - 22
assets/js/script/TLWSADemo.js

@@ -1,12 +1,18 @@
1 1
 /**
2
-长沙乐科信息技术有限公司 基于WebSocket的坐席客户端事件范例
2
+201606
3
+
4
+基于WebSocket的坐席客户端范例
5
+
3 6
 1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 
4 7
 2 new一个TLWSA对象,每个页面只能有一个实例
5 8
 3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
6 9
 4 写事件callack函数,并赋值给tlwsa的callback
10
+
7 11
 5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
8 12
 6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
13
+
9 14
 其他功能的调用方法请参考相关代码
15
+
10 16
 **/
11 17
 
12 18
 var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
@@ -168,7 +174,7 @@ function onintrudereturn(err) {
168 174
     log('应答:强插请求结果 ' + err);
169 175
 }
170 176
 function ongetcallreturn(err,caller,callee,data,crs) {
171
-    log('应答:代接请求结果 ' + err+' caller:'+caller+' callee:'+callee+' data:'+data+' crs:'+crs);
177
+    log('应答:代接请求结果 ' + err+' '+caller);
172 178
 }
173 179
 function onanswercallreturn(err) {
174 180
     log('应答:应答请求结果 ' + err);
@@ -217,7 +223,8 @@ function ontransfernodereturn(jso)
217 223
 }
218 224
 function onconferencestartreturn(jso)
219 225
 {
220
-	log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid+'   json:'+JSON.stringify(jso));
226
+	log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid);
227
+	log('启动会议 结果 '+JSON.stringify(jso));
221 228
 	if(jso.err == 0)
222 229
 		conferenceid.value=jso.conferenceid;
223 230
 }
@@ -239,16 +246,17 @@ function onconferencekickoutreturn(jso)
239 246
 }
240 247
 function onconferencechangememberstatereturn(jso)
241 248
 {
242
-	log('改变成员状态 结果 '+jso.err+'   json:'+JSON.stringify(jso))
249
+	log('改变成员状态 结果 '+JSON.stringify(jso))
243 250
 }
244 251
 //主动事件回调
245 252
 function oncallin(jso) //呼入通知
246 253
 {
247
-	log('事件:呼入通知,主被叫和用户数据是:  '+jso.caller +'  ' +jso.callee+' '+jso.data+JSON.stringify(jso));
254
+	//log('事件:呼入通知,主被叫和用户数据是:  '+jso.caller +'  ' +jso.callee+' '+jso.data);
255
+	log('事件:呼入通知,相关数据:  '+JSON.stringify(jso));
248 256
 }
249
-function oncallend() //呼叫结束通知
257
+function oncallend(jso) //呼叫结束通知
250 258
 {
251
-	log('事件:通话结束');
259
+	log('事件:通话结束' + JSON.stringify(jso));
252 260
 }
253 261
 function onacw()
254 262
 {
@@ -267,37 +275,47 @@ function oncallresult(err)
267 275
 	log('事件:呼叫结果 '+JSON.stringify(err));
268 276
 }
269 277
 function ontransferresult(err) {
270
-    log('事件:转移结果 ' + err);
278
+    log('事件:转移结果 ' + JSON.stringify(err));
271 279
 }
272 280
 function onconsulttransfercalleeanswer(crs){
273 281
 	log('事件:咨询转移被叫应答 crs=' + crs);
274 282
 }
275 283
 function onblindtransferresult(err) {
276
-    log('事件:盲转结果 ' + err);
284
+    log('事件:盲转结果 ' + JSON.stringify(err));
277 285
 }
278 286
 function onanswer(err) {
279
-    log('事件:应答' + err);
287
+    log('事件:应答');
280 288
 }
281 289
 function onclosed(err) {
282
-    log('事件:与服务器的网络连接中断'+err);
290
+    log('事件:与服务器的网络连接中断');
283 291
 }
284 292
 function onslaveserverclosed(err)
285 293
 {
286
-	log('事件:与备用服务器的网络连接中断'+err);
294
+	log('事件:与备用服务器的网络连接中断');
287 295
 }
288 296
 function onholdcallreleased(err) {
289
-    log('事件:被保持的对方已挂机'+err);
297
+    log('事件:被保持的对方已挂机');
290 298
 }
291 299
 function onkeepcallreleased(err) {
292
-    log('事件:转回ivr并等待的外线已挂机'+err);
300
+    log('事件:转回ivr并等待的外线已挂机');
293 301
 }
294 302
 function oncalleealerting(err) {
295
-    log('事件:呼叫的外线已经开始振铃'+err);
303
+    log('事件:呼叫的外线已经开始振铃');
296 304
 }
297 305
 function onqueue(crs,caller,callee,data)
298 306
 {
299 307
     log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
300 308
 }
309
+function onstatechange()
310
+{
311
+	log('事件:状态变化----------------------------------------------------');
312
+	queryAgentState();
313
+}
314
+function onmystatechange(jso)
315
+{
316
+	log('事件:状态变化----------------------------------------------------');
317
+	log(JSON.stringify(jso));
318
+}
301 319
 function onquitqueue(crs)
302 320
 {
303 321
     log('事件:外线退出队列,crs= '+crs)
@@ -305,14 +323,14 @@ function onquitqueue(crs)
305 323
 function onrecvmsg(msg, from) {
306 324
     log('事件:收到来自'+ from+'的消息:' + msg);
307 325
 }
308
-function onhookstate(hookstate, hktime) {
309
-    log('事件:坐席叉簧状态'+hookstate+'时间'+hktime);
326
+function onhookstate(jso) {
327
+    log('事件:坐席叉簧状态'+JSON.stringify(jso));
310 328
 }
311 329
 function onhardwarefail(err) {
312
-    log('事件:keygoe交换机硬件故障'+err);
330
+    log('事件:keygoe交换机硬件故障');
313 331
 }
314 332
 function onmisscall(err) {
315
-    log('事件:呼损'+err);
333
+    log('事件:呼损');
316 334
 }
317 335
 //新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
318 336
 function onconferencememberstate(jso)
@@ -321,11 +339,11 @@ function onconferencememberstate(jso)
321 339
 }
322 340
 function onslaveserverfail(jso)
323 341
 {
324
-	log('注意:备用服务器已失联'+'   json:'+JSON.stringify(jso));
342
+	log('注意:备用服务器已失联' + JSON.stringify(jso));
325 343
 }
326 344
 function onswitchtoslaveserver(jso)
327 345
 {
328
-	log('注意:主服务器故障,已经切换到备用服务器'+jso);
346
+	log('注意:主服务器故障,已经切换到备用服务器' + JSON.stringify(jso));
329 347
 }
330 348
 //事件回调函数结束
331 349
 
@@ -346,7 +364,7 @@ function queryAgentState()
346 364
 function getLicenseInfo()
347 365
 {
348 366
 	ajo=tlwsa.tlaGetlicenseinfo();
349
-	log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno+JSON.stringify(ajo));
367
+	log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno);
350 368
 	
351 369
 }
352 370
 function getStateInfo(state)

File diff suppressed because it is too large
+ 1473 - 0
assets/js/script/TLWebSocketAgent------------.js


+ 2 - 2
assets/js/script/TLWebSocketAgent.js

@@ -276,7 +276,7 @@ IIFE 立即执行函数表达式
276 276
 			_log("已经连接到服务器");
277 277
 			return false;
278 278
 		}
279
-		var wsUrl='ws://' + serveIP + ':5678';
279
+		var wsUrl='ws://' + serveIP;
280 280
 		_log(wsUrl);
281 281
 		if ("WebSocket" in w) //IE  Chrome
282 282
 		{
@@ -344,7 +344,7 @@ IIFE 立即执行函数表达式
344 344
 			_log("必须在登录之前调用本函数");
345 345
 			return false;
346 346
 		}
347
-		var wsUrl='ws://' + slaveServeIP + ':5678';
347
+		var wsUrl='ws://' + slaveServeIP;
348 348
 		_log(wsUrl);
349 349
 		if ("WebSocket" in w) //IE  Chrome
350 350
 		{