package com.smartor.config; import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.http.HttpEntity; import org.springframework.beans.factory.annotation.Value; 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; @Component public class PhoneUtils { @Value("${phoneIP}") private String phoneIP; @Value("${phonePort}") private String phonePort; /** * 添加分机add_user */ public String addUser(String user, String pwd) { Map map = new HashMap<>(); map.put("user", user); map.put("password", pwd); return sendReq(map, "/tel/ai_api/add_user"); } /** * 删除分机delete_user * * @return */ public String delUser(String user) { Map map = new HashMap<>(); map.put("user", user); return sendReq(map, "/tel/ai_api/delete_user"); } /** * 3、检查分机是否存在check_user * * @return */ public String checkUser(String user) { Map map = new HashMap<>(); map.put("user", user); return sendReq(map, "/tel/ai_api/check_user"); } /** * 列出全部坐席或者指定坐席 list_agent * * @param name * @return */ public String listAgent(String name) { Map map = new HashMap<>(); map.put("name", name); return sendReq(map, "/tel/ai_api/list_agent"); } /** * 添加坐席add_agent * 向系统中添加一个坐席,后续需要set_agent_state,set_agent_status,set_agent_contact, tier_add 设置坐席状体,sip_uri和把坐席加入/绑定一个呼叫队列 * * @param name * @return */ public String addAgent(String name, String type) { Map map = new HashMap<>(); map.put("name", name); if (StringUtils.isEmpty(type)) map.put("type", "callback"); return sendReq(map, "/tel/ai_api/add_agent"); } /** * 删除坐席del_agent * 从呼叫队列删除坐席 * * @param name * @return */ public String delAgent(String name) { Map map = new HashMap<>(); map.put("name", name); return sendReq(map, "/tel/ai_api/del_agent"); } /** * 获取坐席当前所在通话的uuid * * @param name * @return */ public String getAgentUUID(String name) { Map map = new HashMap<>(); map.put("name", name); return sendReq(map, "/tel/ai_api/get_agent_uuid"); } /** * 添加坐席后(add_agent),需要设置坐席地址(sip uri),坐席才可以被访问到 * * @param name * @param contact * @return */ public String setAgentUUID(String name, String contact) { Map map = new HashMap<>(); map.put("name", name); map.put("contact", contact); return sendReq(map, "/tel/ai_api/set_agent_contact"); } /** * 设置坐席的status,有固定几个状态 * * @param name * @param status * @return */ public String setAgentStatus(String name, String status) { Map map = new HashMap<>(); map.put("name", name); map.put("status", status); return sendReq(map, "/tel/ai_api/set_agent_status"); } /** * 获取坐席状态 * * @param name * @return */ public String getAgentStatus(String name) { Map map = new HashMap<>(); map.put("name", name); return sendReq(map, "/tel/ai_api/get_agent_status"); } /** * 设设置坐席 * * @param name * @param state * @return */ public String setAgentState(String name, String state) { Map map = new HashMap<>(); map.put("name", name); map.put("state", state); return sendReq(map, "/tel/ai_api/set_agent_state"); } /** * 获取坐席状态 * * @param name * @return */ public String getAgentState(String name) { Map map = new HashMap<>(); map.put("name", name); return sendReq(map, "/tel/ai_api/get_agent_state"); } /** * 手动外呼 * * @return */ public String manualOutbound(String kg_uuid, String kg_file, String data, String app_id, String ani, String special_ch, String sign, String extension, String dnis, Boolean force_call) { Map map = new HashMap<>(); map.put("kg_uuid", kg_uuid); map.put("kg_file", kg_file); map.put("data", data); map.put("app_id", app_id); map.put("ani", ani); map.put("special_ch", special_ch); map.put("sign", sign); map.put("extension", extension); map.put("dnis", dnis); map.put("force_call", force_call); if (force_call == null) map.put("force_call", true); return sendReq(map, "/tel/ai_api/manual_outbound"); } /** * tts合成和播放 * * @param fileText * @param uuid * @return */ public String ttsPlayback(String fileText, String uuid) { System.out.println("=====================问题内容:" + fileText + "UUID ; " + uuid); Map map = new HashMap<>(); map.put("text", fileText); map.put("uuid", uuid); return sendReq(map, "/tel/ai_api/tts_playback"); } /** * wav文件播放接口 * * @param wav_file * @param uuid * @return */ public String manualOutbound(Multipart wav_file, String uuid) { Map map = new HashMap<>(); map.put("wav_file", wav_file); map.put("uuid", uuid); return sendReq(map, "/tel/ai_api/playback"); } /** * 机器人外呼 ob * * @return */ public String ob(String kg_uuid, String kg_file, String data, String app_id, String ani, String special_ch, String sign, String dnis, String call_uuid, Boolean force_call) { Map map = new HashMap<>(); map.put("kg_uuid", kg_uuid); map.put("kg_file", kg_file); map.put("data", data); map.put("app_id", app_id); map.put("ani", ani); map.put("special_ch", special_ch); map.put("sign", sign); map.put("dnis", dnis); map.put("call_uuid", call_uuid); map.put("force_call", force_call); map.put("fs_node_id", 8021); if (force_call == null) map.put("force_call", true); return sendReq(map, "/tel/ai_api/outbound"); } /** * 挂断通话 * * @return */ public String hangup(String kg_uuid, String dnis, String data, String app_id, String ani, String special_ch, String sign, String call_uuid) { Map map = new HashMap<>(); map.put("kg_uuid", kg_uuid); map.put("kg_file", kg_uuid); map.put("dnis", dnis); map.put("data", data); map.put("app_id", app_id); map.put("ani", ani); map.put("special_ch", special_ch); map.put("sign", sign); map.put("call_uuid", call_uuid); map.put("fs_node_id", ""); // map.put("app_id", app_id); // map.put("kg_uuid", kg_uuid); // map.put("ani", ani); // map.put("dnis", dnis); // map.put("call_direction", call_direction_str); // map.put("hangup_cause", hangup_cause); // map.put("endpoint_disposition", endpoint_disposition); // map.put("wait_msec", wait_msec); // map.put("duration_msec", duration_msec); // map.put("answer_msec", answer_msec); // map.put("bill_msec", bill_msec); // map.put("start_stamp", start_stamp); // map.put("answered_stamp", answered_stamp); // map.put("end_stamp", end_stamp); // map.put("vad_total_talk_time_msec", vad_total_talk_time_msec); // map.put("time_stamp", time_stamp); return sendReq(map, "/tel/ai_api/hangup"); } private String sendReq(Map map, String path) { HttpEntity> req = new HttpEntity<>(getHead(), map); if (StringUtils.isEmpty(phoneIP)) { phoneIP = "http://124.220.50.51"; phonePort = "8001"; } HttpEntity stringHttpEntity = HttpUtil.postJsonRequestV2(phoneIP + ":" + phonePort + 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; } }