UNPKG

fcc-core

Version:

Fusion communication center.

381 lines (379 loc) 10.4 kB
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 } }