Pārlūkot izejas kodu

fix: 修改调用文本机器人播放以后的action

余尚辉 5 mēneši atpakaļ
vecāks
revīzija
57f3c071e9
1 mainītis faili ar 28 papildinājumiem un 23 dzēšanām
  1. 28 23
      src/core/voip/bot.py

+ 28 - 23
src/core/voip/bot.py

@@ -97,13 +97,16 @@ class MyAudioMediaPort(pj.AudioMediaPort):
             message_queue_size = self.call.message_queue.qsize()
             if (message_queue_size > 0 and not self.cur_player_file) or (message_queue_size > 0 and play_complete):
                 print('onFrameReceived:message_queue_size=', message_queue_size, 'play_complete=', play_complete, asr_text)
-                self.cur_player_file, self.call.wait_time, self.call.dtmf_type= self.get_player_file()
+                self.cur_player_file, self.call.wait_time, self.call.dtmf_type, action= self.get_player_file()
                 self.call.send_bot_speaker(self.cur_player_file)
 
                 # 重置播放完成标志和超时计时器,确保新的播放从头开始计时
                 self.play_complete_flag = False  # 重置播放完成标志
                 self.play_start_time = time.time()  # 重新开始计时
                 self.call.digit = ""   #重新把超长类型按键内容digit置为空
+
+                #播放完毕执行的动作
+                self.call.say_end_action(action)
         except:
             pass
 
@@ -126,8 +129,9 @@ class MyAudioMediaPort(pj.AudioMediaPort):
             player_file = [item.voice_url for item in message.contents if item.content_type == 'voice']
             wait_time = message.wait_time
             dtmf_type = message.dtmf_type
-            print('get_player_file:', player_file, wait_time,dtmf_type)
-            return player_file, wait_time, dtmf_type
+            action = message.action
+            print('get_player_file:', player_file, wait_time,dtmf_type, action)
+            return player_file, wait_time, dtmf_type, action
         except Exception as e:
             traceback.print_exc()
 
@@ -285,7 +289,16 @@ class MyCall(pj.Call):
 
     def on_receiver_asr_result(self, message, *args):
         print('asr返回内容:',message)
-        self.user_asr_text_queue.put(message)
+        message = json.loads(message)
+        if message["header"]["status"] == 20000000:
+            # 获取 result 内容
+            result = message["payload"]["result"]
+            print("asr返回内容Result:", result)
+            self.user_asr_text_queue.put(result)
+        else:
+            print(f"Status is not {message['header']['status']}")
+
+
 
     def on_media_player_complete(self, player_id):
         print('player complete')
@@ -298,6 +311,15 @@ class MyCall(pj.Call):
         # 调用文本机器人接口
         ToTextBotAgent(event_type,user_asr_text,self)
 
+    def say_end_action(self, action):
+        print('handling_release', action.action_code)
+        action_code = action.action_code
+        if action_code == 'hang':  # 挂断
+            action_content = action.action_content
+            print(f'todo 挂电话:{action_content}')
+        elif action_code == 'transfer':  # 转人工
+            print('todo 转人工')
+
 class ToTextBotAgent:
     def __init__(self, event_type, user_asr_text, call_agent):
         if not user_asr_text:
@@ -316,25 +338,7 @@ class ToTextBotAgent:
         # 发送请求并处理响应
         self.test_request(self.request_data,event_type)
 
-    def to_hang(self, action_content):
-        user_part = self.call_agent.user_part_pool.get()
-        self.call_agent.hangup(user_part, action_content)
 
-    def handling_message(self, message: ChatMessage):
-        print('handling_release', message)
-        if message:
-            action = message.action
-            action_code = action.action_code
-            if action_code == 'hang':  # 挂断
-                action_content = action.action_content
-                self.to_hang(action_content)
-            elif action_code == 'transfer':  # 转人工
-                print('todo 转人工')
-            elif action_code == 'normal':  # 正常通话
-                self.call_agent.message_queue.put(message)
-                print(f"成功获取响应: ActionCode: {message.wait_time}")
-        else:
-            print("文本机器人接口调用失败")
 
     def to_quest(self, request: BotChatRequest):
         # 将实体类转换为JSON字符串
@@ -413,7 +417,8 @@ class ToTextBotAgent:
         try:
             print(json.dumps(response_data['contents']))
             parsed_response = ChatMessage.from_json(response_data)
-            self.handling_message(parsed_response)
+            # self.handling_message(parsed_response)
+            self.call_agent.message_queue.put(parsed_response)
         except Exception as e:
             print(f"Error in test_request: {e}")
             traceback.print_exc()  # 打印完整的错误信息