chore:微信小程序可以正常对话了
This commit is contained in:
@@ -65,18 +65,15 @@ export default {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const socketTask = wx.connectSocket({
|
const socketTask = wx.connectSocket({
|
||||||
url: 'wss://dev.aigc-quickapp.com/ws/aikefu',
|
url: 'wss://dev.aigc-quickapp.com/ws/aikefu',
|
||||||
header: {
|
header: {}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let content = '';
|
let content = '';
|
||||||
let conversationId = '';
|
let conversationId = '';
|
||||||
let isAuthenticated = false;
|
let isAuthenticated = false;
|
||||||
|
|
||||||
// 连接成功
|
|
||||||
socketTask.onOpen(() => {
|
socketTask.onOpen(() => {
|
||||||
console.log('WebSocket 连接成功,开始认证...');
|
console.log('WebSocket 连接成功,开始认证...');
|
||||||
// 第一步:发送 auth 认证
|
|
||||||
socketTask.send({
|
socketTask.send({
|
||||||
data: JSON.stringify({
|
data: JSON.stringify({
|
||||||
action: 'auth',
|
action: 'auth',
|
||||||
@@ -87,13 +84,11 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 接收消息
|
|
||||||
socketTask.onMessage((res) => {
|
socketTask.onMessage((res) => {
|
||||||
try {
|
try {
|
||||||
const data = JSON.parse(res.data);
|
const data = JSON.parse(res.data);
|
||||||
console.log('收到 WebSocket 消息:', data);
|
console.log('收到 WebSocket 消息:', data);
|
||||||
|
|
||||||
// 处理认证响应
|
|
||||||
if (data.type === 'auth_success') {
|
if (data.type === 'auth_success') {
|
||||||
console.log('认证成功,发送聊天消息...');
|
console.log('认证成功,发送聊天消息...');
|
||||||
isAuthenticated = true;
|
isAuthenticated = true;
|
||||||
@@ -113,13 +108,16 @@ export default {
|
|||||||
if (onComplete) onComplete({ error: errorMsg });
|
if (onComplete) onComplete({ error: errorMsg });
|
||||||
socketTask.close();
|
socketTask.close();
|
||||||
}
|
}
|
||||||
// 处理聊天流式响应
|
|
||||||
else if (data.action === 'chat_response') {
|
// 处理流式消息块
|
||||||
if (data.type === 'chunk') {
|
else if (data.type === 'message' || data.event === 'message') {
|
||||||
const text = data.content || '';
|
const text = data.answer || data.content || data.text || '';
|
||||||
content += text;
|
content += text;
|
||||||
if (onChunk) onChunk(text);
|
if (onChunk) onChunk(text);
|
||||||
} else if (data.type === 'end') {
|
}
|
||||||
|
|
||||||
|
// 处理流结束
|
||||||
|
else if (data.event === 'message_end' || data.type === 'message_end') {
|
||||||
conversationId = data.conversation_id || '';
|
conversationId = data.conversation_id || '';
|
||||||
if (conversationId) {
|
if (conversationId) {
|
||||||
this.setConversationId(conversationId);
|
this.setConversationId(conversationId);
|
||||||
@@ -130,13 +128,17 @@ export default {
|
|||||||
resolve({ content, conversation_id: conversationId });
|
resolve({ content, conversation_id: conversationId });
|
||||||
socketTask.close();
|
socketTask.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 可选:处理 done
|
||||||
|
else if (data.type === 'done') {
|
||||||
|
console.log('对话完成:', data);
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('WebSocket 消息解析失败:', e, '原始数据:', res.data);
|
console.error('WebSocket 消息解析失败:', e, '原始数据:', res.data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 连接错误
|
|
||||||
socketTask.onError((err) => {
|
socketTask.onError((err) => {
|
||||||
const errorMsg = 'WebSocket 连接失败';
|
const errorMsg = 'WebSocket 连接失败';
|
||||||
console.error(errorMsg, err);
|
console.error(errorMsg, err);
|
||||||
@@ -144,10 +146,10 @@ export default {
|
|||||||
if (onComplete) onComplete({ error: errorMsg });
|
if (onComplete) onComplete({ error: errorMsg });
|
||||||
});
|
});
|
||||||
|
|
||||||
// 连接关闭
|
|
||||||
socketTask.onClose(() => {
|
socketTask.onClose(() => {
|
||||||
console.log('WebSocket 连接已关闭');
|
console.log('WebSocket 连接已关闭');
|
||||||
});
|
});
|
||||||
|
|
||||||
const timeout = setTimeout(() => {
|
const timeout = setTimeout(() => {
|
||||||
if (!isAuthenticated || content === '') {
|
if (!isAuthenticated || content === '') {
|
||||||
console.warn('WebSocket 超时,强制关闭');
|
console.warn('WebSocket 超时,强制关闭');
|
||||||
|
|||||||
Reference in New Issue
Block a user