diff --git a/common/js/ai-service.js b/common/js/ai-service.js index 1880d24..3328545 100644 --- a/common/js/ai-service.js +++ b/common/js/ai-service.js @@ -26,6 +26,29 @@ try { console.warn('读取会话ID失败:', e); } +const GUEST_ID_KEY = 'ai_guest_user_id'; + +/** + * 获取用户ID:已登录返回 memberId,未登录生成访客唯一标识并持久化 + */ +function getUserId() { + const memberId = store.state.memberInfo?.id; + if (memberId) return memberId; + + let guestId; + try { + guestId = uni.getStorageSync(GUEST_ID_KEY); + } catch (e) { /* ignore */ } + + if (!guestId) { + guestId = 'guest_' + Date.now() + '_' + Math.random().toString(36).slice(2, 10); + try { + uni.setStorageSync(GUEST_ID_KEY, guestId); + } catch (e) { /* ignore */ } + } + return guestId; +} + // #ifdef MP-WEIXIN // ================================ // WebSocket 长连接管理(微信小程序) @@ -75,7 +98,7 @@ function ensureWebSocketConnected() { // 获取认证参数(独立函数,不使用 this) var _uniacid = uni.getStorageSync('uniacid') || Config.uniacid; var _token = store.state.token || 'test_token'; - var _userId = store.state.memberInfo?.id || 'anonymous'; + var _userId = getUserId(); wsSocketTask.onOpen(function() { wsConnected = true; @@ -217,12 +240,12 @@ export default { const params = { url: '/api/kefu/chat', data: { - user_id: store.state.memberInfo?.id || 'anonymous', + user_id: getUserId(), stream: false, inputs: {}, query: message, response_mode: 'blocking', // 强制 blocking - user: store.state.memberInfo?.id || 'anonymous', + user: getUserId(), conversation_id: this.getConversationId() || '', ...getDomainParams() }, @@ -283,7 +306,7 @@ export default { action: 'chat', uniacid: this.getUniacid(), query: message, - user_id: store.state.memberInfo?.id || 'anonymous', + user_id: getUserId(), conversation_id: this.getConversationId() || '', ...getDomainParams() }) @@ -310,7 +333,7 @@ export default { inputs: {}, query: message, response_mode: 'streaming', - user_id: store.state.memberInfo?.id || 'anonymous', + user_id: getUserId(), conversation_id: this.getConversationId() || '', ...getDomainParams() }) @@ -462,8 +485,8 @@ export default { data: { uniacid: this.getUniacid(), token: store.state.token || 'test_token', - user_id: store.state.memberInfo?.id || 'anonymous', - member_id: store.state.memberInfo?.id || 'anonymous', + user_id: getUserId(), + member_id: getUserId(), ...getDomainParams() }, header: { @@ -533,10 +556,10 @@ export default { const requestData = { uniacid: params.uniacid || this.getUniacid(), conversation_id: params.conversation_id, - user_id: params.user_id || store.state.memberInfo?.id || 'anonymous', + user_id: params.user_id || getUserId(), limit: params.limit || 20, offset: params.offset || 0, - member_id: params.member_id || store.state.memberInfo?.id || 'anonymous', + member_id: params.member_id || getUserId(), token: params.token || '', ...getDomainParams() }; @@ -579,8 +602,8 @@ export default { } const paramsObj = { uniacid: this.getUniacid(), - user_id: store.state.memberInfo?.id || 'anonymous', - member_id: store.state.memberInfo?.id || 'anonymous', + user_id: getUserId(), + member_id: getUserId(), token: store.state.token || 'test_token', query: message, conversation_id: conversationId || '',