liusheng
2025-04-11 c6461ee45e27ad7f6f1a89d5aab103fbab6e79d3
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
package com.smartor.config;
 
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpEntity;
import com.ruoyi.common.utils.sign.Md5Utils;
import com.smartor.domain.robot.RobotData;
import com.smartor.domain.robot.RobotDataConfig;
import com.smartor.domain.robot.RobotIdlenumVO;
import com.smartor.domain.robot.RobotScritpTemplateVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
 
import javax.mail.Multipart;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
 
@Configuration
public class RobotPhoneUtils {
 
    @Value("${hzphoneIP}")
    private String hzphoneIP;
 
    @Value("${hzphonePort}")
    private String hzphonePort;
 
    @Value("${phoneMySelf}")
    private String phoneMySelf;
 
    @Value("${app_id}")
    private String app_id;
 
    @Value(value = "${app_key}")
    private String app_key;
 
    /**
     * 线路空闲数量接口
     *
     * @param robotIdlenumVO
     * @return
     */
    public String idlenum(RobotIdlenumVO robotIdlenumVO) {
        robotIdlenumVO.setAni(phoneMySelf);
        robotIdlenumVO.setApp_key(app_key);
        robotIdlenumVO.setApp_id(app_id);
 
        //设置sign的值  md5(app_id+app_key+ani+special_ch+time_stamp) specify_ch md5 时 true 用 1 替代,false 用 0 替代
        String signStr = robotIdlenumVO.getSpecify_ch() == true ? robotIdlenumVO.getApp_id() + robotIdlenumVO.getApp_key() + robotIdlenumVO.getAni() + 1 + robotIdlenumVO.getTime_stamp() : robotIdlenumVO.getApp_id() + robotIdlenumVO.getApp_key() + robotIdlenumVO.getAni() + 0 + robotIdlenumVO.getTime_stamp();
        robotIdlenumVO.setSign(Md5Utils.hash(signStr));
 
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> map = null;
        try {
            map = objectMapper.readValue(JSON.toJSONString(robotIdlenumVO), Map.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return sendReq(map, "/aiengine/ai_api/idlenum");
    }
 
 
    /**
     * 外呼发起请求接口
     */
    public String outbound(RobotScritpTemplateVO robotScritpTemplateVO) {
        robotScritpTemplateVO.setAni(phoneMySelf);
        robotScritpTemplateVO.setApp_key(app_key);
        robotScritpTemplateVO.setApp_id(app_id);
        String signStr = robotScritpTemplateVO.getSpecify_ch() == true ? robotScritpTemplateVO.getApp_id() + robotScritpTemplateVO.getApp_key() + robotScritpTemplateVO.getBs_uuid() + robotScritpTemplateVO.getAni() + 1 + robotScritpTemplateVO.getTime_stamp() : robotScritpTemplateVO.getApp_id() + robotScritpTemplateVO.getApp_key() + robotScritpTemplateVO.getBs_uuid() + robotScritpTemplateVO.getAni() + 0 + robotScritpTemplateVO.getTime_stamp();
        robotScritpTemplateVO.setSign(Md5Utils.hash(signStr));
        //下面注释的这个测试用的
//        robotScritpTemplateVO.setNotes("aa");
//        robotScritpTemplateVO.setApp_id("hz_ali");
//        robotScritpTemplateVO.setApp_key("a2f3b5799d635216aa280362fafd8c35");
//        robotScritpTemplateVO.setBs_uuid(UUID.randomUUID().toString());
//        robotScritpTemplateVO.setAni("83234089");
//        robotScritpTemplateVO.setDnis("1010");
//        robotScritpTemplateVO.setSpecify_ch(false);
//        robotScritpTemplateVO.setTime_stamp(1566227782278333L);
//        robotScritpTemplateVO.setSign(null);
//        robotScritpTemplateVO.setEngine("ali");
//        robotScritpTemplateVO.setAsr_sample("8000");
//        robotScritpTemplateVO.setAsr_ent("ZurNHpaQLq6P55YS");
//        robotScritpTemplateVO.setTts_ent("ZurNHpaQLq6P55YS");
//        robotScritpTemplateVO.setTts_vcn("Aixia");
//        robotScritpTemplateVO.setTts_volume(100);
//        robotScritpTemplateVO.setTts_speed(-300);
//        robotScritpTemplateVO.setDial_mode("呼叫对接方式,FS注册到网关、网关注册到FS、IP对接、IP校验账号对接");
//        robotScritpTemplateVO.setDial_server("call_out_group,192.168.2.108:5060");
//        robotScritpTemplateVO.setOutbound_codes("PCMU,PCMA,OPUS,G722");
//        robotScritpTemplateVO.setAuto_test(true);
//        RobotData robotData = new RobotData();
//        RobotDataConfig robotDataConfig = new RobotDataConfig();
//        robotDataConfig.setTemplate_name("inbound_88008001_16k_utf8.json");
//        robotData.setConfig(robotDataConfig);
//        robotScritpTemplateVO.setData(robotData);
//        md5(app_id+app_key+bs_uuid+ani+dnis+specify_ch+time_stamp)  specify_ch md5 时 true 用 1 替代,false 用 0 替代;
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> map = null;
        try {
            map = objectMapper.readValue(JSON.toJSONString(robotScritpTemplateVO), Map.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
 
        return sendReq(map, "/aiengine/ai_api/outbound");
    }
 
 
    private String sendReq(Map<String, Object> map, String path) {
        HttpEntity<Map<String, Object>> req = new HttpEntity<>(getHead(), map);
        HttpEntity<String> stringHttpEntity = HttpUtil.postJsonRequestV2(hzphoneIP + ":" + hzphonePort + path, req, String.class);
        String responseBody = null;
        try {
            responseBody = new String(stringHttpEntity.getBody().getBytes("ISO-8859-1"), "UTF-8");
            System.out.println("电话信息返回 : " + responseBody);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return new String(stringHttpEntity.getBody().getBytes(StandardCharsets.UTF_8));
    }
 
    private Map<String, String> getHead() {
        HashMap<String, String> header = new HashMap<>();
        header.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
        header.put("Content-Type", "application/json");
        return header;
    }
}