/** * 外呼机器人API Service * 处理外呼任务相关接口 * 接口前缀: /api/v1/outbound-bot/* */ import { request } from './request'; class OutboundBotAPIService { /** * 创建外呼任务 * POST /api/v1/outbound-bot/call * @param {Object} data - 外呼任务数据 * @param {string} data.caseRef - 案件编号 * @param {string} data.personId - 申请方或被申请方id * @param {string} data.mediationStage - 外呼话术阶段(10~14) * @param {string} data.phoneNumber - 当事人电话号码 * @param {string} data.type - 外呼类型(intent_survey/fact_finding/material_verify/agreement/follow_up) * @param {string} data.partyType - 当事人类型(applicant/respondent) * @param {boolean} data.forceUseInput - 是否强制使用输入号码 * @returns {Promise} 外呼任务创建结果 */ static createCallTask(data = {}) { return request.post('/api/v1/outbound-bot/call', data); } /** * 获取外呼任务详情 * GET /api/v1/outbound-bot/task/{taskId} * @param {string} taskId - 任务ID * @returns {Promise} 任务详情 */ static getCallTaskDetail(taskId) { return request.get(`/api/v1/outbound-bot/task/${taskId}`); } /** * 获取外呼任务列表 * GET /api/v1/outbound-bot/tasks * @param {Object} params - 查询参数 * @param {string} params.caseRef - 案件编号 * @param {string} params.status - 任务状态 * @param {string} params.type - 外呼类型 * @param {number} params.page - 页码 * @param {number} params.size - 每页数量 * @returns {Promise} 任务列表 */ static getCallTasks(params = {}) { return request.get('/api/v1/outbound-bot/tasks', params); } /** * 取消外呼任务 * POST /api/v1/outbound-bot/task/{taskId}/cancel * @param {string} taskId - 任务ID * @param {string} reason - 取消原因 * @returns {Promise} 取消结果 */ static cancelCallTask(taskId, reason) { return request.post(`/api/v1/outbound-bot/task/${taskId}/cancel`, { reason }); } /** * 重试外呼任务 * POST /api/v1/outbound-bot/task/{taskId}/retry * @param {string} taskId - 任务ID * @returns {Promise} 重试结果 */ static retryCallTask(taskId) { return request.post(`/api/v1/outbound-bot/task/${taskId}/retry`); } /** * 获取外呼统计信息 * GET /api/v1/outbound-bot/statistics * @param {Object} params - 统计参数 * @param {string} params.caseRef - 案件编号 * @param {string} params.startTime - 开始时间 * @param {string} params.endTime - 结束时间 * @returns {Promise} 统计信息 */ static getCallStatistics(params = {}) { return request.get('/api/v1/outbound-bot/statistics', params); } /** * 获取外呼话术模板 * GET /api/v1/outbound-bot/scripts * @param {string} type - 外呼类型 * @param {string} stage - 调解阶段 * @returns {Promise} 话术模板列表 */ static getCallScripts(type, stage) { return request.get('/api/v1/outbound-bot/scripts', { type, stage }); } /** * 获取外呼任务执行日志 * GET /api/v1/outbound-bot/task/{taskId}/logs * @param {string} taskId - 任务ID * @param {number} page - 页码 * @param {number} size - 每页数量 * @returns {Promise} 执行日志 */ static getCallTaskLogs(taskId, page = 1, size = 20) { return request.get(`/api/v1/outbound-bot/task/${taskId}/logs`, { page, size }); } /** * 批量创建外呼任务 * POST /api/v1/outbound-bot/batch-call * @param {Array} tasks - 任务数组 * @returns {Promise} 批量创建结果 */ static createBatchCallTasks(tasks = []) { return request.post('/api/v1/outbound-bot/batch-call', { tasks }); } /** * 根据案件信息智能创建外呼任务 * @param {Object} caseInfo - 案件信息 * @param {string} caseInfo.caseRef - 案件编号 * @param {string} caseInfo.mediationStage - 调解阶段 * @param {Array} caseInfo.parties - 当事人信息数组 * @param {Object} options - 创建选项 * @returns {Promise} 创建结果 */ static async createSmartCallTasks(caseInfo, options = {}) { const { callType = 'material_verify', // 默认外呼类型 forceUseInput = false // 是否强制使用输入号码 } = options; const tasks = []; // 为每个当事人创建外呼任务 caseInfo.parties.forEach(party => { // 验证必要字段 if (!party.personId || !party.phoneNumber) { console.warn(`当事人信息不完整:`, party); return; } tasks.push({ caseRef: caseInfo.caseRef, personId: party.personId, mediationStage: caseInfo.mediationStage, phoneNumber: party.phoneNumber, type: callType, partyType: party.type || 'applicant', // 默认为申请人 forceUseInput: forceUseInput }); }); if (tasks.length === 0) { return Promise.reject(new Error('没有有效的当事人信息用于创建外呼任务')); } return this.createBatchCallTasks(tasks); } /** * 获取当事人外呼历史 * GET /api/v1/outbound-bot/person/{personId}/history * @param {string} personId - 当事人ID * @param {Object} params - 查询参数 * @returns {Promise} 外呼历史记录 */ static getPersonCallHistory(personId, params = {}) { return request.get(`/api/v1/outbound-bot/person/${personId}/history`, params); } /** * 更新外呼任务 * PUT /api/v1/outbound-bot/task/{taskId} * @param {string} taskId - 任务ID * @param {Object} data - 更新数据 * @returns {Promise} 更新结果 */ static updateCallTask(taskId, data = {}) { return request.put(`/api/v1/outbound-bot/task/${taskId}`, data); } /** * 获取外呼配置 * GET /api/v1/outbound-bot/config * @returns {Promise} 外呼配置信息 */ static getCallConfig() { return request.get('/api/v1/outbound-bot/config'); } } export default OutboundBotAPIService;