ct преди 1 ден
родител
ревизия
341a1d494c
променени са 1 файла, в които са добавени 23 реда и са изтрити 4 реда
  1. 23 4
      src/main/java/com/telerobot/fs/wshandle/impl/CallApi.java

+ 23 - 4
src/main/java/com/telerobot/fs/wshandle/impl/CallApi.java

@@ -1206,9 +1206,22 @@ public class CallApi extends MsgHandlerBase {
             phone = phoneAndCaseInfo;
         }
 
+        boolean dtuReverse = false;
+        try {
+            dtuReverse = gatewayList.get(0) != null && gatewayList.get(0).getRegister() == 2;
+        } catch (Exception ignored) {
+        }
+        boolean skipDestPhoneDecrypt = false;
+        try {
+            skipDestPhoneDecrypt = callArgs.getArgs().getBooleanValue("skipDestPhoneDecrypt");
+        } catch (Exception ignored) {
+        }
+        skipDestPhoneDecrypt = skipDestPhoneDecrypt || dtuReverse;
+
         boolean isNumeric = StringUtils.isNumeric(phone.replace(" ", "").replace("-", "").trim());
-        // 电话号码不是数字的情况下,需要解密号码字符串
-        if (!isNumeric) {
+        // 普通线路:非数字 destPhone 按 DES HEX 解密(历史逻辑)
+        // DTU 反向 register=2:destPhone 为叁友 AES 密文,跳过 DES,原样下发给 FS
+        if (!isNumeric && !skipDestPhoneDecrypt) {
             String key = SystemConfig.getValue("phone_encrypted_key");
             phone = EncryptUtil.getInstance().DESdecode(phone, key);
             if (null == phone) {
@@ -1216,9 +1229,15 @@ public class CallApi extends MsgHandlerBase {
                 return;
             }
         }
+        if (!isNumeric && skipDestPhoneDecrypt) {
+            logger.info("{} 软电话外呼 DTU 跳过 destPhone DES 解密,phoneEncryptType={}, destLen={}",
+                    getTraceId(),
+                    callArgs.getArgs().getString("phoneEncryptType"),
+                    phone != null ? phone.length() : 0);
+        }
 
-        logger.info("{} 软电话外呼收到 startSession:destPhone={}, callType={}, gatewayList摘要={}",
-                getTraceId(), phone, callType, summarizeGatewayList(gatewayList));
+        logger.info("{} 软电话外呼收到 startSession:destPhone={}, callType={}, dtuReverse={}, skipDestPhoneDecrypt={}, gatewayList摘要={}",
+                getTraceId(), phone, callType, dtuReverse, skipDestPhoneDecrypt, summarizeGatewayList(gatewayList));
 
         String uuidInner = UuidGenerator.GetOneUuid();
         String uuidOuter = UuidGenerator.GetOneUuid();