|
@@ -97,13 +97,16 @@ class MyAudioMediaPort(pj.AudioMediaPort):
|
|
message_queue_size = self.call.message_queue.qsize()
|
|
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):
|
|
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)
|
|
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.call.send_bot_speaker(self.cur_player_file)
|
|
|
|
|
|
# 重置播放完成标志和超时计时器,确保新的播放从头开始计时
|
|
# 重置播放完成标志和超时计时器,确保新的播放从头开始计时
|
|
self.play_complete_flag = False # 重置播放完成标志
|
|
self.play_complete_flag = False # 重置播放完成标志
|
|
self.play_start_time = time.time() # 重新开始计时
|
|
self.play_start_time = time.time() # 重新开始计时
|
|
self.call.digit = "" #重新把超长类型按键内容digit置为空
|
|
self.call.digit = "" #重新把超长类型按键内容digit置为空
|
|
|
|
+
|
|
|
|
+ #播放完毕执行的动作
|
|
|
|
+ self.call.say_end_action(action)
|
|
except:
|
|
except:
|
|
pass
|
|
pass
|
|
|
|
|
|
@@ -126,8 +129,9 @@ class MyAudioMediaPort(pj.AudioMediaPort):
|
|
player_file = [item.voice_url for item in message.contents if item.content_type == 'voice']
|
|
player_file = [item.voice_url for item in message.contents if item.content_type == 'voice']
|
|
wait_time = message.wait_time
|
|
wait_time = message.wait_time
|
|
dtmf_type = message.dtmf_type
|
|
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:
|
|
except Exception as e:
|
|
traceback.print_exc()
|
|
traceback.print_exc()
|
|
|
|
|
|
@@ -285,7 +289,16 @@ class MyCall(pj.Call):
|
|
|
|
|
|
def on_receiver_asr_result(self, message, *args):
|
|
def on_receiver_asr_result(self, message, *args):
|
|
print('asr返回内容:',message)
|
|
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):
|
|
def on_media_player_complete(self, player_id):
|
|
print('player complete')
|
|
print('player complete')
|
|
@@ -298,6 +311,15 @@ class MyCall(pj.Call):
|
|
# 调用文本机器人接口
|
|
# 调用文本机器人接口
|
|
ToTextBotAgent(event_type,user_asr_text,self)
|
|
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:
|
|
class ToTextBotAgent:
|
|
def __init__(self, event_type, user_asr_text, call_agent):
|
|
def __init__(self, event_type, user_asr_text, call_agent):
|
|
if not user_asr_text:
|
|
if not user_asr_text:
|
|
@@ -316,25 +338,7 @@ class ToTextBotAgent:
|
|
# 发送请求并处理响应
|
|
# 发送请求并处理响应
|
|
self.test_request(self.request_data,event_type)
|
|
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):
|
|
def to_quest(self, request: BotChatRequest):
|
|
# 将实体类转换为JSON字符串
|
|
# 将实体类转换为JSON字符串
|
|
@@ -413,7 +417,8 @@ class ToTextBotAgent:
|
|
try:
|
|
try:
|
|
print(json.dumps(response_data['contents']))
|
|
print(json.dumps(response_data['contents']))
|
|
parsed_response = ChatMessage.from_json(response_data)
|
|
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:
|
|
except Exception as e:
|
|
print(f"Error in test_request: {e}")
|
|
print(f"Error in test_request: {e}")
|
|
traceback.print_exc() # 打印完整的错误信息
|
|
traceback.print_exc() # 打印完整的错误信息
|