|
@@ -398,27 +398,26 @@ public class CallTask implements Runnable {
|
|
|
log.info("====emptyNumberDetectionCode:{},hangupCause:{}",emptyNumberDetectionCode,hangupCause);
|
|
log.info("====emptyNumberDetectionCode:{},hangupCause:{}",emptyNumberDetectionCode,hangupCause);
|
|
|
// 第一优先级:ASR空号识别结果(通过识别运营商提示音判断)
|
|
// 第一优先级:ASR空号识别结果(通过识别运营商提示音判断)
|
|
|
// emptyNumberDetectionCode 对应 cc_call_phone.callstatus 的状态码定义
|
|
// 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);
|
|
phoneInfo.setUnconnectedReason(reason);
|
|
|
log.info("{} unconnected reason: {}", getTraceId(), reason);
|
|
log.info("{} unconnected reason: {}", getTraceId(), reason);
|
|
|
} catch (Throwable e) {
|
|
} catch (Throwable e) {
|