zhoufan 7 mesi fa
parent
commit
2b8bc0d7dc

+ 32 - 40
midware-service/src/main/java/midware/service/eslclient/EslEventListenerAi.java

@@ -4,7 +4,6 @@ import com.alibaba.fastjson2.JSON;
4 4
 import lombok.extern.slf4j.Slf4j;
5 5
 import midware.entity.database.rep.Ai;
6 6
 import midware.service.init.EslClientService;
7
-import midware.service.rep.IConfigService;
8 7
 import midware.util.enums.EslEventEnum;
9 8
 import midware.util.helper.AiHelper;
10 9
 import midware.util.helper.SpringHelper;
@@ -21,13 +20,29 @@ public class EslEventListenerAi implements IEslEventListener {
21 20
     @Override
22 21
     public void eventReceived(EslEvent event) {
23 22
         Map<String, String> header = event.getEventHeaders();
23
+        String eventname = event.getEventName();
24
+        String chanId = header.get("Unique-ID");
24 25
 
25
-        //机器人
26
-        if (header.containsKey("Caller-Context") && header.get("Caller-Context").equals("robot")) {
26
+        EslClientService eslClientService = SpringHelper.getBean(EslClientService.class);
27 27
 
28
-            EslClientService eslClientService = SpringHelper.getBean(EslClientService.class);
29
-            String eventname = event.getEventName();
30
-            String chanId = header.get("Unique-ID");
28
+        if (!eventname.equals("CUSTOM")&&EslEventEnum.valueOf(eventname).equals(EslEventEnum.CHANNEL_EXECUTE_COMPLETE)) {
29
+            if (header.get("Application").equals("set") && header.get("Application-Data").equals("robot=1")) {
30
+                //开启语音识别
31
+                String type = SpringHelper.getRequiredProperty("common.asr");
32
+                switch (type) {
33
+                    case "funasr":
34
+                        eslClientService.funasr(chanId, true);
35
+                        break;
36
+                    case "mrcp":
37
+                        eslClientService.appCommand(chanId, "set", "fire_asr_events=true");
38
+                        eslClientService.appCommand(chanId, "detect_speech", "unimrcp:mrcpv2 hello hello");
39
+                        break;
40
+                }
41
+                eslClientService.playBack("/home/wav/zyyt/欢迎词.wav", chanId);
42
+            }
43
+        }
44
+        //机器人
45
+        if (header.containsKey("variable_robot") && header.get("variable_robot").equals("1")) {
31 46
 
32 47
             if (eventname.equals("CUSTOM")) {
33 48
                 String subclass = header.get("Event-Subclass").replace("::", "_").toLowerCase();
@@ -41,7 +56,7 @@ public class EslEventListenerAi implements IEslEventListener {
41 56
                             String text = asr.get("text").toString();
42 57
                             if (StringHelper.isNotEmpty(text)) {
43 58
                                 aiAnswer(chanId, text);
44
-                            }else {
59
+                            } else {
45 60
                                 resumeAsr(chanId, eslClientService);
46 61
                             }
47 62
                         }
@@ -62,7 +77,7 @@ public class EslEventListenerAi implements IEslEventListener {
62 77
                                     xmlResult = EslCommon.getXmlResult(xml, true);
63 78
                                     if (StringHelper.isNotEmpty(xmlResult)) {
64 79
                                         aiAnswer(chanId, xmlResult);
65
-                                    }else {
80
+                                    } else {
66 81
                                         //继续识别
67 82
                                         eslClientService.appCommand(chanId, "detect_speech", "resume");
68 83
                                     }
@@ -70,24 +85,6 @@ public class EslEventListenerAi implements IEslEventListener {
70 85
                             }
71 86
                         }
72 87
                         break;
73
-                    case CHANNEL_EXECUTE_COMPLETE:
74
-                        if (header.get("Application").equals("set") && header.get("Application-Data").equals("robot=1")) {
75
-                            //未开启语音识别
76
-                            if (!SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
77
-                                //开启语音识别
78
-                                String type=SpringHelper.getRequiredProperty("common.asr");
79
-                                switch (type) {
80
-                                    case "funasr":
81
-                                        eslClientService.funasr(chanId,true);
82
-                                        break;
83
-                                    case "mrcp":
84
-                                        eslClientService.appCommand(chanId, "set", "fire_asr_events=true");
85
-                                        eslClientService.appCommand(chanId, "detect_speech", "unimrcp:mrcpv2 hello hello");
86
-                                        break;
87
-                                }
88
-                            }
89
-                        }
90
-                        break;
91 88
                 }
92 89
             }
93 90
         }
@@ -133,9 +130,6 @@ public class EslEventListenerAi implements IEslEventListener {
133 130
                         try {
134 131
                             Thread.sleep(5000);
135 132
                             eslClientService.transferQueue(chanId);
136
-                            if (SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
137
-                                resumeAsr(chanId, eslClientService);
138
-                            }
139 133
                         } catch (InterruptedException e) {
140 134
                             throw new RuntimeException(e);
141 135
                         }
@@ -177,17 +171,15 @@ public class EslEventListenerAi implements IEslEventListener {
177 171
 
178 172
     //停止识别
179 173
     private void stopAsr(String chanId, EslClientService eslClientService) {
180
-        //未开启语音识别
181
-        if (!SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
182
-            String type=SpringHelper.getRequiredProperty("common.asr");
183
-            switch (type) {
184
-                case "funasr":
185
-                    eslClientService.funasr(chanId,false);
186
-                    break;
187
-                case "mrcp":
188
-                    eslClientService.appCommand(chanId, "detect_speech", "stop");
189
-                    break;
190
-            }
174
+        eslClientService.appCommand(chanId, "set", "robot=0");
175
+        String type = SpringHelper.getRequiredProperty("common.asr");
176
+        switch (type) {
177
+            case "funasr":
178
+                eslClientService.funasr(chanId, false);
179
+                break;
180
+            case "mrcp":
181
+                eslClientService.appCommand(chanId, "detect_speech", "stop");
182
+                break;
191 183
         }
192 184
     }
193 185
 }

+ 52 - 60
midware-service/src/main/java/midware/service/eslclient/EslEventListenerAsr.java

@@ -24,76 +24,68 @@ import java.util.stream.Collectors;
24 24
 public class EslEventListenerAsr implements IEslEventListener {
25 25
     @Override
26 26
     public void eventReceived(EslEvent event) {
27
-
28 27
         String eventname = event.getEventName();
29
-
30 28
         Map<String, String> header = event.getEventHeaders();
31
-        if (eventname.equals("CUSTOM")) {
32
-            String subclass = header.get("Event-Subclass").replace("::", "_").toLowerCase();
33
-            switch (EslEventEnum.valueOf(subclass)) {
34
-                case mod_funasr_json:
35
-                    //不是机器人,不是自动外呼
36
-                    if (!(header.containsKey("Caller-Context") && header.get("Caller-Context").equals("robot"))) {
37
-                        if (!(header.containsKey("variable_call_type") && header.get("variable_call_type").equals("3"))) {
38
-                            String asrs = header.get("funasr_result");
39
-                            Map asr = JSON.parseObject(asrs, Map.class);
40
-                            if (asr.containsKey("mode") && asr.get("mode").toString().equals("2pass-offline")) {
41
-                                String text = asr.get("text").toString();
42
-                                if (StringHelper.isNotEmpty(text)) {
43
-                                    String[] chanNames = header.get("Channel-Name").split("@")[0].split("/");
44
-                                    Channel chan2 = EslCommon.getChanByNumber(chanNames[2]);
45
-                                    if (chan2 != null) sendAsr(chan2, text,asr.get("timestamp"));
46
-                                }
29
+        //不是机器人,不是自动外呼
30
+        if (!(header.containsKey("variable_robot") && header.get("variable_robot").equals("1")) &&
31
+                !(header.containsKey("variable_call_type") && header.get("variable_call_type").equals("3"))) {
32
+            if (eventname.equals("CUSTOM")) {
33
+                String subclass = header.get("Event-Subclass").replace("::", "_").toLowerCase();
34
+                switch (EslEventEnum.valueOf(subclass)) {
35
+                    case mod_funasr_json:
36
+                        String asrs = header.get("funasr_result");
37
+                        Map asr = JSON.parseObject(asrs, Map.class);
38
+                        if (asr.containsKey("mode") && asr.get("mode").toString().equals("2pass-offline")) {
39
+                            String text = asr.get("text").toString();
40
+                            if (StringHelper.isNotEmpty(text)) {
41
+                                String[] chanNames = header.get("Channel-Name").split("@")[0].split("/");
42
+                                Channel chan2 = EslCommon.getChanByNumber(chanNames[2]);
43
+                                if (chan2 != null) sendAsr(chan2, text, asr.get("timestamp"));
47 44
                             }
48 45
                         }
49
-                    }
50
-                    break;
51
-            }
52
-        } else {
53
-            EslClientService eslClientService = SpringHelper.getBean(EslClientService.class);
54
-            // 获取通道ID
55
-            String chanId = header.get("Unique-ID");
56
-            // 获取通道名称
57
-            String[] chanNames = header.get("Channel-Name").split("@")[0].split("/");
58
-            Channel chan = EslCommon.getChanByNumber(chanNames[2]);
59
-            switch (EslEventEnum.valueOf(eventname)) {
60
-                case CHANNEL_ANSWER:
61
-                    //是否开启语音识别
62
-                    if (SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
63
-                        if (chan != null && chan.getSessionSort() >= 2) {
64
-                            startAsr(chanId,eslClientService);
65
-                            if (chan.getSessionSort() == 2) {
66
-                                Channel cl = EslCommon.getFirstChanBySessionId(chan.getSessionId());
67
-                                if (cl != null) startAsr(cl.getChanId(),eslClientService);
46
+                        break;
47
+                }
48
+            } else {
49
+                EslClientService eslClientService = SpringHelper.getBean(EslClientService.class);
50
+                // 获取通道ID
51
+                String chanId = header.get("Unique-ID");
52
+                // 获取通道名称
53
+                String[] chanNames = header.get("Channel-Name").split("@")[0].split("/");
54
+                Channel chan = EslCommon.getChanByNumber(chanNames[2]);
55
+                switch (EslEventEnum.valueOf(eventname)) {
56
+                    case CHANNEL_ANSWER:
57
+                        //是否开启语音识别
58
+                        if (SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
59
+                            if (chan != null && chan.getSessionSort() >= 2) {
60
+                                startAsr(chanId, eslClientService);
61
+                                if (chan.getSessionSort() == 2) {
62
+                                    Channel cl = EslCommon.getFirstChanBySessionId(chan.getSessionId());
63
+                                    if (cl != null) startAsr(cl.getChanId(), eslClientService);
64
+                                }
68 65
                             }
69 66
                         }
70
-                    }
71
-                    break;
72
-                case DETECTED_SPEECH:
73
-                    //不是机器人,不是自动外呼
74
-                    if (!(header.containsKey("Caller-Context") && header.get("Caller-Context").equals("robot"))) {
75
-                        if (!(header.containsKey("variable_call_type") && header.get("variable_call_type").equals("3"))) {
76
-                            String speechType = header.get("Speech-Type");
77
-                            if (StringHelper.isNotEmpty(speechType)) {
78
-                                //begin-speaking/detected-speech/closed
79
-                                if (speechType.equals("detected-speech")) {
80
-                                    //继续识别
81
-                                    eslClientService.appCommand(chanId, "detect_speech", "resume");
82
-                                    //识别结果
83
-                                    String xmlResult = "";
84
-                                    List<String> results = event.getEventBodyLines();
85
-                                    if (results.size() > 0) {
86
-                                        String xml = String.join("", results);
87
-                                        xmlResult = EslCommon.getXmlResult(xml, true);
88
-                                        if (StringHelper.isNotEmpty(xmlResult)) {
89
-                                            sendAsr(chan, xmlResult,null);
90
-                                        }
67
+                        break;
68
+                    case DETECTED_SPEECH:
69
+                        String speechType = header.get("Speech-Type");
70
+                        if (StringHelper.isNotEmpty(speechType)) {
71
+                            //begin-speaking/detected-speech/closed
72
+                            if (speechType.equals("detected-speech")) {
73
+                                //继续识别
74
+                                eslClientService.appCommand(chanId, "detect_speech", "resume");
75
+                                //识别结果
76
+                                String xmlResult = "";
77
+                                List<String> results = event.getEventBodyLines();
78
+                                if (results.size() > 0) {
79
+                                    String xml = String.join("", results);
80
+                                    xmlResult = EslCommon.getXmlResult(xml, true);
81
+                                    if (StringHelper.isNotEmpty(xmlResult)) {
82
+                                        sendAsr(chan, xmlResult, null);
91 83
                                     }
92 84
                                 }
93 85
                             }
94 86
                         }
95
-                    }
96
-                    break;
87
+                        break;
88
+                }
97 89
             }
98 90
         }
99 91
     }