543 lines
15 KiB
JavaScript
543 lines
15 KiB
JavaScript
window.console = window.console || (function () {
|
||
var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile
|
||
= c.clear = c.exception = c.trace = c.assert = function () { };
|
||
return c;
|
||
})();
|
||
|
||
$(function () {
|
||
document.all.lblFJH.innerText = strFJH;
|
||
if (strIsAdmin=="0") {
|
||
$("#btnAgentMonitor").parent().hide();
|
||
}
|
||
__Connect(1);
|
||
});
|
||
|
||
/*********************************************
|
||
方法封装
|
||
*********************************************/
|
||
//移动坐席登录
|
||
function __Connect(_verifyMode) {
|
||
if (Agent.connected) {
|
||
return;
|
||
}
|
||
var jsonOption = '{"UseLicense": 1,"AgentId": ' + strFJH + ',"TeleNum": "' + strFJH + '"}';
|
||
try {
|
||
Agent.BeepOnRing = false;
|
||
Agent.CtiServerName = "192.168.1.11";
|
||
Agent.CtiServerPort = "13920";
|
||
Agent.WorkNo = strGH;
|
||
Agent.Password = "123";
|
||
Agent.VerifyMode = _verifyMode;
|
||
Agent.ConnectCtiServer(jsonOption);
|
||
} catch (e) {
|
||
}
|
||
}
|
||
|
||
//移动坐席退出
|
||
function __Loginout() {
|
||
Agent.LogOut();
|
||
return true;
|
||
}
|
||
|
||
//挂断
|
||
function __Hangup(exten) {
|
||
Agent.PickDown();
|
||
}
|
||
|
||
//外拨
|
||
function __Dial(exten, dst) {
|
||
if (!Agent.connected) {
|
||
showstatus('服务器未连接');
|
||
}
|
||
if (!Agent.Logged) {
|
||
showstatus('坐席未登录');
|
||
}
|
||
blCallOut = true;
|
||
var txtCallingNo = document.all.txtCallingNo.value.Trim();
|
||
Agent.PickUp();
|
||
}
|
||
|
||
//转接
|
||
function __Transfer(exten, dst) {
|
||
Agent.Transfer(dst, -1, "");
|
||
}
|
||
//监听
|
||
function __Chanspy(exten, dst) {
|
||
isListen = true;
|
||
Agent.PickUp();
|
||
}
|
||
//示闲/忙
|
||
function __setDND(dnd) {
|
||
if (dnd == 1)//示忙
|
||
{
|
||
Agent.Pause(11);//离开
|
||
}
|
||
else{
|
||
Agent.Continue();//离开
|
||
}
|
||
}
|
||
//清除转接状态
|
||
function clearTransfer() {
|
||
document.all.lfjh.style.display = "none";
|
||
}
|
||
//清除监听状态
|
||
function clearToListen() {
|
||
document.all.lfjh.style.display = "none";
|
||
}
|
||
//清除定时器
|
||
function cleartimer() {
|
||
nTimer = 1;
|
||
window.clearTimeout(timer2);
|
||
}
|
||
/*********************************************
|
||
功能代码
|
||
*********************************************/
|
||
//退出
|
||
function btnLogout() {
|
||
__Loginout();
|
||
}
|
||
//登录
|
||
function btnLogin() {
|
||
__Connect(1);
|
||
}
|
||
//软挂机
|
||
function funBtnSoftHook() {
|
||
clearTransfer();
|
||
clearToListen();
|
||
__Hangup(strFJH);
|
||
}
|
||
|
||
//外拨
|
||
function funBtnCall() {
|
||
try {
|
||
clearToListen(); clearTransfer();
|
||
var dst = document.all.txtTelNO.value.Trim();
|
||
if (dst.length == 0) {
|
||
showstatus("号码为空!", "err");
|
||
return;
|
||
}
|
||
if (strGH == "") {
|
||
showstatus("登录超时,请重新登录。", "err");
|
||
return;
|
||
}
|
||
__Dial(strFJH, dst);
|
||
}
|
||
catch (e) { showstatus("系统错误", "err", e); console.log("funBtnCall出错:" + e.message); }
|
||
}
|
||
|
||
// 转接
|
||
function funBtnTrans() {
|
||
$('#btnFJH').unbind("click");
|
||
document.all.txtTelNO.value = "";
|
||
document.all.btnFJH.value = "转接";
|
||
document.all.lfjh.style.display = "";
|
||
$("#btnFJH").bind("click", function () {
|
||
var strTransfer = document.all.txtTelNO.value.Trim();
|
||
if (strTransfer == "") {
|
||
alert('请选择要转接到的号码。');
|
||
return;
|
||
}
|
||
if (isBC && isBC == "True") {
|
||
$.post("/Call/GetUserAgent", { usereid: strTransfer }, function (fjh) {
|
||
strTransfer = fjh;
|
||
__Transfer(strFJH, strTransfer);
|
||
})
|
||
}
|
||
else
|
||
__Transfer(strFJH, strTransfer);
|
||
});
|
||
}
|
||
|
||
//监听
|
||
function funBtnToListen() {//clearTransfer();
|
||
$('#btnFJH').unbind("click");
|
||
document.all.txtTelNO.value = "";
|
||
document.all.btnFJH.value = "监听";
|
||
document.all.lfjh.style.display = "";
|
||
$("#btnFJH").bind("click", function () {
|
||
tolisten();
|
||
});
|
||
}
|
||
|
||
//监听
|
||
function tolisten() {
|
||
var strToLisFJH = document.all.txtTelNO.value.Trim();
|
||
if (strToLisFJH == "") {
|
||
alert('请选择要监听的分机号。');
|
||
return;
|
||
}
|
||
if (isBC && isBC == "True") {
|
||
$.post("/Call/GetUserAgent", { usereid: strToLisFJH }, function (fjh) {
|
||
strToLisFJH = fjh;
|
||
__Chanspy(strFJH, strToLisFJH);
|
||
})
|
||
}
|
||
else
|
||
__Chanspy(strFJH, strToLisFJH);
|
||
}
|
||
//监控
|
||
function btnAgentmonitor() {
|
||
ChildAddTab("坐席监控", '/CallRecord/AgentMonitor?strFJH=' + strFJH);
|
||
}
|
||
//弹屏
|
||
//0呼入,1呼出
|
||
function mixcallback(vStrCaller, vStrCallee, vStrSerial, CallType) {
|
||
if (CallType == 0) {//callin
|
||
blCallin = true;
|
||
}
|
||
funEnabledBtn("btnSoftHook", true);
|
||
var strCaller = vStrCaller + ",";
|
||
var arr = vStrCaller.split(',');
|
||
strCaller = arr[0] + '-';
|
||
var arr1 = strCaller.split('-');
|
||
strCaller = arr1[0];
|
||
|
||
var DNIS = vStrCallee; //被叫号码
|
||
var Tel = vStrCaller; //主叫号码
|
||
var SRID = vStrSerial; //电话流水号
|
||
var SRN = vStrCallee; //服务号码
|
||
var AGENTID = strGH; //客服工号
|
||
var vStrUrl = "/Call/CallLog?State=" + CallType + "&CallType=1&DNIS=" + DNIS + "&Tel=" + Tel + "&SRID=" + SRID + "&SRN=" + SRN + "&AGENTID=" + AGENTID;
|
||
ShowResDetial(vStrUrl);
|
||
}
|
||
|
||
//获取分机状态回调
|
||
function __getStatusCallback(onstatus, worktype) {
|
||
try {
|
||
if (onstatus == -1 || onstatus == -2 || onstatus == 0) {//-2座席不存在,-1离线,0在线
|
||
funEnabledBtn("btnDND", false);
|
||
funEnabledBtn("btnListen", false);
|
||
funEnabledBtn("btnHangup", false);
|
||
funEnabledBtn("btnTransfer", false);
|
||
}
|
||
if (onstatus == 4) {//0: 空闲
|
||
funEnabledBtn("btnTransfer", false);
|
||
funEnabledBtn("btnHangup", false);
|
||
funEnabledBtn("btnDND", true);
|
||
if (strIsAdmin == "1") {
|
||
funEnabledBtn("btnListen", true);
|
||
}
|
||
}
|
||
if (onstatus == 6) {//6: 工作
|
||
funEnabledBtn("btnDND", false);
|
||
funEnabledBtn("btnHangup", true);
|
||
funEnabledBtn("btnTransfer", true);
|
||
funEnabledBtn("btnListen", false);
|
||
}
|
||
if (worktype == 8) {//8: 监听
|
||
clearToListen(); clearTransfer();
|
||
funEnabledBtn("btnDND", false);
|
||
funEnabledBtn("btnTransfer", false); //
|
||
funEnabledBtn("btnHangup", true); //
|
||
funEnabledBtn("btnListen", false);
|
||
funEnabledBtn("btnHangup", true);
|
||
}
|
||
blLogined = true;
|
||
|
||
var lblexstatus = $("#divAction");
|
||
var strstats = getstatus(onstatus);
|
||
lblexstatus.html(strstats);
|
||
|
||
if (Agent.AgentState != -1 && Agent.AgentState != -2) {//
|
||
document.all.btnLogout.style.display = "block";
|
||
document.all.btnLogin.style.display = "none";
|
||
funEnabledBtn("btnLogout", true);
|
||
funEnabledBtn("btnLogin", false);
|
||
} else {
|
||
document.all.btnLogout.style.display = "none";
|
||
document.all.btnLogin.style.display = "block";
|
||
funEnabledBtn("btnLogout", false);
|
||
funEnabledBtn("btnLogin", true);
|
||
}
|
||
__getDNDCallback();
|
||
}
|
||
catch (e) {
|
||
showstatus("系统错误", "err", e);
|
||
}
|
||
}
|
||
|
||
//获取示闲回调
|
||
function __getDNDCallback() {
|
||
try {
|
||
if (11 != Agent.WorkType) {//离开
|
||
document.all.btnDND.value = "示忙";
|
||
document.all.btnDND.style.color = 'black';
|
||
$('#btnDND').unbind("click").bind("click", function () {
|
||
__setDND(1);
|
||
});
|
||
} else {
|
||
document.all.btnDND.value = "示闲";
|
||
document.all.btnDND.style.color = 'red';
|
||
$('#btnDND').unbind("click").bind("click", function () {
|
||
__setDND(-1);
|
||
});
|
||
}
|
||
}
|
||
catch (e) { showstatus("系统错误", "err", e); }
|
||
}
|
||
|
||
function getstatus(s) {
|
||
var rst = "";
|
||
switch (s) {
|
||
case -2:
|
||
rst = "座席不存在";
|
||
break;
|
||
case -1:
|
||
rst = "离线"; break;
|
||
case 0:
|
||
rst = "在线"; break;
|
||
case 1:
|
||
rst = "被闭塞"; break;
|
||
case 2:
|
||
rst = "暂停"; break;
|
||
case 3:
|
||
rst = "离开"; break;
|
||
case 4:
|
||
rst = "空闲"; break;
|
||
case 5:
|
||
rst = "振铃"; break;
|
||
case 6:
|
||
var call = document.all.txtTelNO.value;
|
||
call = confusedTel(call);
|
||
if (call.length > 0)
|
||
rst = "通话中(" + call + ")";
|
||
else
|
||
rst = "通话中";
|
||
break;
|
||
case 7:
|
||
rst = "通话暂停"; break;
|
||
}
|
||
return rst;
|
||
}
|
||
|
||
function retMessages(Param1) {
|
||
var message;
|
||
switch (Param1) {
|
||
case -300:
|
||
message = "其它坐席错误";
|
||
break;
|
||
case -301:
|
||
message = "无效座席";
|
||
break;
|
||
case -302:
|
||
message = "未登记的工作站";
|
||
break;
|
||
case -303:
|
||
message = "座席为无工作站座席";
|
||
break;
|
||
case -304:
|
||
message = "座席未在线";
|
||
break;
|
||
case -305:
|
||
message = "座席未签人";
|
||
break;
|
||
case -306:
|
||
message = "座席未在振铃状态";
|
||
break;
|
||
case -307:
|
||
message = "座席未在工作状态";
|
||
break;
|
||
case -308:
|
||
message = "座席未在空闲状态";
|
||
break;
|
||
case -309:
|
||
message = "座席未就绪";
|
||
break;
|
||
case -310:
|
||
message = "座席不是预期的状态";
|
||
break;
|
||
case -311:
|
||
message = "座席忙";
|
||
break;
|
||
case -312:
|
||
message = "座席工作中";
|
||
break;
|
||
case -313:
|
||
message = "座席未注销";
|
||
break;
|
||
case -314:
|
||
message = "工号检查错误";
|
||
break;
|
||
case -315:
|
||
message = "密码检查错误";
|
||
break;
|
||
case -316:
|
||
message = "工号已登录";
|
||
break;
|
||
case -317:
|
||
message = "登录失败";
|
||
break;
|
||
case -318:
|
||
message = "座席不是软电话模式";
|
||
break;
|
||
case -319:
|
||
message = "座席电话未摘机";
|
||
break;
|
||
case -320:
|
||
message = "物理线路挂机,不能摘机";
|
||
break;
|
||
case -321:
|
||
message = "无该操作的权限";
|
||
break;
|
||
case -322:
|
||
message = "错误的通知类型";
|
||
break;
|
||
case -323:
|
||
message = "动作失败";
|
||
break;
|
||
case -324:
|
||
message = "此项目不能";
|
||
break;
|
||
case -325:
|
||
message = "已经在录音状态";
|
||
break;
|
||
case -326:
|
||
message = "调功能失败";
|
||
break;
|
||
case -327:
|
||
message = "不能对本站操作";
|
||
break;
|
||
case -328:
|
||
message = "待拨号码为空";
|
||
break;
|
||
case -329:
|
||
message = "座席正在处理子项目";
|
||
break;
|
||
case -330:
|
||
message = "无效的参数";
|
||
break;
|
||
case -331:
|
||
message = "座席未在拨号中";
|
||
break;
|
||
case -332:
|
||
message = "无效的电话模式";
|
||
break;
|
||
case -333:
|
||
message = "不允许空闲摘机";
|
||
break;
|
||
case -334:
|
||
message = "未发现登录座席";
|
||
break;
|
||
case -335:
|
||
message = "未发现工作会话";
|
||
break;
|
||
case -336:
|
||
message = "未发现指定会话";
|
||
break;
|
||
case -337:
|
||
message = "远程座席不能切换话机模式";
|
||
break;
|
||
default:
|
||
message = Param1;
|
||
break;
|
||
}
|
||
return message;
|
||
}
|
||
/// <summary>
|
||
/// 根据 FailReason 参数 获取 连接失败 定义
|
||
/// </summary>
|
||
/// <param name="FailReason"></param>
|
||
/// <returns></returns>
|
||
function ConnectFailReasonString(FailReason) {
|
||
var FailReasongString;
|
||
switch (FailReason) {
|
||
case 0:
|
||
FailReasongString = "无法连接到主机";
|
||
break;
|
||
case 1:
|
||
FailReasongString = "已经连接到了主机";
|
||
break;
|
||
case 2:
|
||
FailReasongString = "主机禁止连接";
|
||
break;
|
||
case 3:
|
||
FailReasongString = "主机无资源";
|
||
break;
|
||
case 4:
|
||
FailReasongString = "连接密码错误";
|
||
break;
|
||
case 5:
|
||
FailReasongString = "没有找到对应该计算机名的AgentId";
|
||
break;
|
||
case 6:
|
||
FailReasongString = "该AgentId已经登录";
|
||
break;
|
||
default:
|
||
FailReasongString = "其它未知错误";
|
||
break;
|
||
}
|
||
return FailReasongString;
|
||
}
|
||
var timer2;
|
||
//设置计时器
|
||
function setTimer() {
|
||
if (!blTimer) return;
|
||
var nHour = parseInt(nTimer / 3600);
|
||
var nTmp = nTimer % 3600;
|
||
var nMintue = parseInt(nTmp / 60);
|
||
var nSecond = nTmp % 60;
|
||
var strTimer = funAddZero(nHour) + ":" + funAddZero(nMintue) + ":" + funAddZero(nSecond);
|
||
var objTimer = document.getElementById('lblTimer');
|
||
if (objTimer) objTimer.innerText = strTimer;
|
||
nTimer++;
|
||
timer2 = window.setTimeout("setTimer()", 1000);
|
||
}
|
||
|
||
//设置按钮是否显示
|
||
function funDisplayBtn(vStrBtnID, vBlDisplay) {
|
||
var objBtn = document.getElementById(vStrBtnID);
|
||
if (objBtn) {
|
||
if (vBlDisplay)
|
||
objBtn.style.display = "block";
|
||
else
|
||
objBtn.style.display = "none";
|
||
}
|
||
}
|
||
// 设置按钮状态
|
||
function funEnabledBtn(vStrBtnID, vBlEnabled) {
|
||
var objBtn = document.getElementById(vStrBtnID);
|
||
if (objBtn) objBtn.disabled = !vBlEnabled;
|
||
}
|
||
function showstatus(errmsg, typ, err) {
|
||
document.all.divAction.innerHTML = errmsg;
|
||
if (err)
|
||
console.log(err);
|
||
if (typ == "err")
|
||
document.all.divAction.innerHTML = "<font color='red'>" + errmsg + "</font>";
|
||
}
|
||
function funAddZero(vIntValue) {
|
||
var strRevalue = '0000' + vIntValue;
|
||
return strRevalue.substr(strRevalue.length - 2, strRevalue.length);
|
||
}
|
||
String.prototype.Trim = function () {
|
||
return this.replace(/(^\s*)|(\s*$)/g, "");
|
||
}
|
||
function confusedTel(tel) {
|
||
var telstr = tel;
|
||
if (tel.length >= 4) {
|
||
telstr = tel.substr(tel.length - 4);
|
||
telstr = "****" + telstr;
|
||
if (tel.length < 8)
|
||
telstr = telstr.substr(telstr.length - tel.length);
|
||
if (tel.length > 8)
|
||
telstr = tel.substr(0, tel.length - telstr.length) + telstr;
|
||
}
|
||
|
||
return telstr;
|
||
}
|
||
|
||
$.extend({
|
||
getUrlVars: function (url) {
|
||
var vars = [], hash;
|
||
var hashes = url.slice(url.indexOf('?') + 1).split('&');
|
||
for (var i = 0; i < hashes.length; i++) {
|
||
hash = hashes[i].split('=');
|
||
vars.push(hash[0]);
|
||
vars[hash[0]] = hash[1];
|
||
}
|
||
return vars;
|
||
},
|
||
getUrlVar: function (url, name) {
|
||
return $.getUrlVars(url)[name];
|
||
}
|
||
}); |