yzx 2 дней назад
Родитель
Сommit
ef707fb162

+ 17 - 0
pom.xml

@@ -222,6 +222,23 @@
             <version>8.16</version>
         </dependency>
 
+
+<!--        &lt;!&ndash; FreeSWITCH Java ESL 核心依赖 &ndash;&gt;-->
+<!--        <dependency>-->
+<!--            <groupId>org.freeswitch.esl.client</groupId>-->
+<!--            <artifactId>org.freeswitch.esl.client</artifactId>-->
+<!--            <version>0.9.2</version>-->
+<!--        </dependency>-->
+
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.31</version>
+        </dependency>
+
+
+
     </dependencies>
 
     <build>

+ 24 - 0
src/main/java/com/telerobot/fs/global/CdrPush.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.telerobot.fs.config.SystemConfig;
 import com.telerobot.fs.entity.po.CdrDetail;
 import com.telerobot.fs.entity.po.CdrEntity;
+import com.telerobot.fs.mybatis.dao.SysDao;
 import com.telerobot.fs.utils.CommonUtils;
 import com.telerobot.fs.utils.DateUtils;
 import com.telerobot.fs.utils.OkHttpClientUtil;
@@ -12,6 +13,7 @@ import com.telerobot.fs.utils.StringUtils;
 import lombok.SneakyThrows;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.context.annotation.DependsOn;
@@ -24,6 +26,9 @@ import java.util.concurrent.Semaphore;
 @DependsOn("appContextProvider")
 public class CdrPush implements ApplicationListener<ApplicationReadyEvent> {
 
+    @Autowired
+    SysDao sysDao;
+
     private static Logger logger =  LoggerFactory.getLogger(CdrPush.class);
     private static Semaphore semaphore = new Semaphore(9999);
     private static ArrayBlockingQueue<CdrDetail> cdrQueue = new ArrayBlockingQueue<>(9999);
@@ -50,6 +55,13 @@ public class CdrPush implements ApplicationListener<ApplicationReadyEvent> {
     private boolean postCdr(CdrDetail cdr){
         try {
             String url = SystemConfig.getValue("post_cdr_url");
+            //如果有自定义回调地址 替换回调地址为自定义回调地址 否则默认回调
+            String callBackUrl = getCallBackUrlByUuid(cdr.getUuid());
+            logger.info("测试日志cdrUUid:{} ,callBackUrlByUuid: {}", cdr.getUuid(), callBackUrl);
+            if(org.apache.commons.lang3.StringUtils.isNotBlank(callBackUrl)){
+                url = callBackUrl;
+            }
+            logger.info("测试日志最后请求的url:{}",url);
             if (StringUtils.isNullOrEmpty(url)) {
                 logger.error("post_cdr_url  has not been configured yet.");
                 return false;
@@ -90,4 +102,16 @@ public class CdrPush implements ApplicationListener<ApplicationReadyEvent> {
                }
            }).start();
     }
+
+    private String getCallBackUrlByUuid(String uuid){
+        String userBizJson = sysDao.getUserBizJson(uuid);
+        logger.info("测试日志userBizJson:{},查询uuid:{}", userBizJson,uuid);
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(userBizJson)){
+            JSONObject obj = JSONObject.parseObject(userBizJson);
+            if(null != obj && !obj.isEmpty() && obj.containsKey("callBackUrl")){
+                return obj.getString("callBackUrl");
+            }
+        }
+        return null;
+    }
 }

+ 1 - 0
src/main/java/com/telerobot/fs/mybatis/dao/SysDao.java

@@ -70,6 +70,7 @@ public interface SysDao {
 
 	List<LlmKb> getKbListByCatId(int catId);
 
+	String getUserBizJson(String uuid);
 
 	int updateExtension(CcExtNum ccExtNum);
 

+ 4 - 1
src/main/java/com/telerobot/fs/mybatis/dao/SysDaoImpl.java

@@ -136,7 +136,10 @@ public class SysDaoImpl implements SysDao {
 	public  List<LlmKb> getKbListByCatId(int catId){
          return mapper.getKbListByCatId(catId);
 	}
-
+	@Override
+	public String getUserBizJson(String uuid){
+		return mapper.getUserBizJson(uuid);
+	}
 	@Override
 	public int updateExtension(CcExtNum ccExtNum) {
 		if (ccExtNum == null || ccExtNum.getExtId() == null) {

+ 1 - 1
src/main/java/com/telerobot/fs/mybatis/persistence/SysMapper.java

@@ -84,7 +84,7 @@ public interface SysMapper {
     int updateParam(@Param("code")String paramCode, @Param("value") String paramValue);
 
     List<LlmKb> getKbListByCatId(int catId);
-
+	String getUserBizJson(@Param("uuid") String uuid);
 
 	int updateExtension(CcExtNum ccExtNum);
 

+ 1 - 1
src/main/java/com/telerobot/fs/robot/RobotChat.java

@@ -115,7 +115,7 @@ public class RobotChat extends RobotBase {
             // In the outbound call scenario, solve the problem that the first few words of the first sentence
             // cannot be heard clearly, because it takes about 2 seconds for the customer to transfer from
             // the receiver to the headphones after answering the call.
-            ThreadUtil.sleep(1500);
+            ThreadUtil.sleep(500);
             if (isHangup) {
                 return;
             }

+ 18 - 0
src/main/java/com/telerobot/fs/utils/CommonUtils.java

@@ -142,6 +142,24 @@ public class CommonUtils<T>  {
         return true;
 	}
 
+	/**
+	 *  校验客户端 http 请求的 token
+	 * @param request
+	 * @return
+	 */
+	public static String validateHttpHeaderToken(HttpServletRequest request,  HttpServletResponse response) {
+		String sysToken = SystemConfig.getValue("call-center-api-token", "");
+		String token = request.getHeader("Authorization");
+		// remove start string: "Bearer "
+		if (!StringUtils.isEmpty(token) && token.length() > 7) {
+			token = token.substring(7);
+		}
+		if (!sysToken.equals(token)) {
+			response.setStatus(400);
+			return "{ \"code\": 400, \"msg\" : \"validate token error.\" }";
+		}
+		return "";
+	}
 
 	public static Map<String, String> parseUrlQueryString(String queryString) throws UnsupportedEncodingException {
 		Map<String, String> queryPairs = new HashMap<>(16);

+ 3 - 1
src/main/resources/com/telerobot/fs/mybatis/persistence/SysMapper.xml

@@ -221,7 +221,9 @@
 		 from cc_agent_online where group_id=#{groupId} and agent_status in (4, 5)
 		order by lastHangupTime asc
 	</select>
-
+	<select id="getUserBizJson" resultType="java.lang.String">
+		select biz_json from cc_call_phone where uuid = #{uuid}
+	</select>
 
 	<resultMap id="ExtensionResultMap" type="com.telerobot.fs.entity.dao.CcExtNum">
 		<id column="ext_id" property="extId" jdbcType="INTEGER"/>