Bläddra i källkod

fix: 修改对话状态 语音机器人不播放完毕不记录用户说话和操作

余尚辉 4 månader sedan
förälder
incheckning
644b32801e
1 ändrade filer med 14 tillägg och 6 borttagningar
  1. 14 6
      src/core/voip/bot.py

+ 14 - 6
src/core/voip/bot.py

@@ -73,7 +73,7 @@ class MyAudioMediaPort(pj.AudioMediaPort):
 
 
         try:
         try:
             asr_text = self.get_asr_text()
             asr_text = self.get_asr_text()
-            play_complete = self.is_play_complete()
+            play_complete = self.call.is_play_complete()
             if asr_text and not play_complete:
             if asr_text and not play_complete:
                 self.user_asr_texts.append(asr_text)
                 self.user_asr_texts.append(asr_text)
             if asr_text and play_complete:
             if asr_text and play_complete:
@@ -109,10 +109,10 @@ class MyAudioMediaPort(pj.AudioMediaPort):
         except:
         except:
             pass
             pass
 
 
-    def is_play_complete(self):
-        if self.call.cur_player_file:
-            player_id = murmur3_32(self.call.cur_player_file)
-            return self.call.player_complete_dict.get(player_id)
+    # def is_play_complete(self):
+    #     if self.call.cur_player_file:
+    #         player_id = murmur3_32(self.call.cur_player_file)
+    #         return self.call.player_complete_dict.get(player_id)
 
 
     def get_asr_text(self):
     def get_asr_text(self):
         try:
         try:
@@ -226,8 +226,13 @@ class MyCall(pj.Call):
         self.asr = TestSt(call_id, message_receiver=self.on_receiver_asr_result)  # 创建ASR实例
         self.asr = TestSt(call_id, message_receiver=self.on_receiver_asr_result)  # 创建ASR实例
         self.asr.start()  # 启动ASR线程
         self.asr.start()  # 启动ASR线程
 
 
-
+    def is_play_complete(self):    #语音机器人是否播放结束
+        if self.cur_player_file:
+            player_id = murmur3_32(self.cur_player_file)
+            return self.player_complete_dict.get(player_id)
     def onDtmfDigit(self, prm):
     def onDtmfDigit(self, prm):
+        if not self.is_play_complete():   # 判断是否播放完成 否则不记录用户说的内容
+            return
         digit = prm.digit
         digit = prm.digit
         # 假设为超长类型按键 把用户输入的按键进行拼接 如果为# 则把用户输入所有按键放入队列并发送文本机器人
         # 假设为超长类型按键 把用户输入的按键进行拼接 如果为# 则把用户输入所有按键放入队列并发送文本机器人
         # 如果为非正常按键服务 输入以后直接发送文本机器人
         # 如果为非正常按键服务 输入以后直接发送文本机器人
@@ -295,6 +300,9 @@ class MyCall(pj.Call):
         self.player.startTransmit(self.aud_med)
         self.player.startTransmit(self.aud_med)
 
 
     def on_receiver_asr_result(self, message, *args):
     def on_receiver_asr_result(self, message, *args):
+        if not self.is_play_complete():  # 判断是否播放完成 否则不记录用户说的内容
+            return
+
         print('asr返回内容:',message)
         print('asr返回内容:',message)
         message = json.loads(message)
         message = json.loads(message)
         if message["header"]["status"] == 20000000:
         if message["header"]["status"] == 20000000: