From 3b9aa5d541ca5448a3166d62bd16d1e636edadf8 Mon Sep 17 00:00:00 2001 From: NW Date: Sat, 8 Aug 2026 21:07:33 +0100 Subject: [PATCH] =?UTF-8?q?fix(bot):=20issue=20#142=20=E2=80=94=20language?= =?UTF-8?q?=20selection=20on=20first=20contact=20(Products/message=20in=20?= =?UTF-8?q?sleep=20mode)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - keyboard.products in sleep mode: language_set=0 -> language keyboard first, then AI in chosen language - message handler in sleep mode: same language_set check before AI - AI context verified: chat_sessions history (max 20) + LANGUAGE_INSTRUCTIONS[lang] in system prompt - 30 tests pass --- src/index.js | 12 ++++++++++++ src/router/routes.js | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/index.js b/src/index.js index edf464e..6f808f1 100644 --- a/src/index.js +++ b/src/index.js @@ -15,6 +15,7 @@ import leadService from './services/leadService.js'; import UserService from './services/userService.js'; import { resetUserContext } from './utils/messageUtils.js'; import { tryAcquireLock, pruneLocks } from './utils/callbackLock.js'; +import { tForUser, LANGUAGE_NAMES, AVAILABLE_LANGUAGES } from './i18n/index.js'; setInterval(() => { pruneLocks(); @@ -65,6 +66,17 @@ if (bot && botAvailable) { // Если сообщение не обработано роутером и чатбот включён — отправить в ИИ if (!dispatched && msg.text && await chatbotService.isChatbotEnabled()) { const user = msg.__user || await UserService.getUserByTelegramId(msg.from.id); + // Первый контакт: сначала выбор языка + if (!user?.language_set) { + const keyboard = { + inline_keyboard: AVAILABLE_LANGUAGES.map(code => [{ + text: LANGUAGE_NAMES[code], + callback_data: `set_language_${code}` + }]) + }; + await bot.sendMessage(msg.chat.id, tForUser('en')('bot.language_select'), { reply_markup: keyboard }); + return; + } const lang = user?.language || 'en'; const result = await chatbotService.sendToChatbot({ sessionId: msg.from.id, diff --git a/src/router/routes.js b/src/router/routes.js index 87a1e3c..68e36db 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -7,6 +7,7 @@ import { resetUserContext } from '../utils/messageUtils.js'; import chatbotService from '../services/chatbotService.js'; import leadService from '../services/leadService.js'; import UserService from '../services/userService.js'; +import { tForUser, LANGUAGE_NAMES, AVAILABLE_LANGUAGES } from '../i18n/index.js'; import userHandler from '../handlers/userHandlers/userHandler.js'; import userPurchaseHandler from '../handlers/userHandlers/userPurchaseHandler.js'; @@ -89,6 +90,17 @@ export function registerRoutes() { // Магазин на паузе — сразу переключаем на ИИ-диалог, убираем меню if (await chatbotService.isSleepMode()) { const user = msg.__user || await UserService.getUserByTelegramId(msg.from.id); + // Первый контакт: сначала выбор языка + if (!user?.language_set) { + const keyboard = { + inline_keyboard: AVAILABLE_LANGUAGES.map(code => [{ + text: LANGUAGE_NAMES[code], + callback_data: `set_language_${code}` + }]) + }; + await bot.sendMessage(msg.chat.id, tForUser('en')('bot.language_select'), { reply_markup: keyboard }); + return; + } const lang = user?.language || 'en'; const result = await chatbotService.sendToChatbot({ sessionId: msg.from.id,