ZZDianXin_UI - 郑州电信 演示

main.js 18KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. //客户端选项
  2. var option = {
  3. "ServerUri": huayi.config.socket_ip, //mqqt_port
  4. "ServerPort": huayi.config.mqqt_port,
  5. "extenSet": $.cookie("extno"),
  6. "ClientId": $.cookie("User"),
  7. "TimeOut": 5,
  8. "KeepAlive": 100,
  9. "CleanSession": false,
  10. "SSL": false
  11. }
  12. var obj = {};
  13. //连接mqqt
  14. function Connect() {
  15. client = new Paho.Client(huayi.config.socket_ip, huayi.config.mqqt_port,$.cookie("User"), )
  16. client.onConnectionLost = onConnectionLost; //连接断开
  17. client.onMessageArrived = onMessageArrived; //接收消息
  18. client.connect({
  19. invocationContext: {
  20. host: option.ServerUri, //IP地址
  21. port: option.ServerPort, //端口号
  22. path: client.path,
  23. clientId: option.ClientId //标识
  24. },
  25. timeout: option.TimeOut, //连接超时时间
  26. keepAliveInterval: option.KeepAlive, //心跳间隔
  27. cleanSession: option.CleanSession, //是否清理Session
  28. useSSL: option.SSL, //是否启用SSL
  29. onSuccess: onConnect, //连接成功回调事件
  30. onFailure: onError //连接失败回调事件
  31. });
  32. }
  33. //发送
  34. function Send() {
  35. var message = new Paho.Message(JSON.stringify(obj));
  36. message.destinationName = "TopicServer"; //"TopicServer"; currentTopic.Topic
  37. client.send(message);
  38. console.log(message);
  39. WriteToStatus("发布了主题为TopicServer的消息:" + message);
  40. }
  41. //连接成功事件
  42. function onConnect() {
  43. WriteToStatus("连接成功!");
  44. client.subscribe(option.ClientId);
  45. WriteToStatus("成功订阅主题:" + option.ClientId);
  46. }
  47. //连接失败事件
  48. function onError(e) {
  49. WriteToStatus("连接失败:" + JSON.stringify(e))
  50. }
  51. //连接断开事件
  52. function onConnectionLost(e) {
  53. if(e.errorCode !== 0) {
  54. WriteToStatus("连接异常断开:" + e.errorMessage);
  55. }
  56. }
  57. //状态输出
  58. function WriteToStatus(data) {
  59. var now = new Date();
  60. var message = '[' + now.toLocaleTimeString() + ']' + data;
  61. console.log(message);
  62. }
  63. //接收消息事件
  64. function onMessageArrived(data) {
  65. console.log(data.payloadString)
  66. var data = JSON.parse(data.payloadString)[0];
  67. if(data) {
  68. var rlt = data.Result;
  69. if(rlt == true) {
  70. var type = data.Type;
  71. switch(type.toLowerCase()) {
  72. case "login":
  73. LoginBack();
  74. break; //签入
  75. case "logout":
  76. LogoutBack();
  77. break; //签出
  78. case "dropcall":
  79. DropCallBack();
  80. break; //挂断
  81. case "makecall": //MakeCall
  82. MakeCallBack(data);
  83. break; //外呼
  84. case "setstate":
  85. SetState(data);
  86. break; //置忙置闲
  87. //case "saybusy": SayBusyBack(data); break;
  88. //case "sayfree": SayFreeBack(data); break;
  89. case "meeting":
  90. MeetingBack();
  91. break; //多方通话
  92. case "transfer":
  93. TransferBack();
  94. break; //转移
  95. case "hold":
  96. HoldBack();
  97. break; //保持
  98. case "retrieve":
  99. RetrieveBack();
  100. break; //接回
  101. case "incoming":
  102. IncomingBack(data);
  103. break; //来电
  104. case "subscribe":
  105. SubScribeBack();
  106. break; //监测
  107. case "subscribecancel":
  108. SubScribeCancelBack();
  109. break; //停止监测
  110. case "agentstate":
  111. AgentStateBack(data);
  112. break; //坐席状态
  113. case "linestate":
  114. LineStateBack(data);
  115. break; //线路状态
  116. case "motorsetstate":
  117. SayFreeBack();
  118. break; //班长置闲
  119. case "linestateagent":
  120. LineStateAgentBack(data);
  121. break; //线路状态通知
  122. case "callid":
  123. CallIDBack(data);
  124. break; //获取callid
  125. case "recordpath":
  126. RecordPathBack(data);
  127. break; //录音返回
  128. }
  129. } else {
  130. if(rlt == false) {
  131. //$(".hwzt").text('操作失败!');
  132. //外呼失败的文字展示
  133. if(data.Type.toLowerCase() == "makecall") {
  134. switch(data.ErrorCode) {
  135. case 1:
  136. $(".hwzt").text(' 挂机,请重试!');
  137. break;
  138. case 2:
  139. $(".hwzt").text(' FS外呼命令失败,请重试!');
  140. break;
  141. case 3:
  142. $(".hwzt").text(' 外呼获取座席失败,请重试!');
  143. break;
  144. case 4:
  145. $(".hwzt").text(' 座席置忙禁止座席外呼,请重试!');
  146. break;
  147. case 5:
  148. $(".hwzt").text(' 主叫座席分机非空闲或摘机拨号,请重试!');
  149. break;
  150. case 6:
  151. $(".hwzt").text(' 为外呼设置座席状态失败,请重试!');
  152. break;
  153. case 7:
  154. $(".hwzt").text(' 被叫座席非空闲,请重试!');
  155. break;
  156. case 8:
  157. $(".hwzt").text(' 执行分机呼叫失败, 未找到分机通道,请重试!');
  158. break;
  159. case 9:
  160. $(".hwzt").text(' 执行分机呼叫失败, 无法绑定分机通道,请重试!');
  161. break;
  162. case 10:
  163. $(".hwzt").text(' 禁止分机自呼,请重试!');
  164. break;
  165. case 11:
  166. $(".hwzt").text(' 发送分机呼叫Esl命令失败,请重试!');
  167. break;
  168. case 12:
  169. $(".hwzt").text(' 目标分机非空闲,请重试!');
  170. break;
  171. case 13:
  172. $(".hwzt").text(' 主控通道非空闲,请重试!');
  173. break;
  174. case 14:
  175. $(".hwzt").text(' 校验不通过绑定本端逻辑线路失败,请重试!');
  176. break;
  177. case 15:
  178. $(".hwzt").text(' 校验不通过本端当前线路忙,请重试!');
  179. break;
  180. case 16:
  181. $(".hwzt").text(' 校验不通过对端线路状态忙,请重试!');
  182. break;
  183. case 17:
  184. $(".hwzt").text(' 被叫关机,请重试!');
  185. break;
  186. case 18:
  187. $(".hwzt").text(' 无效号码,请重试!');
  188. break;
  189. case 19:
  190. $(".hwzt").text(' 无人接听,请重试!');
  191. break;
  192. case 20:
  193. $(".hwzt").text(' 交换机错误(用户无法接通),请重试!');
  194. break;
  195. case 21:
  196. $(".hwzt").text(' 话机外呼执行数据交换操作失败未找到分机通道,请重试!');
  197. break;
  198. case 22:
  199. $(".hwzt").text(' 话机外呼执行数据交换操作失败分机通道未绑定任务,请重试!');
  200. break;
  201. case 23:
  202. $(".hwzt").text(' 执行设备外呼任务失败无法获取对应线路,请重试!');
  203. break;
  204. }
  205. }
  206. if(data.Type == 'AcdConnectNotify') {
  207. $("#top-search li i").removeClass("active");
  208. $(".hwzt").text('Acd未连接');
  209. }
  210. } else {
  211. $(".hwzt").text(rlt);
  212. }
  213. }
  214. }
  215. }
  216. //签入
  217. function LoginBack() {
  218. $("#top-search li i").removeClass("active");
  219. $(".Logout").addClass("active");
  220. $(".SayBusy").addClass("active");
  221. $(".MakeCall").addClass("active");
  222. $(".zxzt").removeClass("br").addClass("bl");
  223. $(".fwzt").removeClass("br").addClass("bl");
  224. $(".hwzt").text('空闲');
  225. }
  226. //签出
  227. function LogoutBack() {
  228. $("#top-search li i").removeClass("active");
  229. $(".Login").addClass("active");
  230. $(".zxzt").removeClass("bl").addClass("br");
  231. $(".fwzt").removeClass("bl").addClass("br");
  232. $(".hwzt").text('');
  233. }
  234. //来电
  235. function IncomingBack(data) {
  236. if(data.CallID!=0){
  237. var p = '<a href="javascript:;" class="active J_menuTab" data-id="./callScreen/callScreen.html?tel=' + data.Number + '&CallID=' + data.CallID + '">来电弹屏' + data.Number + ' <i class="fa fa-times-circle"></i></a>';
  238. $(".J_menuTab").removeClass("active");
  239. var nif = '<iframe class="J_iframe J_iframeNew" name="iframe'+ data.CallID +'" width="100%" height="100%" src="./callScreen/callScreen.html?Number=' + data.Number + '&CallID=' + data.CallID + '&ActionID=' + data.ActionID + '" frameborder="0" data-id="./callScreen/callScreen.html?tel=' + data.Number + '&CallID=' + data.CallID + '" seamless></iframe>';
  240. $(".J_mainContent").find("iframe.J_iframe").hide().parents(".J_mainContent").append(nif);
  241. $(".J_menuTabs .page-tabs-content").append(p);
  242. hidTel=data.Number;
  243. hidCallID=data.CallID;
  244. hidActionID=data.ActionID;
  245. }else{
  246. var timestamp = Date.parse(new Date());
  247. var p = '<a href="javascript:;" class="active J_menuTab" data-id="./callScreen/callScreen.html?tel=' + data.Number + '&CallID='+timestamp+'">来电弹屏' + data.Number + ' <i class="fa fa-times-circle"></i></a>';
  248. $(".J_menuTab").removeClass("active");
  249. var nif = '<iframe class="J_iframe J_iframeNew" name="iframe'+timestamp+'" width="100%" height="100%" src="./callScreen/callScreen.html?Number=' + data.Number + '&CallID='+timestamp+'" frameborder="0" data-id="./callScreen/callScreen.html?tel=' + data.Number + '&CallID='+timestamp+'" seamless></iframe>';
  250. $(".J_mainContent").find("iframe.J_iframe").hide().parents(".J_mainContent").append(nif);
  251. $(".J_menuTabs .page-tabs-content").append(p);
  252. hidTel=data.Number;
  253. hidCallID=timestamp;
  254. }
  255. }
  256. //***************************************************
  257. function CallIDBack(data) {
  258. //$(".hidCallID").val(data.CurrID);
  259. }
  260. //挂断
  261. function DropCallBack() {
  262. $("#top-search li i").removeClass("active");
  263. $(".Logout").addClass("active");
  264. $(".SayBusy").addClass("active");
  265. $(".MakeCall").addClass("active");
  266. var obj = $("iframe:visible")
  267. if(window.frames['iframe'+ hidCallID +'']){
  268. window.frames['iframe'+ hidCallID +''].$(".td-call").hide();
  269. }
  270. }
  271. //线路状态通知
  272. function LineStateAgentBack(data) {
  273. var objiframe = $("iframe:visible")
  274. //0分机不可用,1空闲,2摘机等待拨号,3正在拨号,4呼出振铃,5来电振铃,6通话中,7播放忙音中,8移除IP分机,9通话保持中
  275. if(data.State == '0') {
  276. $(".hwzt").text('分机不可用'); //左下角状态显示
  277. $(".fwzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加话机状态灯
  278. $(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
  279. }
  280. if(data.State == '1') {
  281. // var isml=0;
  282. if($("#isml").val()==1){
  283. // isml=1;
  284. $(".hwzt").text('置忙'); //左下角状态显示
  285. $(".zxzt").removeClass("bl").addClass("br");
  286. }
  287. else{
  288. $(".hwzt").text('空闲'); //左下角状态显示
  289. $(".zxzt").removeClass("br").addClass("bl");
  290. }
  291. $(".fwzt").removeClass("br").addClass("bl");
  292. // $(".zxzt").removeClass("br").addClass("bl");//20180509 by fanlongfei 增加坐席状态灯
  293. if(window.frames['iframe'+ hidCallID +'']){
  294. window.frames['iframe'+ hidCallID +''].clearInter();
  295. }
  296. if (hidTel && hidCallID) {
  297. $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateGJ', {
  298. callid: hidTel,
  299. "token": $.cookie("token")
  300. }, function (result) {
  301. result = JSON.parse(result);
  302. if (result.state.toLowerCase() == "success") { }
  303. })
  304. }
  305. $("#top-search li i").removeClass("active");
  306. $(".Logout").addClass("active");
  307. if($("#isml").val()==0){
  308. $(".SayBusy").addClass("active");
  309. }
  310. else{
  311. $(".SayFree").addClass("active");
  312. }
  313. $(".MakeCall").addClass("active");
  314. if(window.frames['iframe'+ hidCallID +'']){
  315. window.frames['iframe'+ hidCallID +''].$(".td-call").hide();
  316. }
  317. }
  318. if(data.State == '2') {
  319. $(".hwzt").text('摘机等待拨号'); //左下角状态显示
  320. }
  321. if(data.State == '3') {
  322. $(".hwzt").text('正在拨号'); //左下角状态显示
  323. }
  324. if(data.State == '4') {
  325. $(".hwzt").text('呼出振铃'); //左下角状态显示
  326. }
  327. if(data.State == '5') {
  328. $(".hwzt").text('来电振铃'); //左下角状态显示
  329. $(".fwzt").removeClass("br").addClass("bl");//20180509 by fanlongfei 增加话机状态灯
  330. $(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
  331. if (hidTel && hidCallID) {
  332. $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZL', {
  333. callid: hidCallID,
  334. "token": $.cookie("token")
  335. }, function (result) {
  336. result = JSON.parse(result);
  337. if (result.state.toLowerCase() == "success") { }
  338. })
  339. }
  340. }
  341. if(data.State == '6') {
  342. $(".hwzt").text('通话中'); //左下角状态显示
  343. $(".fwzt").removeClass("bl").addClass("br");
  344. $(".zxzt").removeClass("bl").addClass("br");//20180509 by fanlongfei 增加坐席状态灯
  345. if(hidTel && hidCallID) {
  346. $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateZJ', {
  347. callid: hidCallID,
  348. "token": $.cookie("token")
  349. }, function(result) {
  350. result = JSON.parse(result);
  351. if(result.state.toLowerCase() == "success") {}
  352. })
  353. }
  354. $("#top-search li i").removeClass("active");
  355. $(".DropCall").addClass("active");
  356. $(".Hold").addClass("active");
  357. $(".Transfer").addClass("active");
  358. $(".Meeting").addClass("active");
  359. if(data.CallDirection=="in"){
  360. etTimeout (window.frames['iframe'+ hidCallID +''].calling(),500);/*2018-05-19 zhangshuangnan 修改 ps: 因软电话设置为 自动应答 通话时间不计时问题*/
  361. }
  362. }
  363. if(data.State == '7') {
  364. $(".hwzt").text('播放忙音中'); //左下角状态显示
  365. }
  366. if(data.State == '8') {
  367. $(".hwzt").text('移除IP分机'); //左下角状态显示
  368. }
  369. if(data.State == '9') {
  370. $(".hwzt").text('通话保持中'); //左下角状态显示
  371. }
  372. }
  373. function toDub(i) {
  374. return i < 10 ? "0" + i : "" + i;
  375. }
  376. //外呼
  377. function MakeCallBack(data) {
  378. var makeCallPhone = $.cookie("makeCallPhone");
  379. $("#top-search li i").removeClass("active");
  380. $(".DropCall").addClass("active");
  381. //外呼弹屏
  382. if(data.CallID!=0){
  383. var p = '<a href="javascript:;" class="active J_menuTab" data-id="./callScreen/callScreen.html?tel=' + makeCallPhone + '&CallID=' + makeCallId + '">外呼弹屏' + makeCallPhone + ' <i class="fa fa-times-circle"></i></a>';
  384. $(".J_menuTab").removeClass("active");
  385. var nif = '<iframe class="J_iframe J_iframeNew" name="iframe'+ makeCallId +'" width="100%" height="100%" src="./callScreen/callScreen.html?Number=' + makeCallPhone + '&CallID=' + makeCallId + '&ActionID=' + data.ActionID + '" frameborder="0" data-id="./callScreen/callScreen.html?tel=' + makeCallPhone + '&CallID=' + makeCallId + '" seamless></iframe>';
  386. $(".J_mainContent").find("iframe.J_iframe").hide().parents(".J_mainContent").append(nif);
  387. $(".J_menuTabs .page-tabs-content").append(p);
  388. hidTel=makeCallPhone;
  389. hidCallID=makeCallId;
  390. hidActionID=data.ActionID;
  391. }else{
  392. var timestamp = Date.parse(new Date());
  393. var p = '<a href="javascript:;" class="active J_menuTab" data-id="./callScreen/callScreen.html?tel=' + makeCallPhone + '&CallID='+timestamp+'">外呼弹屏' + makeCallPhone + ' <i class="fa fa-times-circle"></i></a>';
  394. $(".J_menuTab").removeClass("active");
  395. var nif = '<iframe class="J_iframe J_iframeNew" name="iframe'+timestamp+'" width="100%" height="100%" src="./callScreen/callScreen.html?Number=' + makeCallPhone + '&CallID='+timestamp+'" frameborder="0" data-id="./callScreen/callScreen.html?tel=' + makeCallPhone + '&CallID='+timestamp+'" seamless></iframe>';
  396. $(".J_mainContent").find("iframe.J_iframe").hide().parents(".J_mainContent").append(nif);
  397. $(".J_menuTabs .page-tabs-content").append(p);
  398. hidTel=makeCallPhone;
  399. hidCallID=timestamp;
  400. }
  401. setTimeout (window.frames['iframe'+ hidCallID +''].calling(),500);
  402. }
  403. //置忙置闲
  404. function SetState(obj) {
  405. if(obj.State == '5') {
  406. $(".SayBusy").removeClass("active");
  407. $(".SayFree").addClass("active");
  408. $(".zxzt").removeClass("bl").addClass("br");
  409. $(".hwzt").text('置忙');
  410. $("#isml").val(1)
  411. }
  412. if(obj.State == '2') {
  413. $(".SayBusy").addClass("active");
  414. $(".SayFree").removeClass("active");
  415. $(".zxzt").removeClass("br").addClass("bl");
  416. $(".hwzt").text('空闲');
  417. $("#isml").val(0)
  418. }
  419. }
  420. //置忙
  421. function SayBusyBack() {
  422. $(".SayBusy").removeClass("active");
  423. $(".SayFree").addClass("active");
  424. $("#isml").val(1)
  425. }
  426. //坐席班长置闲
  427. function SayFreeBack() {
  428. $(".SayBusy").addClass("active");
  429. $(".SayFree").removeClass("active");
  430. $(".zxzt").removeClass("br").addClass("bl"); // 2018/05/09 by fanlongfei 增加坐席状态指示
  431. $(".hwzt").text('空闲');// 2018/05/09 by fanlongfei 增加坐席状态指示
  432. $("#isml").val(0)
  433. }
  434. //多方通话
  435. function MeetingBack() {
  436. }
  437. //转移
  438. function TransferBack() {
  439. $("#top-search li i").removeClass("active");
  440. $(".Logout").addClass("active");
  441. $(".SayBusy").addClass("active");
  442. $(".MakeCall").addClass("active");
  443. }
  444. //保持
  445. function HoldBack() {
  446. $(".Hold").removeClass("active");
  447. $(".Retrieve").addClass("active");
  448. }
  449. //接回
  450. function RetrieveBack() {
  451. $(".Hold").addClass("active");
  452. $(".Retrieve").removeClass("active");
  453. }
  454. //监测
  455. function SubScribeBack() {
  456. $('#content-main .J_iframeNew').each(function(i,n){
  457. if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
  458. window.frames[$(this).attr("name")].Start();
  459. }
  460. })/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
  461. }
  462. //取消监测
  463. function SubScribeCancelBack() {
  464. // var obj = $("iframe:visible")
  465. // if(obj.attr("data-id") == "./TelCall/SeatMonitor.html") {
  466. // window.frames[obj.attr("name")].();
  467. // }
  468. $('#content-main .J_iframeNew').each(function(i,n){
  469. if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
  470. window.frames[$(this).attr("name")].Stop();
  471. }
  472. })/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
  473. }
  474. //班长监测返回状态
  475. //坐席状态
  476. function AgentStateBack(data) {
  477. $('#content-main .J_iframeNew').each(function(i,n){
  478. if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
  479. window.frames[$(this).attr("name")].UpdateAgentState(data.AgentID, data.State);
  480. }
  481. })/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
  482. }
  483. //线路状态
  484. function LineStateBack(data) {
  485. $('#content-main .J_iframeNew').each(function(i,n){
  486. if($(this).attr('data-id') == "./TelCall/SeatMonitor.html"){
  487. window.frames[$(this).attr("name")].UpdateLineState(data.AgentID, data.State);
  488. }
  489. })/*2018-05-24 zhangshuangnan 修改 解决通话中时 坐席监控状态不改变的问题*/
  490. }
  491. //录音返回
  492. function RecordPathBack(data) {
  493. $(".hidCallID").val(data.CallID);
  494. // 外呼返回CallId
  495. makeCallId = data.CallID;
  496. if(hidTel) {
  497. $.post(huayi.config.callcenter_url + 'CallInScreen/UpdateLY', {
  498. callid: data.CallID,
  499. path: data.RecPath,
  500. "token": $.cookie("token")
  501. }, function(result) {
  502. result = JSON.parse(result);
  503. if(result.state.toLowerCase() == "success") {}
  504. })
  505. }
  506. }
  507. //获取当前的日期时间 格式“yyyy-MM-dd HH:mm:ss”
  508. function getNowFormatDate() {
  509. var date = new Date();
  510. var seperator1 = "-";
  511. var seperator2 = ":";
  512. var month = date.getMonth() + 1;
  513. var strDate = date.getDate();
  514. if(month >= 1 && month <= 9) {
  515. month = "0" + month;
  516. }
  517. if(strDate >= 0 && strDate <= 9) {
  518. strDate = "0" + strDate;
  519. }
  520. var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate +
  521. " " + date.getHours() + seperator2 + date.getMinutes() +
  522. seperator2 + date.getSeconds();
  523. return currentdate;
  524. }