Greasy Fork

Greasy Fork is available in English.

智能话席助手

一个在电信领域的智能助手

目前为 2023-12-11 提交的版本,查看 最新版本

// ==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
// ==/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 = `
     <div id="draggable" class="table-member-container">

    </div>`

        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)
            }
});

	});
})();