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.
193 lines
6.7 KiB
193 lines
6.7 KiB
const WebSocket = require('ws');
|
|
|
|
// 测试配置
|
|
const config = {
|
|
wsUrl: 'ws://localhost:3003',
|
|
managerCredentials: {
|
|
managerId: 22, // 使用数字格式的客服ID
|
|
userType: 'manager'
|
|
},
|
|
testTimeout: 10000, // 10秒超时
|
|
messageTimeout: 5000 // 5秒消息等待超时
|
|
};
|
|
|
|
// 简化的测试函数
|
|
async function testConversationListFormat() {
|
|
console.log('开始测试客服会话列表查询(正确消息格式)');
|
|
console.log(`连接到WebSocket服务器: ${config.wsUrl}`);
|
|
|
|
return new Promise((resolve, reject) => {
|
|
let ws;
|
|
let connected = false;
|
|
let authenticated = false;
|
|
let listMessageSent = false;
|
|
|
|
// 超时处理
|
|
const timeoutId = setTimeout(() => {
|
|
console.error('测试超时!');
|
|
if (ws && connected) {
|
|
ws.close();
|
|
}
|
|
reject(new Error('测试超时:未在规定时间内完成所有操作'));
|
|
}, config.testTimeout);
|
|
|
|
try {
|
|
// 创建WebSocket连接
|
|
ws = new WebSocket(config.wsUrl);
|
|
|
|
// 连接打开事件
|
|
ws.on('open', () => {
|
|
console.log('✓ WebSocket连接已建立');
|
|
connected = true;
|
|
|
|
// 发送认证请求
|
|
const authData = {
|
|
type: 'auth',
|
|
managerId: config.managerCredentials.managerId,
|
|
userType: config.managerCredentials.userType
|
|
};
|
|
console.log(`发送客服认证请求:`, authData);
|
|
ws.send(JSON.stringify(authData));
|
|
});
|
|
|
|
// 接收消息事件
|
|
ws.on('message', (data) => {
|
|
try {
|
|
const messageStr = data.toString('utf8');
|
|
console.log('收到原始消息数据:', messageStr);
|
|
|
|
const message = JSON.parse(messageStr);
|
|
console.log('解析后的消息:', message);
|
|
|
|
// 处理认证响应
|
|
if (message.type === 'auth_success') {
|
|
console.log('✓ 客服认证成功');
|
|
authenticated = true;
|
|
|
|
// 只使用'list'操作格式查询会话列表
|
|
setTimeout(() => {
|
|
if (!listMessageSent) {
|
|
listMessageSent = true;
|
|
const listRequest = {
|
|
action: 'list'
|
|
};
|
|
console.log(`发送会话列表查询请求 (action: 'list'):`, listRequest);
|
|
ws.send(JSON.stringify(listRequest));
|
|
|
|
// 为'list'请求设置专用超时
|
|
setTimeout(() => {
|
|
console.log('未收到会话列表响应,尝试直接发送消息类型为"get_conversations"的请求');
|
|
const directRequest = {
|
|
type: 'get_conversations'
|
|
};
|
|
console.log(`发送直接请求 (type: 'get_conversations'):`, directRequest);
|
|
ws.send(JSON.stringify(directRequest));
|
|
}, config.messageTimeout);
|
|
}
|
|
}, 1000);
|
|
|
|
} else if (message.type === 'session_list' && message.data) {
|
|
// 处理'list'操作的响应
|
|
console.log('✓ 收到会话列表响应 (session_list格式)');
|
|
console.log(`会话列表包含 ${message.data.length} 个会话`);
|
|
|
|
// 清理并完成测试
|
|
clearTimeout(timeoutId);
|
|
setTimeout(() => {
|
|
ws.close();
|
|
resolve({
|
|
success: true,
|
|
responseType: 'session_list',
|
|
data: message.data
|
|
});
|
|
}, 1000);
|
|
|
|
} else if (message.type === 'conversations_list' && message.payload && message.payload.conversations) {
|
|
// 处理'get_conversations'操作的响应
|
|
console.log('✓ 收到会话列表响应 (conversations_list格式)');
|
|
console.log(`会话列表包含 ${message.payload.conversations.length} 个会话`);
|
|
|
|
// 清理并完成测试
|
|
clearTimeout(timeoutId);
|
|
setTimeout(() => {
|
|
ws.close();
|
|
resolve({
|
|
success: true,
|
|
responseType: 'conversations_list',
|
|
data: message.payload.conversations
|
|
});
|
|
}, 1000);
|
|
|
|
} else if (message.type === 'heartbeat') {
|
|
// 记录心跳消息
|
|
console.log('收到心跳消息');
|
|
|
|
} else if (message.type === 'error') {
|
|
// 处理错误
|
|
console.error('✗ 收到错误消息:', message.message);
|
|
|
|
} else {
|
|
console.log('收到未预期的消息类型:', message.type);
|
|
}
|
|
|
|
} catch (parseError) {
|
|
console.error('解析消息失败:', parseError);
|
|
console.log('原始消息数据:', data.toString('utf8'));
|
|
}
|
|
});
|
|
|
|
// 错误事件处理
|
|
ws.on('error', (error) => {
|
|
console.error('WebSocket错误:', error);
|
|
});
|
|
|
|
// 连接关闭事件
|
|
ws.on('close', (code, reason) => {
|
|
console.log(`WebSocket连接已关闭: 代码=${code}, 原因=${reason}`);
|
|
clearTimeout(timeoutId);
|
|
// 即使连接关闭,也尝试完成测试
|
|
resolve({ success: false, message: '连接已关闭但未收到会话列表' });
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('测试初始化失败:', error);
|
|
clearTimeout(timeoutId);
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
// 运行测试
|
|
testConversationListFormat()
|
|
.then(result => {
|
|
console.log('\n=== 测试结果 ===');
|
|
if (result.success) {
|
|
console.log('测试成功!');
|
|
console.log(`响应类型: ${result.responseType}`);
|
|
console.log(`获取到 ${result.data.length} 个会话`);
|
|
|
|
if (result.data.length > 0) {
|
|
console.log('=== 会话详情(前3个)===');
|
|
result.data.slice(0, 3).forEach((conv, index) => {
|
|
console.log(`\n会话 ${index + 1}:`);
|
|
console.log(` 会话ID: ${conv.conversation_id || '未知'}`);
|
|
console.log(` 用户ID: ${conv.user_id || '未知'}`);
|
|
console.log(` 客服ID: ${conv.manager_id || '未知'}`);
|
|
console.log(` 最后消息: ${conv.last_message || '无'}`);
|
|
console.log(` 未读计数: ${conv.unread_count || '未知'}`);
|
|
console.log(` 用户在线: ${conv.user_online ? '是' : '否'}`);
|
|
console.log(` 客服在线: ${conv.cs_online ? '是' : '否'}`);
|
|
});
|
|
}
|
|
} else {
|
|
console.log('测试未完全成功,但完成了连接和认证');
|
|
console.log('消息:', result.message);
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('\n=== 测试执行失败 ===');
|
|
console.error('错误:', error.message);
|
|
})
|
|
.finally(() => {
|
|
console.log('\n测试完成!');
|
|
});
|
|
|