fix(bot): issue #142 — language selection on first contact (Products/message in sleep mode)
- 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
This commit is contained in:
12
src/index.js
12
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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user