zhoufan 8 ヶ月 前
コミット
2b8bc0d7dc

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

4
 import lombok.extern.slf4j.Slf4j;
4
 import lombok.extern.slf4j.Slf4j;
5
 import midware.entity.database.rep.Ai;
5
 import midware.entity.database.rep.Ai;
6
 import midware.service.init.EslClientService;
6
 import midware.service.init.EslClientService;
7
-import midware.service.rep.IConfigService;
8
 import midware.util.enums.EslEventEnum;
7
 import midware.util.enums.EslEventEnum;
9
 import midware.util.helper.AiHelper;
8
 import midware.util.helper.AiHelper;
10
 import midware.util.helper.SpringHelper;
9
 import midware.util.helper.SpringHelper;
21
     @Override
20
     @Override
22
     public void eventReceived(EslEvent event) {
21
     public void eventReceived(EslEvent event) {
23
         Map<String, String> header = event.getEventHeaders();
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
             if (eventname.equals("CUSTOM")) {
47
             if (eventname.equals("CUSTOM")) {
33
                 String subclass = header.get("Event-Subclass").replace("::", "_").toLowerCase();
48
                 String subclass = header.get("Event-Subclass").replace("::", "_").toLowerCase();
41
                             String text = asr.get("text").toString();
56
                             String text = asr.get("text").toString();
42
                             if (StringHelper.isNotEmpty(text)) {
57
                             if (StringHelper.isNotEmpty(text)) {
43
                                 aiAnswer(chanId, text);
58
                                 aiAnswer(chanId, text);
44
-                            }else {
59
+                            } else {
45
                                 resumeAsr(chanId, eslClientService);
60
                                 resumeAsr(chanId, eslClientService);
46
                             }
61
                             }
47
                         }
62
                         }
62
                                     xmlResult = EslCommon.getXmlResult(xml, true);
77
                                     xmlResult = EslCommon.getXmlResult(xml, true);
63
                                     if (StringHelper.isNotEmpty(xmlResult)) {
78
                                     if (StringHelper.isNotEmpty(xmlResult)) {
64
                                         aiAnswer(chanId, xmlResult);
79
                                         aiAnswer(chanId, xmlResult);
65
-                                    }else {
80
+                                    } else {
66
                                         //继续识别
81
                                         //继续识别
67
                                         eslClientService.appCommand(chanId, "detect_speech", "resume");
82
                                         eslClientService.appCommand(chanId, "detect_speech", "resume");
68
                                     }
83
                                     }
70
                             }
85
                             }
71
                         }
86
                         }
72
                         break;
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
                         try {
130
                         try {
134
                             Thread.sleep(5000);
131
                             Thread.sleep(5000);
135
                             eslClientService.transferQueue(chanId);
132
                             eslClientService.transferQueue(chanId);
136
-                            if (SpringHelper.getBean(IConfigService.class).getConfigValue("EnableAsr").equals("1")) {
137
-                                resumeAsr(chanId, eslClientService);
138
-                            }
139
                         } catch (InterruptedException e) {
133
                         } catch (InterruptedException e) {
140
                             throw new RuntimeException(e);
134
                             throw new RuntimeException(e);
141
                         }
135
                         }
177
 
171
 
178
     //停止识别
172
     //停止识别
179
     private void stopAsr(String chanId, EslClientService eslClientService) {
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
 public class EslEventListenerAsr implements IEslEventListener {
24
 public class EslEventListenerAsr implements IEslEventListener {
25
     @Override
25
     @Override
26
     public void eventReceived(EslEvent event) {
26
     public void eventReceived(EslEvent event) {
27
-
28
         String eventname = event.getEventName();
27
         String eventname = event.getEventName();
29
-
30
         Map<String, String> header = event.getEventHeaders();
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
     }