You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
5.2 KiB

// 详细调试脚本,带更多日志记录
const WebSocket = require('ws');
const WS_URL = 'ws://localhost:3003';
const TEST_MANAGER_ID = '22';
const TEST_CONVERSATION_ID = '4fa4b92f-df20-40ae-94b9-f906753a4cfd'; // 使用已知的会话ID
let managerWs = null;
let userWs = null;
console.log('=== 启动详细调试 ===');
console.log(`测试会话ID: ${TEST_CONVERSATION_ID}`);
// 连接客服WebSocket
function connectManager() {
return new Promise((resolve, reject) => {
managerWs = new WebSocket(WS_URL);
managerWs.on('open', () => {
console.log('✅ 客服WebSocket连接已建立');
// 发送认证消息
const authMsg = JSON.stringify({
type: 'auth',
managerId: TEST_MANAGER_ID,
userType: 'manager'
});
console.log('📤 客服发送认证消息:', authMsg);
managerWs.send(authMsg);
});
managerWs.on('message', (data) => {
try {
const message = JSON.parse(data.toString());
console.log('📥 客服收到消息:', JSON.stringify(message));
if (message.type === 'auth_success') {
console.log('✅ 客服认证成功');
resolve();
}
} catch (e) {
console.error('❌ 客服解析消息失败:', e);
}
});
managerWs.on('error', (error) => {
console.error('❌ 客服WebSocket错误:', error);
reject(error);
});
managerWs.on('close', () => {
console.log('❌ 客服WebSocket连接已关闭');
});
});
}
// 连接用户WebSocket
function connectUser() {
return new Promise((resolve, reject) => {
const userId = 'test_customer_' + Date.now();
userWs = new WebSocket(WS_URL);
userWs.on('open', () => {
console.log('✅ 客户WebSocket连接已建立');
// 发送认证消息
const authMsg = JSON.stringify({
type: 'auth',
userId: userId,
userType: 'user'
});
console.log('📤 客户发送认证消息:', authMsg);
userWs.send(authMsg);
});
userWs.on('message', (data) => {
try {
const message = JSON.parse(data.toString());
console.log('📥 客户收到消息:', JSON.stringify(message));
if (message.type === 'auth_success') {
console.log('✅ 客户认证成功');
resolve();
}
} catch (e) {
console.error('❌ 客户解析消息失败:', e);
}
});
userWs.on('error', (error) => {
console.error('❌ 客户WebSocket错误:', error);
reject(error);
});
userWs.on('close', () => {
console.log('❌ 客户WebSocket连接已关闭');
});
});
}
// 发送测试消息
function sendTestMessage() {
return new Promise((resolve) => {
console.log('\n🔄 客服发送测试消息...');
const messageId = 'test_manager_' + Date.now();
const testMessage = {
type: 'chat_message',
payload: {
messageId: messageId,
conversationId: TEST_CONVERSATION_ID,
content: '测试消息:这是客服发送的测试消息',
contentType: 1
}
};
console.log('📤 客服发送消息:', JSON.stringify(testMessage));
managerWs.send(JSON.stringify(testMessage));
// 监听错误响应
const originalOnMessage = managerWs.onmessage;
managerWs.onmessage = (event) => {
originalOnMessage(event);
try {
const message = JSON.parse(event.data.toString());
if (message.type === 'error') {
console.error('❌ 接收到错误消息:', message.message);
resolve(false);
} else if (message.type === 'message_sent') {
console.log('✅ 消息发送成功确认');
resolve(true);
}
} catch (e) {
console.error('❌ 解析响应消息失败:', e);
}
};
// 5秒后超时
setTimeout(() => {
console.log('⌛ 消息发送超时');
resolve(false);
}, 5000);
});
}
// 主函数
async function main() {
try {
// 连接客服
await connectManager();
await new Promise(resolve => setTimeout(resolve, 1000));
// 连接用户(可选)
// await connectUser();
// await new Promise(resolve => setTimeout(resolve, 1000));
// 发送测试消息
const success = await sendTestMessage();
if (!success) {
console.log('\n🔄 尝试另一种格式...');
// 尝试不使用payload包装
const messageId = 'test_manager_alt_' + Date.now();
const alternativeMessage = {
type: 'chat_message',
messageId: messageId,
conversationId: TEST_CONVERSATION_ID,
content: '测试替代格式:不使用payload包装',
contentType: 1
};
console.log('📤 客服发送替代格式消息:', JSON.stringify(alternativeMessage));
managerWs.send(JSON.stringify(alternativeMessage));
}
// 等待5秒后关闭连接
setTimeout(() => {
console.log('\n=== 调试结束 ===');
if (managerWs) managerWs.close();
if (userWs) userWs.close();
}, 5000);
} catch (error) {
console.error('❌ 调试过程中出错:', error);
if (managerWs) managerWs.close();
if (userWs) userWs.close();
}
}
// 启动调试
main();