fix(前端): 优化对话保持逻辑并增加错误处理
- 将重新激活逻辑从 activeInteractionMode 改为更可靠的 startChat - 增加对 startChat 失败情况的处理,包括错误码 999400004 的特殊处理 - 添加双重错误处理机制,在 startChat 失败后尝试 activeInteractionMode - 将保持活跃间隔从 20000 毫秒缩短为 10000 毫秒 - 移除重复的 updateUIState 调用
This commit is contained in:
@@ -268,25 +268,46 @@ const eventListeners = {
|
|||||||
logger.info('任务已结束,正在自动重新激活...', data);
|
logger.info('任务已结束,正在自动重新激活...', data);
|
||||||
state.isChatting = false;
|
state.isChatting = false;
|
||||||
state.jobInfo = null;
|
state.jobInfo = null;
|
||||||
|
updateUIState();
|
||||||
if (state.keepAliveActive) {
|
if (state.keepAliveActive) {
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
try {
|
try {
|
||||||
logger.info('正在调用 activeInteractionMode...');
|
logger.info('正在调用 startChat 重新开始对话...');
|
||||||
await HwICSUiSdk.activeInteractionMode();
|
const chatResult = await HwICSUiSdk.startChat({
|
||||||
logger.info('自动激活成功');
|
interactionMode: InteractionMode.AUDIO,
|
||||||
state.isChatting = true;
|
wakeupType: WakeupType.VOICE,
|
||||||
updateUIState();
|
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) {
|
} 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;
|
let keepAliveTimer = null;
|
||||||
const KEEP_ALIVE_INTERVAL = 20000;
|
const KEEP_ALIVE_INTERVAL = 10000;
|
||||||
|
|
||||||
function startKeepAlive() {
|
function startKeepAlive() {
|
||||||
if (keepAliveTimer) return;
|
if (keepAliveTimer) return;
|
||||||
|
|||||||
Reference in New Issue
Block a user