ソースを参照

状态码更新

三七 1 週間 前
コミット
51ecc6d8af

+ 3 - 0
src/main/java/com/telerobot/fs/config/OriginateSessionErrorCode.java

@@ -7,6 +7,9 @@ package com.telerobot.fs.config;
 public class OriginateSessionErrorCode {
 
     public static final String NONE = "NONE";
+    /**
+    * 语音提示号码不存在 404 和空号不一样
+    */
     public static final String UNALLOCATED_NUMBER = "UNALLOCATED_NUMBER";
     public static final String NO_ROUTE_TRANSIT_NET = "NO_ROUTE_TRANSIT_NET";
     public static final String NO_ROUTE_DESTINATION = "NO_ROUTE_DESTINATION";

+ 20 - 21
src/main/java/com/telerobot/fs/outbound/batchcall/CallTask.java

@@ -398,27 +398,26 @@ public class CallTask implements Runnable {
 						log.info("====emptyNumberDetectionCode:{},hangupCause:{}",emptyNumberDetectionCode,hangupCause);
 						// 第一优先级:ASR空号识别结果(通过识别运营商提示音判断)
 						// emptyNumberDetectionCode 对应 cc_call_phone.callstatus 的状态码定义
-						if (emptyNumberDetectionCode == 33) reason = "empty_number";       // 空号
-						else if (emptyNumberDetectionCode == 31) reason = "busy";          // 忙线
-						else if (emptyNumberDetectionCode == 34) reason = "no_answer";     // 未接听
-						else if (emptyNumberDetectionCode == 35) reason = "suspended";     // 停机
-						else if (emptyNumberDetectionCode == 32) reason = "off";           // 关机
-						else if (emptyNumberDetectionCode == 37) reason = "assistant";     // 语音助手
-						else if (emptyNumberDetectionCode == 38) reason = "unavailable";   // 无法接通
-						else if (emptyNumberDetectionCode == 39) reason = "call_restriction"; // 呼入限制
-						else if (emptyNumberDetectionCode == 36) reason = "network_busy";  // 网络忙
-
-						// 第二优先级:ASR未命中时,根据FreeSWITCH返回的SIP状态码推断
-						// hangupCause 格式示例:"USER_BUSY:sip:486"、"DESTINATION_OUT_OF_ORDER:null"
-						if (reason.isEmpty()) {
-							if (hangupCause.contains("USER_BUSY") || hangupCause.contains("486")) reason = "busy";                    // SIP 486 用户忙
-							else if (hangupCause.contains("NO_ANSWER") || hangupCause.contains("NO_USER_RESPONSE")) reason = "no_answer";  // 无应答
-							else if (hangupCause.contains("UNALLOCATED_NUMBER") || hangupCause.contains("DOES_NOT_EXIST_ANYWHERE") || hangupCause.contains("604")) reason = "empty_number"; // SIP 604 号码不存在
-							else if (hangupCause.contains("SUBSCRIBER_ABSENT")) reason = "suspended";                                // 用户不在服务区/停机
-							else if (hangupCause.contains("CALL_REJECTED") || hangupCause.contains("603")) reason = "no_answer";       // SIP 603 拒接
-							else if (hitLineError) reason = "line_error";                                                            // 线路故障(404/503/480/408)
-							else reason = "unknown";                                                                                  // 未知原因
-						}
+
+							if (hangupCause.contains("USER_BUSY") || hangupCause.contains("486")) reason = "2";                    // SIP 486 用户忙
+							else if (hangupCause.contains("NO_ANSWER")
+									|| hangupCause.contains("NO_USER_RESPONSE")
+									|| hangupCause.contains("MEDIA_TIMEOUT")) reason = "3";  // 无应答
+							else if (hangupCause.contains("UNALLOCATED_NUMBER")
+									|| hangupCause.contains("DOES_NOT_EXIST_ANYWHERE")
+									|| hangupCause.contains("604")) reason = "5"; // SIP 604 号码不存在
+							else if (hangupCause.contains("SUBSCRIBER_ABSENT")) reason = "6";   // 用户不在服务区/停机
+							else if (hangupCause.contains("NUMBER_CHANGED")) reason = "7";   // 号码失效
+							else if (hangupCause.contains("CALL_REJECTED")
+									|| hangupCause.contains("603")
+									|| hangupCause.contains("RECOVERY_ON_TIMER_EXPIRE")
+									|| hangupCause.contains("403")) reason = "4";       // SIP 603 拒接
+							else if (hitLineError) reason = "line_error";
+							else if (hangupCause.contains("ORIGINATOR_CANCEL") || hangupCause.contains("487") ) reason = "1";  // 关机呼叫取消
+							else if (hangupCause.contains("MANAGER_REQUEST")
+									|| hangupCause.contains("NORMAL_CLEARING") ) reason = "98";  // 正常接通
+							else reason = "99";
+
 						phoneInfo.setUnconnectedReason(reason);
 						log.info("{} unconnected reason: {}", getTraceId(), reason);
 					} catch (Throwable e) {