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.
215 lines
6.2 KiB
215 lines
6.2 KiB
|
3 months ago
|
// 完整流程调试脚本
|
||
|
|
const WebSocket = require('ws');
|
||
|
|
|
||
|
|
const WS_URL = 'ws://localhost:3003';
|
||
|
|
const TEST_MANAGER_ID = '22';
|
||
|
|
let managerWs = null;
|
||
|
|
let userWs = null;
|
||
|
|
let newConversationId = null;
|
||
|
|
let testUserId = 'test_customer_' + Date.now();
|
||
|
|
|
||
|
|
console.log('=== 启动完整流程调试 ===');
|
||
|
|
console.log(`测试用户ID: ${testUserId}`);
|
||
|
|
|
||
|
|
// 步骤1: 连接客服并认证
|
||
|
|
function connectManager() {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 步骤2: 连接用户并认证
|
||
|
|
function connectUser() {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
userWs = new WebSocket(WS_URL);
|
||
|
|
|
||
|
|
userWs.on('open', () => {
|
||
|
|
console.log('✅ 客户WebSocket连接已建立');
|
||
|
|
|
||
|
|
// 发送认证消息
|
||
|
|
const authMsg = JSON.stringify({
|
||
|
|
type: 'auth',
|
||
|
|
userId: testUserId,
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 步骤3: 用户发送消息创建新会话
|
||
|
|
function userSendMessage() {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
const messageId = 'test_user_' + Date.now();
|
||
|
|
const userMessage = {
|
||
|
|
type: 'chat_message',
|
||
|
|
payload: {
|
||
|
|
messageId: messageId,
|
||
|
|
managerId: TEST_MANAGER_ID,
|
||
|
|
content: '你好,我是测试客户,我想咨询一个问题',
|
||
|
|
contentType: 1
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
console.log('\n📤 客户发送消息:', JSON.stringify(userMessage));
|
||
|
|
userWs.send(JSON.stringify(userMessage));
|
||
|
|
|
||
|
|
// 监听消息发送成功确认
|
||
|
|
const userMessageHandler = (data) => {
|
||
|
|
try {
|
||
|
|
const message = JSON.parse(data.toString());
|
||
|
|
if (message.type === 'message_sent') {
|
||
|
|
console.log('✅ 客户消息发送成功确认');
|
||
|
|
newConversationId = message.payload.conversationId;
|
||
|
|
console.log('📝 新创建的会话ID:', newConversationId);
|
||
|
|
userWs.removeListener('message', userMessageHandler);
|
||
|
|
resolve();
|
||
|
|
}
|
||
|
|
} catch (e) {
|
||
|
|
console.error('❌ 解析用户消息响应失败:', e);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
userWs.addListener('message', userMessageHandler);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 步骤4: 客服使用新会话ID回复消息
|
||
|
|
function managerReplyMessage() {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
if (!newConversationId) {
|
||
|
|
console.error('❌ 没有获取到会话ID');
|
||
|
|
resolve(false);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const messageId = 'test_manager_' + Date.now();
|
||
|
|
const replyMessage = {
|
||
|
|
type: 'chat_message',
|
||
|
|
payload: {
|
||
|
|
messageId: messageId,
|
||
|
|
conversationId: newConversationId,
|
||
|
|
content: '您好,我是客服,请问有什么可以帮助您的?',
|
||
|
|
contentType: 1
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
console.log('\n📤 客服发送回复消息:', JSON.stringify(replyMessage));
|
||
|
|
managerWs.send(JSON.stringify(replyMessage));
|
||
|
|
|
||
|
|
// 监听回复消息的结果
|
||
|
|
const managerMessageHandler = (data) => {
|
||
|
|
try {
|
||
|
|
const message = JSON.parse(data.toString());
|
||
|
|
console.log('📥 客服收到回复结果:', JSON.stringify(message));
|
||
|
|
|
||
|
|
if (message.type === 'error') {
|
||
|
|
console.error('❌ 客服回复失败:', message.message);
|
||
|
|
managerWs.removeListener('message', managerMessageHandler);
|
||
|
|
resolve(false);
|
||
|
|
} else if (message.type === 'message_sent') {
|
||
|
|
console.log('✅ 客服回复发送成功!');
|
||
|
|
managerWs.removeListener('message', managerMessageHandler);
|
||
|
|
resolve(true);
|
||
|
|
}
|
||
|
|
} catch (e) {
|
||
|
|
console.error('❌ 解析客服消息响应失败:', e);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
managerWs.addListener('message', managerMessageHandler);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
// 主函数
|
||
|
|
async function main() {
|
||
|
|
try {
|
||
|
|
// 连接客服
|
||
|
|
await connectManager();
|
||
|
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||
|
|
|
||
|
|
// 连接用户
|
||
|
|
await connectUser();
|
||
|
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
||
|
|
|
||
|
|
// 用户发送消息创建会话
|
||
|
|
await userSendMessage();
|
||
|
|
await new Promise(resolve => setTimeout(resolve, 2000));
|
||
|
|
|
||
|
|
// 客服回复消息
|
||
|
|
const success = await managerReplyMessage();
|
||
|
|
|
||
|
|
if (!success) {
|
||
|
|
console.log('\n🔄 尝试替代格式...');
|
||
|
|
// 尝试不使用payload包装
|
||
|
|
const messageId = 'test_manager_alt_' + Date.now();
|
||
|
|
const alternativeMessage = {
|
||
|
|
type: 'chat_message',
|
||
|
|
messageId: messageId,
|
||
|
|
conversationId: newConversationId,
|
||
|
|
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();
|