Greasy Fork

Greasy Fork is available in English.

智能话席助手

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

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

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

	});
})();