|
|
@@ -330,6 +330,8 @@ public class CallTask implements Runnable {
|
|
|
this.backgroundJobUuid = backgroundJobUuid;
|
|
|
}
|
|
|
public void processFsMsg(Map<String, String> headers) {
|
|
|
+
|
|
|
+
|
|
|
String uniqueID = headers.get("Unique-ID");
|
|
|
String caller = headers.get("Caller-Caller-ID-Number");
|
|
|
String dest = headers.get("Caller-Destination-Number");
|
|
|
@@ -393,30 +395,30 @@ public class CallTask implements Runnable {
|
|
|
// unknown - 未知原因
|
|
|
try {
|
|
|
String reason = "";
|
|
|
-
|
|
|
+ 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("ORIGINATOR_CANCEL")
|
|
|
+ || hangupCause.contains("487")
|
|
|
+ || hangupCause.contains("403")) reason = "4"; // SIP 603 拒接
|
|
|
+ else if (hitLineError) reason = "line_error";
|
|
|
+ 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) {
|
|
|
@@ -597,6 +599,7 @@ public class CallTask implements Runnable {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
try {
|
|
|
+ log.info("eventReceived.getEventHeaders()All:{}",event);
|
|
|
processFsMsg(event.getEventHeaders());
|
|
|
}catch (Exception e){
|
|
|
log.error("{} process freeSWITCH esl msg error : {} {}, msg: {}",
|