| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- const assert = require('assert');
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const { responseMonitor, isStaffMessage } = require('../mcp/src/dashboard/response-monitor-service');
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'qiwei-response-monitor-'));
- const groupsDir = path.join(root, 'outputs', 'groups');
- const messagesDir = path.join(root, 'outputs', 'messages');
- fs.mkdirSync(groupsDir, { recursive: true });
- fs.mkdirSync(messagesDir, { recursive: true });
- fs.writeFileSync(path.join(groupsDir, 'confirmed-mapping.json'), JSON.stringify({
- 'room-1': { roomName: '重点客户群' },
- 'room-2': { roomName: '待同步客户群' },
- }), 'utf8');
- fs.writeFileSync(path.join(groupsDir, 'rooms-latest.json'), JSON.stringify([
- { roomId: 'room-1', roomName: '重点客户群' },
- ]), 'utf8');
- fs.writeFileSync(path.join(messagesDir, 'room-room-1-2026-07-20T10-00-00.json'), JSON.stringify([
- { msgId: 'group-1', senderId: 'customer-1', senderName: '客户甲', content: '麻烦尽快回复', timestamp: '2026-07-20T08:00:00.000Z' },
- ]), 'utf8');
- const result = responseMonitor({
- projectRoot: root,
- now: Date.parse('2026-07-20T10:00:00.000Z'),
- warningMinutes: 15,
- urgentMinutes: 60,
- selfUserIds: ['staff-1'],
- selfNames: ['客服小夏'],
- conversations: [
- {
- id: 'conversation-1',
- contactId: 'customer-1',
- displayName: '王刚',
- messages: [{ role: 'customer', content: '在吗', timestamp: '2026-07-20T09:40:00.000Z' }],
- },
- {
- id: 'conversation-2',
- contactId: 'customer-2',
- displayName: '已回复客户',
- messages: [
- { role: 'customer', content: '你好', timestamp: '2026-07-20T09:20:00.000Z' },
- { role: 'human', content: '您好', timestamp: '2026-07-20T09:22:00.000Z' },
- ],
- },
- {
- id: 'conversation-3',
- contactId: 'customer-3',
- displayName: '无需回复客户',
- handledMessageId: 'ack-1',
- messages: [{ id: 'ack-1', role: 'customer', content: '收到', timestamp: '2026-07-20T09:00:00.000Z' }],
- },
- ],
- });
- assert.strictEqual(result.summary.monitoredCustomers, 3);
- assert.strictEqual(result.summary.monitoredGroups, 0);
- assert.strictEqual(result.summary.overdue, 1);
- assert.strictEqual(result.summary.urgent, 0);
- assert.strictEqual(result.summary.warning, 1);
- assert.strictEqual(result.summary.awaitingSync, 0);
- assert.strictEqual(result.reminders[0].kind, 'customer');
- assert.strictEqual(result.reminders[0].conversationId, 'conversation-1');
- assert.strictEqual(result.scope.customers[1].status, 'replied');
- assert.strictEqual(result.scope.customers[2].status, 'no_reply_needed');
- assert.strictEqual(result.scope.customers[2].waitingMinutes, 0);
- assert.deepStrictEqual(result.scope.groups, []);
- assert.strictEqual(isStaffMessage({ senderId: 'staff-1' }, ['staff-1'], []), true);
- assert.strictEqual(isStaffMessage({ senderName: '客服小夏' }, [], ['客服小夏']), true);
- const repliedResult = responseMonitor({
- projectRoot: root,
- now: Date.parse('2026-07-20T10:00:00.000Z'),
- warningMinutes: 15,
- urgentMinutes: 60,
- selfUserIds: ['staff-1'],
- selfNames: ['客服小夏'],
- conversations: [],
- });
- assert.deepStrictEqual(repliedResult.scope.groups, []);
- assert.strictEqual(repliedResult.summary.overdue, 0);
- fs.rmSync(root, { recursive: true, force: true });
- console.log(JSON.stringify({
- status: 'ok',
- checks: 16,
- monitoredCustomers: result.summary.monitoredCustomers,
- monitoredGroups: result.summary.monitoredGroups,
- overdue: result.summary.overdue,
- }, null, 2));
|