// ==UserScript== // @name 智能话席助手 // @description 一个在电信领域的智能助手 // @namespace http://tampermonkey.net/ // @license GPL-3.0-only // @version 0.24 // @description 智能话席助手 // @author xiaoliang // @match https://123.147.219.22:9114/* // @match http://10.238.1.245/* // @match http://127.0.0.1:5500/512lmock_liangtong_page.html // @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); } const LOGO_CLOSE_SRC = 'https://cq.infowell.cn/image/close-logo.png' const LOGO_INACTIVE_SRC = 'https://cq.infowell.cn/image/in-intelligent-assistant.png' const LOGO_ACTIVE_SRC = 'https://cq.infowell.cn/image/intelligent-assistant.png' //开发环境 const DEV_SERVER_URL = 'http://192.168.10.47:81' //生产环境 const PROD_SERVER_URL = 'https://cq.infowell.cn' //语音助手ws const WS_SERVER_URL = 'ws://127.0.0.1:7789/ws' //登录窗口 let loginMainDom = '' //业务窗口 let serviceMainDom = '' //外呼窗口 let callMainDom = '' //话务员 let userNameDom = '' //通话状态:无效 通话 整理 let callStatusDom = '' //客户号码 let consumerPhoneDom = '' //产品名 let produceNameDom = '' //iframe原始高度 let iframeOriginHeight = '275px' //iframe完整高度 let iframeFullHeight = '825px' 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() { //.center 生产环境 //.appContent 开发环境 let logo = document.querySelector('.center') let example = document.createElement("div") example.classList.add("div-box") example.innerHTML = `
` console.log('logo=====>>>>>>>>>>.',logo) logo ? logo.appendChild(example) : '' } //渲染样式 function addStyle() { let css = ` .table-member-container { position: fixed; z-index: 99999999; bottom: 0; right: 0; } .iframe{ border:none; }` 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 () { console.log("websocket已打开"); }; //获得消息事件 socket.onmessage = function (msg) { // alert("收到消息:" + msg.data); console.log(msg.data); //发现消息进入,开始处理前端触发逻辑 }; //关闭事件 socket.onclose = function () { console.log("websocket已关闭"); }; //发生了错误事件 socket.onerror = function () { console.log("websocket发生了错误"); } } //文档加载完毕后执行 $(document).ready(function () { console.log('文档已加载完毕,坐席脚本正在启动...') createHTML() addStyle() openSocket() setInterval(() => { //登录窗口 loginMainDom = document.querySelector('.loginbox') //业务窗口 serviceMainDom = document.querySelector('#containerCenter') //话务员 userNameDom = document.querySelector('#empName') //通话状态:无效 通话 整理 callStatusDom = document.querySelector('#status') //客户号码 consumerPhoneDom = document.querySelector('#callee') //产品名 produceNameDom = document.querySelector('#taskTitile') if(loginMainDom){ $('.iframe') ? $('.iframe').hide() : '' } if(serviceMainDom){ $('.iframe') ? $('.iframe').show() : '' } // 通话状态:无效 通话 整理 if (callStatusDom) { cur_status = callStatusDom.innerHTML == '通话' ? '通话中' : callStatusDom.innerHTML } // 号码 if (consumerPhoneDom && consumerPhoneDom.innerHTML) { Phone = consumerPhoneDom.innerHTML cur_phone = consumerPhoneDom.innerHTML } if (userNameDom && userNameDom.innerHTML) { InitParameterMsg.Data.AgentName = userNameDom.innerHTML } if (produceNameDom && produceNameDom.innerHTML) { ProductName = produceNameDom.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(".table-member-container") let iframeElement = document.createElement("iframe") iframeElement.src = PROD_SERVER_URL iframeElement.classList.add('iframe') iframeElement.width = '1100px' iframeElement.height = iframeOriginHeight iframeElement.frameborder = '0' iframeElement.scrolling = 'no' iframeElement.marginheight = '4' iframeElement.marginwidth = '8' scriptContent ? scriptContent.appendChild(iframeElement) : '' }, 500) $(document).tooltip() //监听iframe页面的消息 window.addEventListener('message', function(event) { console.log('监听event:', event); // 确保消息来自指定的iframe if (event.origin == PROD_SERVER_URL) { //1放大 2缩小 event.data == '1' ? $('.iframe').attr('height',iframeFullHeight) : $('.iframe').attr('height',iframeOriginHeight) } }); }); })();