fix(前端): 优化对话保持逻辑并增加错误处理
- 将重新激活逻辑从 activeInteractionMode 改为更可靠的 startChat - 增加对 startChat 失败情况的处理,包括错误码 999400004 的特殊处理 - 添加双重错误处理机制,在 startChat 失败后尝试 activeInteractionMode - 将保持活跃间隔从 20000 毫秒缩短为 10000 毫秒 - 移除重复的 updateUIState 调用
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user