fcc-core
Version:
Fusion communication center.
381 lines (379 loc) • 10.4 kB
JavaScript
import uccApi from '../api/uccApi'
import agentApi from '../api/agentApi'
const FORWORDKEYS = {
FORWARD_SNO: 0,
ACCS_SNO: 0,
FORWARD_DATE: 0,
FORWARD_TIME: 0,
FORWARD_USER: 0,
CURTIME: 0
}
export default {
/**
* 写话务操作流水
* @param params
* @returns {*}
*/
addLog (params) {
const defaultParams = {
USER_CODE: this.userInfo.USER_CODE,
CALL_OBJ_ID: '',
OPT_DURATION: 0,
IS_SUCCESS: 1
}
params = this.extend(defaultParams, params)
const self = this
return uccApi
.addCallLog(params)
.then(data => {
if (params.eventname && self.eventData[params.eventname]) {
self.eventData[params.eventname].lsh = data.data[0].ID
}
})
},
/**
* 更新话务操作流水
* @param sno
* @param time
*/
updateLog (events) {
if (!events) {
return
}
if (Array.isArray(events)) {
const promise = events.map(event => {
return this.updateLog(event)
})
return Promise.all(promise)
}
if (!this.eventData[events]) {
return
}
const sno = this.eventData[events].lsh
if (!sno) {
return
}
const time = this.getTime(events)
// 更新话务操作流水之后清空对应事件对象
this.eventData[events] = null
return uccApi.updateCallLog({
OPT_SNO: sno,
OPT_DURATION: time
})
},
/**
* 新增通话流水
* @param eventname
* @returns {*}
*/
async addAgentCallRecord (eventname) {
if (!eventname) {
return
}
// 外呼成功 再保持外呼 此时需要写一通流水
if (this.callSno && this.transType !== '16') {
return
}
let params = this.eventData[eventname].params
console.log('addAgentCallRecord1', params)
const CALL_TYPE = this.getCallType(params['callType'] || this.transType)
console.log('addAgentCallRecord2', CALL_TYPE)
// 咨询方咨询成功后 收到转移来电此时需要更新通话类型
if (['3', '6'].indexOf(params.transType) > -1) {
this.updAgentCallRecord({
CALL_TYPE
})
}
// 外呼的操作类型则取被叫号码
const OPPO_NO = this.transType * 1 > 14 ? params.called : params.caller
const defaults = {
USER_CODE: this.userInfo.USER_CODE,
CALL_DURATION: 0,
EXTD_FLAG: 0,
MEDIA_TYPE: '5',
CALL_CHNL: '51',
CALLOUT_SUC: 1,
OPPO_NO,
CALL_ID: params.callid,
CALL_TYPE
}
// 判断是外呼失败事件时,需要修改呼叫成功标识
if (eventname === 'OnCallOutFailure') {
defaults.CALLOUT_SUC = 0
defaults.OPPO_NO = this.callOutData.callOutNum
defaults.CALL_ID = this.callOutData.callid
}
params.OPPO_NO = params.caller
params = this.extend(params, defaults)
uccApi.addAgentCallRecord(params).then(res => {
const ID = res.data[0].ID
this.transType !== '16' ? this.callSno = ID : this.callOutData.calloutSno = ID
})
// this.transType !== '16' ? this.callSno = ID : this.callOutData.calloutSno = ID
},
/**
* 更新通话流水
* @param eventname
* @param defaults
*/
updAgentCallRecord (eventname, params) {
if (!this.getEventData(eventname)) {
return
}
if (!this.callSno && !params.CALL_SNO) {
return
}
const time = this.getTime('OnAnswerSuccess')
this.callTime = this.callTime ? this.callTime + time : time
const data = this.extend({
CALL_SNO: this.callSno, // 通话流水号
HANGUP_TYPE: this.getHangup(), // 挂机类型
CALL_DURATION: this.callTime, // 通话时长
VOICE_FILE: this.fileName
}, params)
return uccApi.updAgentCallRecord(data)
},
/**
* 新增转接流水
* @param params
* @constructor
*/
async addCallForward (params) {
const CALL_ID = this.getEventData('OnAnswerSuccess', 'callid')
const defaultParams = {
IS_SUCCESS: 0,
CREATE_USER: this.userInfo.USER_CODE,
AGENT_ID: this.userInfo.AGENT_ID,
CALL_ID
}
const [{ ID }] = await uccApi.AddCallForwardLogByAgent(this.extend(defaultParams, params))
if (params.isRecordSno) {
this.forwardSno = ID
}
},
/**
* 修改转接流水
* @param params
*/
updateCallForward (params) {
const { FORWARD_SNO } = this.getEventData('OnAnswerSuccess')
if (!FORWARD_SNO && !params.FORWARD_SNO) {
return
}
const defaultParams = {
IS_SUCCESS: 1,
FORWARD_USER: this.userInfo.AGENT_ID,
FORWARD_SNO
}
return uccApi.updateCallForward(this.extend(defaultParams, params))
},
/**
* 获取示忙原因并缓存
*/
getBusyCode: (function () {
let cache = null
return function () {
return new Promise(function (resolve, reject) {
if (cache) {
resolve(cache)
} else {
uccApi
.getBusyCode()
.then(function (data) {
cache = data
resolve(data)
})
.catch(function (e) {
reject(e)
})
}
})
}
})(),
/**
* 座席登录后,批量查询指定座席的信息,不包括技能信息。
* 0未知。对应CTI平台状态的9。
* 1登录状态。未使用。
* 2签出状态。对应CTI平台状态的0。
* 3示忙状态。对应CTI平台状态的7。
* 4空闲状态。对应CTI平台状态的1。
* 5工作态。对应CTI平台状态的6。
* 6同空闲态。未使用。
* 7通话态。对应CTI平台状态的2、3、4、5。
* 8休息状态。对应CTI平台状态的8。
* @returns {Promise<*>}
*/
async getAgentsInfo (params) {
if (this.agentState === 2) {
// this.components.$callbar.$message({
// type: 'warning',
// message: window.app.$t('请先签入')
// })
return []
}
let agentData = await uccApi.getAgentInfo(params)
if (!agentData.length) {
return []
}
agentData = agentData.filter((item) => {
return item.AGENT_ID !== ''
})
const data = {}
const agentList = agentData.map(function (agent) {
if (agent.AGENT_ID) {
data[agent.AGENT_ID] = agent
return parseInt(agent.AGENT_ID)
}
})
const agentStateData = await this.getAgentInfoNoSkills(agentList)
const stateList = {}
if (agentStateData.length) {
for (let i = 0; i < agentStateData.length; i++) {
const { result } = agentStateData[i]
for (let k = 0; k < result.length; k++) {
stateList[result[k].workno] = result[k]['status']
data[result[k].workno] = this.extend(data[result[k].workno], result[k])
}
}
}
// cti状态 转agentGateway转态
const status = {
'0': '2',
'1': '4',
'2': '7',
'3': '7',
'4': '7',
'5': '7',
'6': '5',
'7': '3',
'8': '8',
'9': '0'
}
const statename = {
'2': '签出',
'3': '示忙',
'4': '空闲',
'6': '空闲',
'7': '通话',
'5': '整理',
'8': '休息'
}
const showData = []
for (let key in data) {
const state = status[stateList[key]]
data[key].status = state
data[key].stateName = statename[state]
showData.push(data[key])
}
return showData
},
/**
* 查询坐席历史静态指标
* @param params
* @returns {*|type[]}
*/
queryAgentIndicators (params) {
if (!params.USER_CODES) {
return
}
return uccApi.queryAgentIndicators(params)
},
/**
/**
*查询随路数据并组装
* @param event
* @returns {Promise<any>}
*/
async getCallData (event, params) {
if (this.isCallingEvents(event)) {
let calldata = await this.queryCallData()
if (!calldata) {
return Object.create(null)
}
const type = calldata.transType
// 咨询队列 或者 咨询坐席 不需要查询转接流水 咨询过程中
// 咨询方挂机不包含在此场景
if (type && (type === '2' || type === '5') && !this.consoultFirst) {
return this.extend(calldata, FORWORDKEYS)
}
if (params['callid']) {
let [forwardData] = await uccApi.queryTCallForwardLogByCallId({
CALL_ID: params['callid']
})
calldata = Object.assign(calldata, FORWORDKEYS, forwardData)
}
return calldata
}
return Object.create(null)
},
/**
*查询随路数据
* @returns {Promise<void>}
*/
async queryCallData () {
// 外呼不需要查询随路数据
if (['15', '16'].indexOf(this.transType) > -1) {
return null
}
let { result } = await agentApi.queryCallData()
if (!result || !result.calldata) {
return
}
let calldata = result.calldata
if (calldata.indexOf('{') > -1) {
calldata = JSON.parse(calldata)
} else {
calldata = this.parseCallData(calldata)
}
return calldata
},
/**
* 抹平新老随路数据处理的差异
* @param params
*/
parseCallData: function (params) {
let bool = false
let fn = null
if (bool) {
fn = this.parseUrl
} else {
fn = this.ParseCalldataStr
}
this.parseCallData = fn
return fn.call(this, params)
},
/**
* 校验是否处于呼叫的事件
*/
isCallingEvents (event) {
return (
event === 'AgentEvent_Talking' ||
event === 'AgentEvent_Ringing' ||
event === 'AgentEvent_No_Answer' ||
event === 'AgentOther_PhoneAlerting'
)
},
/**
* 修改单个按钮的状态
* @param params
*/
changeButtonStaus (btn) {
if (!btn) {
return
}
let oldConf = this.btnctrl.initConfig[btn]
let params = {
txt: oldConf.txt + '中',
click: function () {},
cls1: 'disabled'
}
this.btnconftemp = Object.create(oldConf)
this.extend(oldConf, params)
},
/**
* 恢复按钮状态
*/
recoverBtnStatus (btn) {
this.btnctrl.initConfig[btn] = this.btnconftemp
}
}