From ea14be27e6f6c1f7dd328503abab8a64b53f346c Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Wed, 17 Jun 2026 14:34:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=9A=E8=AE=AF=E5=BD=95=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=97=B6=E9=97=B4=E4=B8=8D=E6=98=BE=E7=A4=BA=20fix:?= =?UTF-8?q?=20listen=E6=B6=88=E6=81=AF=E7=9B=B8=E5=85=B3=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/AddressBookManagement.vue | 4 ++-- .../textHandler/listenMessageHandler.py | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/main/manager-web/src/views/AddressBookManagement.vue b/main/manager-web/src/views/AddressBookManagement.vue index a7709b81..6aa85a8e 100644 --- a/main/manager-web/src/views/AddressBookManagement.vue +++ b/main/manager-web/src/views/AddressBookManagement.vue @@ -282,7 +282,7 @@ export default { remarks: device.alias || '', online: false, createDate: device.createDate, - lastConnectedAt: device.lastConnectedAt, + lastConnectedAt: device.lastConnectedAtTimestamp, deviceStatus: 'offline' })); resolve(); @@ -529,7 +529,7 @@ export default { getTimeAgo(timestamp) { if (!timestamp) return '-'; const now = new Date(); - const date = new Date(timestamp); + const date = new Date(Number(timestamp)); const diff = now - date; const seconds = Math.floor(diff / 1000); diff --git a/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py b/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py index abeaaab0..545ccec4 100644 --- a/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py +++ b/main/xiaozhi-server/core/handle/textHandler/listenMessageHandler.py @@ -36,6 +36,10 @@ class ListenTextMessageHandler(TextMessageHandler): # 设备从播放模式切回录音模式,清除所有音频状态和缓冲区 conn.reset_audio_states() elif msg_json["state"] == "stop": + # 收到stop但asr未初始化,跳过处理 + if conn.asr is None: + return + conn.client_voice_stop = True if conn.asr.interface_type == InterfaceType.STREAM: # 流式模式下,发送结束请求 @@ -71,10 +75,19 @@ class ListenTextMessageHandler(TextMessageHandler): conn.sentence_id = uuid.uuid4().hex await send_stt_message(conn, call_text) - conn.tts.store_tts_text(conn.sentence_id, call_text) - conn.tts.tts_text_queue.put(TTSMessageDTO(sentence_id=conn.sentence_id, sentence_type=SentenceType.FIRST, content_type=ContentType.ACTION)) - conn.tts.tts_one_sentence(conn, ContentType.TEXT, content_detail=call_text) - conn.tts.tts_text_queue.put(TTSMessageDTO(sentence_id=conn.sentence_id, sentence_type=SentenceType.LAST, content_type=ContentType.ACTION)) + + # 等待tts初始化,最多等待3秒 + start_time = time.time() + while time.time() - start_time < 3: + if conn.tts: + break + await asyncio.sleep(0.1) + + if conn.tts: + conn.tts.store_tts_text(conn.sentence_id, call_text) + conn.tts.tts_text_queue.put(TTSMessageDTO(sentence_id=conn.sentence_id, sentence_type=SentenceType.FIRST, content_type=ContentType.ACTION)) + conn.tts.tts_one_sentence(conn, ContentType.TEXT, content_detail=call_text) + conn.tts.tts_text_queue.put(TTSMessageDTO(sentence_id=conn.sentence_id, sentence_type=SentenceType.LAST, content_type=ContentType.ACTION)) # 添加到对话历史,让模型理解上下文 conn.dialogue.put(Message(role="assistant", content=call_text))