tony.cheng
2026-02-11 6f344a5292739e21d0c8f06c346be44c31c38552
web-app/src/services/OutboundBotAPIService.js
@@ -7,187 +7,46 @@
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} 外呼任务创建结果
   * 智能外呼拨打电话
   * POST /api/v1/outbound-bot/call-v2
   * @param {Object} data - 请求数据
   * @param {string} data.caseRef - 案件引用ID
   * @param {string} data.phoneNumber - 电话号码
   * @param {string} data.scriptId - 脚本ID
   * @param {Object} data.variables - 变量参数
   * @returns {Promise} 外呼结果
   */
  static createCallTask(data = {}) {
    return request.post('/api/v1/outbound-bot/call', data);
  static makeCallV2(data = {}) {
    return request.post('/api/v1/outbound-bot/call-v2', 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
   * 获取通话录音接口
   * GET /api/v1/outbound-bot/conversation-log
   * @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} 任务列表
   * @param {string} params.caseRef - 案件引用ID
   * @param {string} params.phoneNumber - 电话号码
   * @param {string} params.jobId - 工作ID
   * @returns {Promise} 通话记录
   */
  static getCallTasks(params = {}) {
    return request.get('/api/v1/outbound-bot/tasks', params);
  static getConversationLog(params = {}) {
    return request.get('/api/v1/outbound-bot/conversation-log', 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
   * 通话状态查询
   * GET /api/v1/outbound-bot/status
   * @param {Object} params - 查询参数
   * @returns {Promise} 外呼历史记录
   * @param {string} params.caseRef - 案件ID
   * @param {string} params.phoneNumber - 电话号码
   * @param {string} params.jobId - 工作ID
   * @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');
  static getCallStatus(params = {}) {
    return request.get('/api/v1/outbound-bot/status', params);
  }
}