shimai
yesterday 6f45735adfdcd973a19f638f9ced9629f79cd6de
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/**
 * 外呼机器人API Service
 * 处理外呼任务相关接口
 * 接口前缀: /api/v1/outbound-bot/*
 */
 
import { request } from './request';
 
class OutboundBotAPIService {
 
 
  /**
   * 智能外呼拨打电话
   * 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 makeCallV2(data = {}) {
    return request.post('/api/v1/outbound-bot/call-v2', data);
  }
 
  /**
   * 获取通话录音接口
   * GET /api/v1/outbound-bot/conversation-log
   * @param {Object} params - 查询参数
   * @param {string} params.caseId - 案件ID
   * @param {string} params.personId - 当事人ID
   * @param {string} params.jobId - 工作ID
   * @returns {Promise} 通话记录
   */
  static getConversationLog(params = {}) {
    return request.get('/api/v1/outbound-bot/conversation-log', params);
  }
 
  /**
   * 通话状态查询
   * GET /api/v1/outbound-bot/status
   * @param {Object} params - 查询参数
   * @param {string} params.caseRef - 案件ID
   * @param {string} params.phoneNumber - 电话号码
   * @param {string} params.jobId - 工作ID
   * @returns {Promise} 通话状态
   */
  static getCallStatus(params = {}) {
    return request.get('/api/v1/outbound-bot/status', params);
  }
 
  /**
   * 触发外呼任务(后端驱动,MQ异步处理)
   * POST /api/v1/outbound-bot/trigger
   * @param {Object} data - 请求数据
   * @param {string} data.mediationId - 调解反馈表ID
   * @param {string} data.caseId - 案件ID
   * @param {number} data.callAuto - 呼叫模式 (0:自动, 1:手动)
   * @param {string} data.callPersonId - 手动模式指定当事人ID
   * @returns {Promise} 触发结果
   */
  static triggerOutbound(data = {}) {
    return request.post('/api/v1/outbound-bot/trigger', data);
  }
 
  /**
   * 获取当前节点活跃外呼记录(后端驱动模式下补充 localStorage)
   * GET /api/v1/outbound-bot/active-records
   * @param {Object} params
   * @param {string} params.mediationId - 调解反馈表ID
   * @returns {Promise} 活跃外呼记录列表
   */
  static getActiveRecords(params = {}) {
    return request.get('/api/v1/outbound-bot/active-records', params);
  }
 
  /**
   * 更新呼叫状态
   * [已废弃] 状态更新现由后端回调驱动,前端不再调用
   * POST /api/v1/outbound-bot/update-status
   * @param {Object} data - 请求数据
   * @param {string} data.jobId - 工作ID
   * @param {string} data.callStatus - 外呼状态
   * @returns {Promise} 状态更新结果
   */
  static updateCallStatus(data) {
    return request.post('/api/v1/outbound-bot/update-status', data);
  }
 
  static syncStatusByCase(data) {
    return request.post('/api/v1/outbound-bot/sync-status-by-case', data);
  }
 
  static backfillConversationByCase(data) {
    return request.post('/api/v1/outbound-bot/backfill-conversation-by-case', data);
  }
 
  /**
   * 查询AI处理状态(摘要生成/情绪识别是否进行中)
   * GET /api/v1/outbound-bot/ai-processing-status
   * @param {Object} params
   * @param {string} params.mediation_id - 调解反馈表ID
   * @returns {Promise} AI处理状态列表
   */
  static getAiProcessingStatus(params = {}) {
    return request.get('/api/v1/outbound-bot/ai-processing-status', params);
  }
 
  /**
   * 获取通话录音文件
   * GET /api/v1/outbound-bot/file-play
   * @param {string} recordUrl - 录音文件相对路径
   * @returns {Promise} 音频文件Blob
   */
  static async getAudioFile(recordUrl) {
    try {
      const response = await request.get('/api/v1/outbound-bot/file-play', {
        recordUrl
      }, {
        responseType: 'blob',
        headers: {
          'Content-Type': 'audio/wav',
          'Content-Disposition': 'inline'
        }
      });
      
      // axios返回的是response对象,blob在response.data中
      return response.data;
    } catch (error) {
      console.error('获取录音文件失败:', error);
      throw error;
    }
  }
}
 
export default OutboundBotAPIService;