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
/**
 * 外呼机器人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);
  }
 
  /**
   * 更新呼叫状态
   * 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);
  }
 
  /**
   * 获取通话录音文件
   * 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;