UNPKG

fcc-core

Version:

Fusion communication center.

123 lines (117 loc) 4.77 kB
import { changeEmployeeStatus } from '../../../utils/nats/natsApi' import { addPhoneCallRecord, addOPTRecord, changeOPTRecord, changePhoneCallRecord } from '../../pointToPointCall/pointCall' let phoneNumber let XW let CALLOUT_WAY let exeSocket let userBaseInfo let phoneCallWaterCode = '' let trafficWaterCode = '' let duration = 0 let beginDate = 0 export default async function (xw, params) { console.log('xw.sysLoginStatus', xw.sysLoginStatus) XW = xw CALLOUT_WAY = xw.getSysParam('CALLOUT_WAY') exeSocket = xw.exe userBaseInfo = xw.userInfo await xw.validate(params, { 'phoneNum': { type: 'string', required: true } }) exeSocket.emit('WriteBrowserLog', { logStr: `主动外呼,外呼方式${CALLOUT_WAY}` }) console.log('CALLOUT_WAY: ', CALLOUT_WAY) return new Promise(async (resolve, reject) => { phoneNumber = await getNum(params.phoneNum) callOut(phoneNumber, xw, resolve, reject) }) } function getNum (phone) { return XW.ajaxRequest([{ service: 'E2501411', CON_NO: phone }]).then(res => { if (res.code === '0') { return res.data[0].CON_NO } }) } function callOut (phoneNumber, xw, resolve, reject) { if (xw.sysLoginStatus.fsPhone) { // fs agentgatway console.log('使用fs外呼') xw.ucc.callOut({ callappdata: 'test', called: phoneNumber, caller: XW.userInfo.AGENT_ID }).then(res => { resolve(`呼叫电话${phoneNumber}`) }) } else if (xw.sysLoginStatus.exePhone) { console.log('使用vc外呼') ExeCallOut(phoneNumber, resolve, reject) } else { reject('电话功能异常') } } function ExeCallOut (phone, resolve, reject) { exeSocket.emit('PhoneCall', { isVideo: '0', userName: phone, callId: phone, // 对方的电话 callType: '2' // 电话呼叫 }) exeSocket.once('PhoneCall', async data => { exeSocket.emit('WriteBrowserLog', { logStr: `电话外呼触发事件PhoneCall` }) if (data.resultCode === 0) { resolve(`呼叫电话${phone}`) changeEmployeeStatus('2', XW) // 广播并且修改agent_state状态 忙碌 } // 无论成功失败,都要新增流水 phoneCallWaterCode = await addPhoneCallRecord({ // 添加电话通话流水 USER_CODE: userBaseInfo.USER_CODE, OPPO_NO: phone, // 对方的ICP_CODE MEDIA_TYPE: '5', // 5 = 电话呼叫 CALL_CHNL: '51', // 51 = 电话呼叫 CALL_TYPE: '1' // 1 = 普通呼叫 }, XW) trafficWaterCode = await addOPTRecord({ // 新增话务操作流水 USER_CODE: userBaseInfo.USER_CODE, AGENT_OPT_TYPE: '92', // 90 = 点对点电话呼叫 CALL_OBJ_ID: '3', // 2 = 内部呼叫 员工编号 IS_SUCCESS: '0' }, XW) }) // 接通事件 exeSocket.on('OnCallConnected', handleOnCallConnected, this) // 挂机事件 exeSocket.once('OnCallEnd', data => { exeSocket.emit('WriteBrowserLog', { logStr: `电话点呼触发事件OnCallEnd` }) changeEmployeeStatus('1', XW) // 广播并且修改agentState状态 空闲 exeSocket.off('OnCallConnected', handleOnCallConnected) duration = getDuration(beginDate) setTimeout(async () => { trafficWaterCode && await changeOPTRecord(trafficWaterCode, { OPT_DURATION: duration, REMARK: '电话外呼结束,修改话务流水记录时长' }, XW) phoneCallWaterCode && await changePhoneCallRecord(phoneCallWaterCode, { CALL_DURATION: duration, HANGUP_TYPE: data.endType, CALL_REMARK: '电话点呼结束,修改通话流水记录时长' }, XW) trafficWaterCode = '' phoneCallWaterCode = '' }, 3000) }) } function handleOnCallConnected (data) { if (data.resultCode === 0) { beginDate = (new Date()).getTime() if (phoneCallWaterCode && trafficWaterCode) { phoneCallWaterCode && changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', REMARK: '修改通话流水呼出成功标志' }, XW) // 修改通话流水呼出成功标志 trafficWaterCode && changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, XW) // 修改话务流水成功标志 return } setTimeout(() => { phoneCallWaterCode && changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', REMARK: '修改通话流水呼出成功标志' }, XW) // 修改通话流水呼出成功标志 trafficWaterCode && changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, XW) // 修改话务流水成功标志 }, 2000) } } // 获取时间差 function getDuration (beginDate) { let endDate = (new Date()).getTime() return Math.ceil((endDate - beginDate) / 1000) }