fix(前端): 优化对话保持逻辑并增加错误处理

- 将重新激活逻辑从 activeInteractionMode 改为更可靠的 startChat
- 增加对 startChat 失败情况的处理,包括错误码 999400004 的特殊处理
- 添加双重错误处理机制,在 startChat 失败后尝试 activeInteractionMode
- 将保持活跃间隔从 20000 毫秒缩短为 10000 毫秒
- 移除重复的 updateUIState 调用
This commit is contained in:
2026-05-07 10:41:12 +08:00
parent 4329aa5eb9
commit 36873764a0

View File

@@ -268,25 +268,46 @@ const eventListeners = {
logger.info('任务已结束,正在自动重新激活...', data);
state.isChatting = false;
state.jobInfo = null;
updateUIState();
if (state.keepAliveActive) {
setTimeout(async () => {
try {
logger.info('正在调用 activeInteractionMode...');
await HwICSUiSdk.activeInteractionMode();
logger.info('自动激活成功');
state.isChatting = true;
updateUIState();
logger.info('正在调用 startChat 重新开始对话...');
const chatResult = await HwICSUiSdk.startChat({
interactionMode: InteractionMode.AUDIO,
wakeupType: WakeupType.VOICE,
preCheckPermissions: false
});
if (chatResult.result) {
logger.info('重新开始对话成功', chatResult);
state.isChatting = true;
updateUIState();
} else {
logger.warn('重新开始对话返回失败', chatResult);
if (chatResult.errorCode === '999400004') {
logger.info('对话已存在,尝试 activeInteractionMode');
await HwICSUiSdk.activeInteractionMode();
state.isChatting = true;
updateUIState();
}
}
} catch (error) {
logger.error('自动激活失败', error);
logger.error('重新激活失败', error);
try {
await HwICSUiSdk.activeInteractionMode();
state.isChatting = true;
updateUIState();
} catch (e) {
logger.error('activeInteractionMode 也失败', e);
}
}
}, 1000);
}, 2000);
}
updateUIState();
}
};
let keepAliveTimer = null;
const KEEP_ALIVE_INTERVAL = 20000;
const KEEP_ALIVE_INTERVAL = 10000;
function startKeepAlive() {
if (keepAliveTimer) return;