Files
autoAiWorkSys/api/middleware/schedule/handlers/chatHandler.js
张成 1a011bcc01 1
2026-02-27 17:33:39 +08:00

90 lines
2.9 KiB
JavaScript

const BaseHandler = require('./baseHandler');
const ConfigManager = require('../services/configManager');
const command = require('../core/command');
const config = require('../infrastructure/config');
/**
* 自动沟通处理器
* 负责自动回复HR消息
*/
class ChatHandler extends BaseHandler {
/**
* 处理自动沟通任务
* @param {object} task - 任务对象
* @returns {Promise<object>} 执行结果
*/
async handle(task) {
return await this.execute(task, async () => {
return await this.doChat(task);
}, {
checkAuth: true,
checkOnline: true,
recordDeviceMetrics: true
});
}
/**
* 执行沟通逻辑
*/
async doChat(task) {
const { sn_code, taskParams } = task;
const { platform = 'boss' } = taskParams;
console.log(`[自动沟通] 开始 - 设备: ${sn_code}`);
// 1. 获取账户配置
const accountConfig = await this.getAccountConfig(sn_code, ['platform_type', 'chat_strategy']);
if (!accountConfig) {
return {
chatCount: 0,
message: '未找到账户配置'
};
}
// 2. 解析沟通策略配置
const chatStrategy = ConfigManager.parseChatStrategy(accountConfig.chat_strategy);
// 3. 检查沟通时间范围
const timeRange = ConfigManager.getTimeRange(chatStrategy);
if (timeRange) {
const timeRangeValidator = require('../services/timeRangeValidator');
const timeCheck = timeRangeValidator.checkTimeRange(timeRange);
if (!timeCheck.allowed) {
return {
chatCount: 0,
message: timeCheck.reason
};
}
}
// 4. 创建自动沟通 AI 指令(内部会先获取列表,再获取详情并自动回复)
const chatCommand = {
command_type: 'auto_chat_ai',
command_name: 'auto_chat_ai',
command_params: {
platform: platform || accountConfig.platform_type || 'boss',
pageCount: chatStrategy.page_count || 3
},
priority: config.getTaskPriority('auto_chat') || 6
};
// 5. 执行指令(任务队列会保证该设备内串行执行,不并发下发指令)
const exec_result = await command.executeCommands(task.id, [chatCommand], this.mqttClient);
const first = exec_result && Array.isArray(exec_result.results) && exec_result.results[0]
? exec_result.results[0].result || {}
: {};
console.log(`[自动沟通] 完成 - 设备: ${sn_code}`);
return {
chatCount: first.replied_count || 0,
message: first.message || '自动沟通完成',
detail: first
};
}
}
module.exports = ChatHandler;