|
@@ -18,8 +18,8 @@ from src.core.callcenter.model import BotChatRequest, ChatResponse,ChatMessage
|
|
|
|
|
|
calls = {}
|
|
|
# recording_file = '/code/src/core/voip/incoming_call.wav'
|
|
|
-player_file1 = '/code/src/core/voip/test111.wav'
|
|
|
-player_file2 = '/code/src/core/voip/test222.wav'
|
|
|
+# player_file1 = '/code/src/core/voip/test111.wav'
|
|
|
+# player_file2 = '/code/src/core/voip/test222.wav'
|
|
|
|
|
|
class BotStatus(Enum):
|
|
|
# 等待用户讲话,未超时
|
|
@@ -56,6 +56,10 @@ class MyAudioMediaPort(pj.AudioMediaPort):
|
|
|
|
|
|
self.user_asr_texts = []
|
|
|
self.cur_player_file = None
|
|
|
+ self.wait_time = 0
|
|
|
+
|
|
|
+ self.play_start_time = None # 记录播放开始时间
|
|
|
+ self.play_complete_flag = False # 播放完成标志
|
|
|
|
|
|
def onFrameRequested(self, frame):
|
|
|
print("Request audio frame:", frame)
|
|
@@ -78,11 +82,21 @@ class MyAudioMediaPort(pj.AudioMediaPort):
|
|
|
self.user_asr_texts.clear()
|
|
|
self.call.chat("2",user_asr_text)
|
|
|
|
|
|
+ #超时处理
|
|
|
+ current_time = time.time()
|
|
|
+ if play_complete and not asr_text:
|
|
|
+ print('ssdsdsd',play_complete,asr_text)
|
|
|
+ self.wait_time_check(current_time)
|
|
|
+
|
|
|
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)
|
|
|
- self.cur_player_file = self.get_player_file()
|
|
|
+ print('onFrameReceived:message_queue_size=', message_queue_size, 'play_complete=', play_complete, asr_text)
|
|
|
+ self.cur_player_file, self.wait_time= self.get_player_file()
|
|
|
self.call.send_bot_speaker(self.cur_player_file)
|
|
|
+
|
|
|
+ # 重置播放完成标志和超时计时器,确保新的播放从头开始计时
|
|
|
+ self.play_complete_flag = False # 重置播放完成标志
|
|
|
+ self.play_start_time = time.time() # 重新开始计时
|
|
|
except:
|
|
|
pass
|
|
|
|
|
@@ -103,11 +117,24 @@ class MyAudioMediaPort(pj.AudioMediaPort):
|
|
|
try:
|
|
|
message = self.call.message_queue.get(block=False)
|
|
|
player_file = [item.voice_url for item in message.contents if item.content_type == 'voice']
|
|
|
- return player_file
|
|
|
+ wait_time = message.wait_time
|
|
|
+ return player_file, wait_time
|
|
|
except Exception as e:
|
|
|
print(f"sdsd: {e}")
|
|
|
traceback.print_exc()
|
|
|
|
|
|
+ def wait_time_check(self,current_time):
|
|
|
+ if not hasattr(self, 'play_complete_flag'):
|
|
|
+ self.play_complete_flag = False
|
|
|
+ self.play_start_time = 0
|
|
|
+ # 播放完成后开始计时
|
|
|
+ if not self.play_complete_flag:
|
|
|
+ self.play_complete_flag = True
|
|
|
+ self.play_start_time = current_time
|
|
|
+ # 检查超时时间是否已到
|
|
|
+ if current_time - self.play_start_time > int(self.wait_time):
|
|
|
+ self.play_complete_flag = False # 重置标志位,避免重复超时
|
|
|
+ self.call.chat("6", "重新请求文本机器人")
|
|
|
|
|
|
class MyAudioMediaPlayer(pj.AudioMediaPlayer):
|
|
|
|
|
@@ -225,7 +252,7 @@ class MyCall(pj.Call):
|
|
|
print('self.player_complete_dict[player_id]D:', player_id, player_file, self.player_complete_dict[player_id])
|
|
|
self.player = MyAudioMediaPlayer(player_id, self.aud_med, on_complete=self.on_media_player_complete)
|
|
|
# self.player.createPlayer(player_file, pj.PJMEDIA_FILE_NO_LOOP)
|
|
|
- self.player.createPlaylist(player_file, 'my_hello_playlist', pj.PJMEDIA_FILE_NO_LOOP)
|
|
|
+ self.player.createPlaylist(player_file, f'my_hello_playlist{player_id}', pj.PJMEDIA_FILE_NO_LOOP)
|
|
|
self.player.startTransmit(self.aud_med)
|
|
|
|
|
|
def on_receiver_asr_result(self, message, *args):
|
|
@@ -339,6 +366,13 @@ class ToTextBotAgent:
|
|
|
}
|
|
|
]
|
|
|
response_data['contents']= new_contents
|
|
|
+ elif event_type == '6':
|
|
|
+ response_data['contents'].append({
|
|
|
+ "content_type": "voice",
|
|
|
+ "content": "",
|
|
|
+ "voice_url": '/code/src/core/voip/scripts/4_00.wav',
|
|
|
+ "voice_content": "sds"
|
|
|
+ })
|
|
|
try:
|
|
|
print(json.dumps(response_data['contents']))
|
|
|
parsed_response = ChatMessage.from_json(response_data)
|