From 47096dd0de601448a2c7f9ba1d5ac724f3bd7b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Fri, 8 May 2026 18:05:58 +0900 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=20Telegram=20bridge=20runtime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/server.js | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/backend/src/server.js b/backend/src/server.js index 124bbf7..1b06e03 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -14,6 +14,11 @@ import { touchVisitor, updateTelegramSettings } from './db.js'; +import { + getTelegramBridgeStatus, + notifyOperatorsAboutVisitorMessage, + startTelegramBridge +} from './telegram.js'; migrate(); @@ -80,14 +85,15 @@ function validateSocks5Settings(settings) { return { ok: true, status: 'configured', - message: `SOCKS5 включен: ${proxy.host}:${proxy.port}. Полная проверка Telegram будет доступна после подключения bot bridge.` + message: `SOCKS5 включен: ${proxy.host}:${proxy.port}. Telegram bridge сможет использовать этот прокси.` }; } app.get('/health', async () => ({ ok: true, service: 'wschat-backend', - env: config.app.env + env: config.app.env, + telegram: getTelegramBridgeStatus() })); app.get('/api/config/public', async () => ({ @@ -97,7 +103,8 @@ app.get('/api/config/public', async () => ({ app.get('/api/admin/stats', async () => ({ ok: true, - stats: getStats() + stats: getStats(), + telegram: getTelegramBridgeStatus() })); app.get('/api/admin/messages', async (request) => { @@ -110,7 +117,8 @@ app.get('/api/admin/messages', async (request) => { app.get('/api/admin/telegram/settings', async () => ({ ok: true, - settings: getTelegramSettings() + settings: getTelegramSettings(), + bridge: getTelegramBridgeStatus() })); app.post('/api/admin/telegram/settings', async (request, reply) => { @@ -119,7 +127,8 @@ app.post('/api/admin/telegram/settings', async (request, reply) => { return { ok: true, - settings + settings, + bridge: getTelegramBridgeStatus() }; } catch (error) { reply.code(400); @@ -136,7 +145,8 @@ app.post('/api/admin/telegram/test-proxy', async () => { return { ...result, - settings: getTelegramSettings() + settings: getTelegramSettings(), + bridge: getTelegramBridgeStatus() }; }); @@ -178,13 +188,22 @@ app.post('/api/widget/message', async (request) => { body: messageBody }); + await notifyOperatorsAboutVisitorMessage({ + site, + visitor, + conversation, + message, + logger: request.log + }); + request.log.info({ siteId: site.id, visitorId: visitor.id, conversationId: conversation.id, messageId: message.id }, 'Widget message saved'); return { ok: true, status: 'saved', conversationId: conversation.id, - messageId: message.id + messageId: message.id, + telegram: getTelegramBridgeStatus() }; }); @@ -199,6 +218,8 @@ app.get('/ws', { websocket: true }, (connection, request) => { connection.send(JSON.stringify({ type: 'connected', visitorId })); }); +await startTelegramBridge({ logger: app.log }); + try { await app.listen({ host: config.app.host, port: config.app.port }); } catch (error) {