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 UserService from './services/userService.js';
|
||||||
import { resetUserContext } from './utils/messageUtils.js';
|
import { resetUserContext } from './utils/messageUtils.js';
|
||||||
import { tryAcquireLock, pruneLocks } from './utils/callbackLock.js';
|
import { tryAcquireLock, pruneLocks } from './utils/callbackLock.js';
|
||||||
|
import { tForUser, LANGUAGE_NAMES, AVAILABLE_LANGUAGES } from './i18n/index.js';
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
pruneLocks();
|
pruneLocks();
|
||||||
@@ -65,6 +66,17 @@ if (bot && botAvailable) {
|
|||||||
// Если сообщение не обработано роутером и чатбот включён — отправить в ИИ
|
// Если сообщение не обработано роутером и чатбот включён — отправить в ИИ
|
||||||
if (!dispatched && msg.text && await chatbotService.isChatbotEnabled()) {
|
if (!dispatched && msg.text && await chatbotService.isChatbotEnabled()) {
|
||||||
const user = msg.__user || await UserService.getUserByTelegramId(msg.from.id);
|
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 lang = user?.language || 'en';
|
||||||
const result = await chatbotService.sendToChatbot({
|
const result = await chatbotService.sendToChatbot({
|
||||||
sessionId: msg.from.id,
|
sessionId: msg.from.id,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { resetUserContext } from '../utils/messageUtils.js';
|
|||||||
import chatbotService from '../services/chatbotService.js';
|
import chatbotService from '../services/chatbotService.js';
|
||||||
import leadService from '../services/leadService.js';
|
import leadService from '../services/leadService.js';
|
||||||
import UserService from '../services/userService.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 userHandler from '../handlers/userHandlers/userHandler.js';
|
||||||
import userPurchaseHandler from '../handlers/userHandlers/userPurchaseHandler.js';
|
import userPurchaseHandler from '../handlers/userHandlers/userPurchaseHandler.js';
|
||||||
@@ -89,6 +90,17 @@ export function registerRoutes() {
|
|||||||
// Магазин на паузе — сразу переключаем на ИИ-диалог, убираем меню
|
// Магазин на паузе — сразу переключаем на ИИ-диалог, убираем меню
|
||||||
if (await chatbotService.isSleepMode()) {
|
if (await chatbotService.isSleepMode()) {
|
||||||
const user = msg.__user || await UserService.getUserByTelegramId(msg.from.id);
|
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 lang = user?.language || 'en';
|
||||||
const result = await chatbotService.sendToChatbot({
|
const result = await chatbotService.sendToChatbot({
|
||||||
sessionId: msg.from.id,
|
sessionId: msg.from.id,
|
||||||
|
|||||||
Reference in New Issue
Block a user