 
        Greasy Fork is available in English.
一个在电信领域的智能助手
当前为 
// ==UserScript==
// @name         智能话席助手
// @description   一个在电信领域的智能助手
// @namespace    http://tampermonkey.net/
// @license      GPL-3.0-only
// @version      0.23
// @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
// ==/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 = '250px'
    //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() {
        //#containerCenter 生产环境
        //.appContent 开发环境
		let logo = document.querySelector('.appContent')
		let example = document.createElement("div")
		example.classList.add("div-box")
		example.innerHTML = `
     <div id="draggable" class="table-member-container">
    </div>`
		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.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)
                // 处理接收到的消息
                console.log('event.data', event.data);
                console.log('height',$('.iframe').attr('height'));
            }
});
	});
})();