// ==UserScript== // @name 智能话席助手 // @description 一个在电信领域的智能助手 // @namespace http://tampermonkey.net/ // @license GPL-3.0-only // @version 0.22 // @description 智能话席助手 // @author xiaoliang // @match https://123.147.219.22:9114/ // @resource customCSS1 https://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css // @resource customCSS2 http://jqueryui.com/resources/demos/style.css // @grant GM_addStyle // @grant GM_getResourceText // @require http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js // @require https://code.jquery.com/ui/1.10.4/jquery-ui.js // @downloadURL none // ==/UserScript== (function () { 'use strict'; // Your code here... if (!$) { var s = document.createElement("script"); s.src = "http://cdn.bootcss.com/jquery/1.8.3/jquery.min.js"; s.async = false; document.documentElement.appendChild(s); } let LOGO_CLOSE_SRC = 'https://cq.infowell.cn/image/close-logo.png' let LOGO_INACTIVE_SRC = 'https://cq.infowell.cn/image/in-intelligent-assistant.png' let LOGO_ACTIVE_SRC = 'https://cq.infowell.cn/image/intelligent-assistant.png' let PAGE_SERVER_URL = 'https://cq.infowell.cn/' let WS_SERVER_URL = 'ws://127.0.0.1:7789/ws' let openFlag = 1 let socket = null let pre_status = '' let cur_status = '' let pre_phone = '' let cur_phone = '' let Phone = '' let ProductName = '' let StatusChangeMsg = {} let InitParameterMsg = { EventId: "InitParameter", Data: { ProjectId: 16, ProjectName: '5G升级包外呼营销', AgentName: '' } } //加载在线样式 const css1 = GM_getResourceText("customCSS1"); const css2 = GM_getResourceText("customCSS2"); GM_addStyle(css1) GM_addStyle(css2) //构造文档 function createHTML() { let logo = document.querySelector(".appContent") let example = document.createElement("div") example.classList.add("div-box") example.innerHTML = `
` logo.appendChild(example) } //渲染样式 function addStyle() { let css = `.container { position: fixed; z-index: 99999999; top: 40px; right: 0px; } .content { position: relative; } .content iframe { border: none; } .content .close-btn { position: absolute; z-index:999; top: 36px; left: -20px; display: flex; align-items: center; padding-left: 8px; box-sizing: border-box; width: 50px; height: 50px; border-radius: 50%; background-color: #ffffff; cursor: pointer; box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.2); } .content .close-btn img { width: 25px; height: 25px; } .open-btn { position: fixed; z-index: 99999999; bottom: 0px; right: 0px; display: flex; border:none; flex-direction: column; justify-content: center; align-items: center; width: 80px; height: 80px; border-radius: 50%; box-shadow: 1px 1px 15px rgba(0, 0, 0, 0.2); background-color: #ffffff; font-size: 16px;d cursor: pointer; margin: 50px 50px; } .open-btn img { width: 60px; height: 60px; }` GM_addStyle(css) } //发送消息 function sendMessage(msg) { console.log('正在向websocket发送消息,消息如下:') console.log(msg) socket.send(msg); } //连接webocket function openSocket() { const socketUrl = WS_SERVER_URL; console.log(socketUrl); if (socket != null) { socket.close(); socket = null; } socket = new WebSocket(socketUrl); console.log('socket对象:'); console.log(socket); //打开事件 socket.onopen = function () { $('.open-btn').attr({ disabled: false }) $('.open-img').attr({ src: LOGO_ACTIVE_SRC, title: "双击打开坐席助手" }) console.log("websocket已打开"); }; //获得消息事件 socket.onmessage = function (msg) { // alert("收到消息:" + msg.data); console.log(msg.data); //发现消息进入,开始处理前端触发逻辑 }; //关闭事件 socket.onclose = function () { $('.open-btn').attr({ disabled: true }) $('.open-img').attr({ src: LOGO_INACTIVE_SRC, title: "无法连接到坐席助手" }) console.log("websocket已关闭"); }; //发生了错误事件 socket.onerror = function () { $('.open-btn').attr({ disabled: true }) $('.open-img').attr({ src: LOGO_INACTIVE_SRC, title: "无法连接到坐席助手" }) console.log("websocket发生了错误"); } } //文档加载完毕后执行 $(document).ready(function () { console.log('文档已加载完毕,坐席脚本正在启动...') createHTML() addStyle() openSocket() $(".content").hide() $('.close-img').attr({ src: LOGO_CLOSE_SRC, title: "双击关闭坐席助手" }) setInterval(() => { if (openFlag && document.querySelector('.layout')) { $(".open-btn").show() } else { $(".open-btn").hide() } if (document.querySelector('.loginMain')) { $(".content").hide() } // 通话状态:无效 通话中 整理 if (document.querySelector('.text')) { cur_status = document.querySelector('.text').innerHTML } // 号码 if (document.querySelectorAll('.value').length > 0) { document.querySelectorAll('.value').forEach((item) => { if (item.innerHTML > 10000000000) { Phone = item.innerHTML cur_phone = item.innerHTML return false } }) } //话务员 if (document.querySelector('.userName') && document.querySelector('.userName').innerHTML) { InitParameterMsg.Data.AgentName = document.querySelector('.userName').innerHTML.replace('JYX', '') } //产品名 if (document.querySelector('.ivu-tag-text') && document.querySelector('.ivu-tag-text').innerHTML) { ProductName = document.querySelector('.ivu-tag-text').innerHTML } if (cur_phone != pre_phone && cur_status == '通话中') { pre_phone = cur_phone pre_status = cur_status //如果ws断开,则重连并发送消息 if (socket.readyState == 3) { console.log('socket已断开...') openSocket() console.log('socket已断开重连...') //数据初始化 sendMessage(JSON.stringify(InitParameterMsg)) StatusChangeMsg = { EventId: "StateChange", Data: { PreState: pre_status, NowState: cur_status, Phone: Phone, ProductName: ProductName } } sendMessage(JSON.stringify(StatusChangeMsg)) } //否则发送消息 else { console.log('socket已连接...') sendMessage(JSON.stringify(InitParameterMsg)) StatusChangeMsg = { EventId: "StateChange", Data: { PreState: pre_status, NowState: cur_status, Phone: Phone, ProductName: ProductName } } sendMessage(JSON.stringify(StatusChangeMsg)) } } // 只允许在状态改变的时候发消息 if (cur_status != pre_status && cur_status != '通话中') { //把当前号码赋值给上一通号码,当当前号码与上一通号码不一样时再发送消息 pre_phone = cur_phone pre_status = cur_status //如果ws断开,则重连并发送消息 if (socket.readyState == 3) { console.log('socket已断开...') openSocket() console.log('socket已断开重连...') //数据初始化 sendMessage(JSON.stringify(InitParameterMsg)) StatusChangeMsg = { EventId: "StateChange", Data: { PreState: pre_status, NowState: cur_status, Phone: Phone, ProductName: ProductName } } sendMessage(JSON.stringify(StatusChangeMsg)) } //否则发送消息 else { console.log('socket已连接...') sendMessage(JSON.stringify(InitParameterMsg)) StatusChangeMsg = { EventId: "StateChange", Data: { PreState: pre_status, NowState: cur_status, Phone: Phone, ProductName: ProductName } } sendMessage(JSON.stringify(StatusChangeMsg)) } } }, 200) // 异步加载iframe,连接上websocket并接受消息 setTimeout(() => { let scriptContent = document.querySelector(".content") let iframeDom = document.createElement("iframe") iframeDom.src = PAGE_SERVER_URL iframeDom.width = '1020px' iframeDom.height = '770px' iframeDom.frameborder = '0' iframeDom.scrolling = 'no' iframeDom.marginheight = '4' iframeDom.marginwidth = '8' scriptContent.appendChild(iframeDom) }, 500) $(document).tooltip() $(".open-btn").dblclick(function () { openFlag = 0 $(".open-btn").hide() $(".content").show() }) $(".close-btn").dblclick(function () { openFlag = 1 $(".content").hide() $(".open-btn").show() }) }); })();