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 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 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 map, String path) { HttpEntity> req = new HttpEntity<>(getHead(), map); HttpEntity 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 getHead() { HashMap 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; } }