UNPKG

fcc-core

Version:

Fusion communication center.

116 lines (112 loc) 5.31 kB
/** * 音频点呼 */ import { changeEmployeeICPStatus, validateStatus, getUserInfoByAccount, addPhoneCallRecord, addOPTRecord, changeOPTRecord, changePhoneCallRecord, addMonitorRecordSnapShot, formatDate } from '../pointCall' // 呼叫主体 export default async function (xw, params) { await xw.validate(params, { 'userAccount': { type: 'string', required: true }, 'location': { type: 'object' } }) await new Promise(async (resolve, reject) => { // 获取被叫人员的信息 let sendUserInfo = await getUserInfoByAccount({ 'USER_ACCOUNT': params.userAccount }, xw) if (!sendUserInfo || !sendUserInfo.ICP_CODE) { reject(new xw.BaseException(417, '呼叫对象不存在或账号错误')) return false } // 检测状态 let resultState = await validateStatus(xw, sendUserInfo) if (resultState !== 0) { reject(new xw.BaseException(resultState)) return false } let queryParam = { isVideo: '0', callId: sendUserInfo.ICP_CODE, // 对方的icp_code callType: '0', // voip呼叫 userName: sendUserInfo.USER_NAME } if (params.location) { queryParam.locX = params.location.locX || '' queryParam.locY = params.location.locY || '' queryParam.scale = params.location.scale || '1' } // 开始呼叫 xw.exe.emit('PhoneCall', queryParam) xw.SEND_ICP_CODE = sendUserInfo.ICP_CODE let phoneCallWaterCode = '' // 语音流水 let trafficWaterCode = '' // 话务流水 let handleOnCallConnected = data => { handleOnCallConnectedFormat(xw, data, phoneCallWaterCode, trafficWaterCode) } let handleOnUpload = data => { handleOnUploadFormat(xw, data, phoneCallWaterCode) } // 呼叫回调 xw.exe.once('PhoneCall', async data => { // 呼叫成功 if (data.resultCode === 0) { changeEmployeeICPStatus('2', xw) // 广播并且修改agent_state状态 忙碌 } // 无论成功失败,都要新增流水 phoneCallWaterCode = await addPhoneCallRecord({ // 添加语音通话流水 USER_CODE: sendUserInfo.USER_CODE, OPPO_NO: sendUserInfo.ICP_CODE, // 对方的ICP_CODE MEDIA_TYPE: '9', // 5 = voip语音呼叫 CALL_CHNL: '52', // 52 = voip语音呼叫 CALL_TYPE: '3', // 3 = 内部呼叫 CALL_REMARK: '添加语音通话流水' }, xw) trafficWaterCode = await addOPTRecord({ // 新增话务操作流水 USER_CODE: sendUserInfo.USER_CODE, IS_SUCCESS: '0', AGENT_OPT_TYPE: '90', // 90 = 点对点语音呼叫 CALL_OBJ_ID: '2', // 2 = 内部呼叫 员工编号 REMARK: '添加话务流水' }, xw) }) xw.exe.on('OnUpload', handleOnUpload) xw.exe.on('OnCallConnected', handleOnCallConnected) // 挂机 xw.exe.once('OnCallEnd', data => { changeEmployeeICPStatus('1', xw) // 广播并且修改agent_state状态 空闲 xw.exe.off('OnCallConnected', handleOnCallConnected) xw.exe.off('OnUpload', handleOnUpload) setTimeout(() => { phoneCallWaterCode && changePhoneCallRecord(phoneCallWaterCode, { CALL_DURATION: 0, HANGUP_TYPE: data.data.endType, CLAA_REMARK: '修改话务流水记录时长' }, xw) trafficWaterCode && changeOPTRecord(trafficWaterCode, { OPT_DURATION: 0, REMARK: '修改话务流水记录时长' }, xw) phoneCallWaterCode = '' trafficWaterCode = '' }, 2000) }) }) } // 接通处理 let handleOnCallConnectedFormat = (xw, data, phoneCallWaterCode, trafficWaterCode) => { if (data.resultCode === 0) { if (phoneCallWaterCode && trafficWaterCode) { changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', IS_SUCCESS: '1', REMARK: '修改通话流水呼出成功标志' }, xw) // 修改通话流水呼出成功标志 changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, xw) // 修改话务流水成功标志 return } setTimeout(() => { changePhoneCallRecord(phoneCallWaterCode, { CALLOUT_SUC: '1', IS_SUCCESS: '1', REMARK: '修改通话流水呼出成功标志' }, xw) // 修改通话流水呼出成功标志 changeOPTRecord(trafficWaterCode, { IS_SUCCESS: '1', REMARK: '修改话务流水成功标志' }, xw) // 修改话务流水成功标志 }, 2000) } } // 截录屏处理 let handleOnUploadFormat = (xw, data, phoneCallWaterCode) => { if (data.resultCode === 0) { addMonitorRecordSnapShot({ // 新增截屏流水 SNO: phoneCallWaterCode, REC_CUT_OUT_ADD: data.data.path, REC_SNO_TYPE: 3, // 1会议 2监控 3点对点 REC_TYPE: data.data.UPLOAD_TYPE, // 1截屏 2录屏 START_TIME: data.data.UPLOAD_TYPE === 2 ? formatDate(new Date(data.data.start_time * 1000), 'yyyy-MM-dd HH:mm:ss') : formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss'), CUT_OUT_TIME: data.data.UPLOAD_TYPE === 2 ? formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss') : formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss'), END_TIME: data.data.UPLOAD_TYPE === 2 ? formatDate(new Date(data.data.end_time * 1000), 'yyyy-MM-dd HH:mm:ss') : formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss') }, xw) } }