Надёжная real-time доставка сообщений в чатах: SSE buffer, Last-Event-ID, polling fallback
This commit is contained in:
@@ -41,7 +41,8 @@ export function registerChatMessageRoutes(router: Router): void {
|
||||
}
|
||||
}
|
||||
|
||||
const messages = await storage.getTaskMessages(taskId, req.organizationId!);
|
||||
const afterId = req.query.afterId ? parseInt(req.query.afterId as string) : undefined;
|
||||
const messages = await storage.getTaskMessages(taskId, req.organizationId!, afterId);
|
||||
res.json({ success: true, messages });
|
||||
} catch (error) {
|
||||
console.error('Get task messages error:', error);
|
||||
@@ -178,8 +179,9 @@ export function registerChatMessageRoutes(router: Router): void {
|
||||
|
||||
if (bot.type === 'ai_assistant') {
|
||||
if (!checkBotAccess(bot, req.user!)) {
|
||||
let denialMessage;
|
||||
try {
|
||||
await storage.createTaskMessage({
|
||||
denialMessage = await storage.createTaskMessage({
|
||||
taskId,
|
||||
formId: task.formId,
|
||||
authorId: null,
|
||||
@@ -193,12 +195,20 @@ export function registerChatMessageRoutes(router: Router): void {
|
||||
} catch (err) {
|
||||
console.error(`[AI-Bot] Failed to post denial message for bot ${bot.id}:`, err);
|
||||
}
|
||||
eventBus.publishEvent({
|
||||
type: 'message_created',
|
||||
data: { taskId },
|
||||
organizationId: req.organizationId,
|
||||
taskId,
|
||||
});
|
||||
if (denialMessage) {
|
||||
eventBus.publishEvent({
|
||||
type: 'message_created',
|
||||
data: {
|
||||
taskId,
|
||||
message: {
|
||||
...denialMessage,
|
||||
bot: bot ? { id: bot.id, name: bot.name, avatarUrl: bot.avatarUrl ?? null } : null,
|
||||
},
|
||||
},
|
||||
organizationId: req.organizationId,
|
||||
taskId,
|
||||
});
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -209,14 +219,8 @@ export function registerChatMessageRoutes(router: Router): void {
|
||||
attachments: createdMessage.attachments || undefined,
|
||||
user: req.user!,
|
||||
organizationId: req.organizationId!,
|
||||
}).then(() => {
|
||||
eventBus.publishEvent({
|
||||
type: 'message_created',
|
||||
data: { taskId },
|
||||
organizationId: req.organizationId,
|
||||
taskId,
|
||||
});
|
||||
}).catch(err => console.error(`[AI-Bot] Error for bot ${bot.name}:`, err));
|
||||
// postBotReply внутри handleAiBotMention сам публикует message_created с полным сообщением
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user