From 31adf7e7b3b9c2b7ae35a9d8c9985ab9ead166a3 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Thu, 18 Sep 2025 19:00:35 +0300 Subject: [PATCH] Update Russian localization and enhance contact addition flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Changed terminology from "клиент" to "пользователь" for consistency in user interactions. - Updated messages to clarify user instructions for adding contacts and handling phone numbers. - Added validation to prevent users from adding their own phone number as a contact. - Improved conversation prompts for better user experience during contact addition. --- apps/bot/locales/ru.ftl | 18 ++++--- apps/bot/src/bot/conversations/add-contact.ts | 47 ++++++++++++++----- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/apps/bot/locales/ru.ftl b/apps/bot/locales/ru.ftl index 9b8a0b8..a0923a1 100644 --- a/apps/bot/locales/ru.ftl +++ b/apps/bot/locales/ru.ftl @@ -25,7 +25,7 @@ description = start = .description = Запуск бота addcontact = - .description = Добавить контакт клиента + .description = Добавить контакт пользователя sharebot = .description = Поделиться ботом subscribe = @@ -36,7 +36,7 @@ help = .description = Список команд и поддержка commands-list = 📋 Доступные команды: - • /addcontact — добавить контакт клиента + • /addcontact — добавить контакт пользователя • /sharebot — поделиться ботом • /subscribe — приобрести Pro доступ • /pro — информация о вашем Pro доступе @@ -72,15 +72,18 @@ msg-already-registered = ✅ Вы уже зарегистрированы в системе Для смены номера телефона обратитесь в поддержку (Контакты в профиле бота) -msg-invalid-phone = ❌ Некорректный номер телефона +msg-invalid-phone = ❌ Некорректный номер телефона. Пример корректного номера: +79999999999 # Сообщения о контактах -msg-send-client-contact = 👤 Отправьте контакт клиента, которого вы хотите добавить. -msg-send-contact = Пожалуйста, отправьте контакт клиента через кнопку Telegram +msg-send-client-contact = 👤 Отправьте контакт пользователя, которого вы хотите добавить. +msg-send-client-contact-or-phone = 👤 Отправьте контакт пользователя или введите его номер телефона в сообщении +msg-send-contact = Пожалуйста, отправьте контакт пользователя через кнопку Telegram +msg-send-client-name = ✍️ Введите имя пользователя одним сообщением +msg-invalid-name = ❌ Некорректное имя. Попробуйте еще раз msg-contact-added = - ✅ Добавили { $name } в список ваших клиентов + ✅ Добавили { $name } в список ваших контактов - Пригласите клиента в приложение, чтобы вы могли добавлять с ним записи + Пригласите пользователя в приложение, чтобы вы могли добавлять с ним записи msg-contact-forward = Перешлите пользователю следующее сообщение, чтобы он мог начать пользоваться ботом ⬇️ # Сообщения для шаринга @@ -101,6 +104,7 @@ err-with-details = ❌ Произошла ошибка { $error } err-limit-exceeded = 🚫 Слишком много запросов! Подождите немного err-missing-telegram-id = ❌ Telegram ID не найден +err-cannot-add-self = ❌ Нельзя добавить свой номер телефона как контакт # Сообщения о доступе diff --git a/apps/bot/src/bot/conversations/add-contact.ts b/apps/bot/src/bot/conversations/add-contact.ts index d931c3e..d90000d 100644 --- a/apps/bot/src/bot/conversations/add-contact.ts +++ b/apps/bot/src/bot/conversations/add-contact.ts @@ -1,3 +1,4 @@ +/* eslint-disable sonarjs/cognitive-complexity */ /* eslint-disable id-length */ import { type Context } from '@/bot/context'; import { KEYBOARD_SHARE_BOT, KEYBOARD_SHARE_PHONE } from '@/config/keyboards'; @@ -24,25 +25,49 @@ export async function addContact(conversation: Conversation, c ); } - // Просим отправить контакт клиента + // Просим отправить контакт или номер телефона await ctx.reply( await conversation.external(({ t }) => - combine(t('msg-send-client-contact'), t('msg-cancel-operation')), + combine(t('msg-send-client-contact-or-phone'), t('msg-cancel-operation')), ), ); - // Ждем любое сообщение от пользователя - const waitCtx = await conversation.wait(); + // Ждём первое сообщение: контакт или текст с номером + const firstCtx = await conversation.wait(); - // Проверяем, что отправлен контакт - if (!waitCtx.message?.contact) { - return ctx.reply(await conversation.external(({ t }) => t('msg-send-contact'))); + let name = ''; + let phone = ''; + + if (firstCtx.message?.contact) { + const { contact } = firstCtx.message; + name = `${contact.first_name || ''} ${contact.last_name || ''}`.trim(); + phone = normalizePhoneNumber(contact.phone_number); + } else if (firstCtx.message?.text) { + const typedPhone = normalizePhoneNumber(firstCtx.message.text); + if (!isValidPhoneNumber(typedPhone)) { + return ctx.reply(await conversation.external(({ t }) => t('msg-invalid-phone'))); + } + + // Нельзя добавлять свой собственный номер телефона + if (customer.phone && normalizePhoneNumber(customer.phone) === typedPhone) { + return ctx.reply(await conversation.external(({ t }) => t('err-cannot-add-self'))); + } + + phone = typedPhone; + + // Просим ввести имя клиента + await ctx.reply(await conversation.external(({ t }) => t('msg-send-client-name'))); + const nameCtx = await conversation.wait(); + const typedName = nameCtx.message?.text?.trim() || ''; + if (!typedName) { + return ctx.reply(await conversation.external(({ t }) => t('msg-invalid-name'))); + } + + name = typedName; + } else { + return ctx.reply(await conversation.external(({ t }) => t('msg-send-client-contact-or-phone'))); } - const { contact } = waitCtx.message; - const name = `${contact.first_name || ''} ${contact.last_name || ''}`.trim(); - const phone = normalizePhoneNumber(contact.phone_number); - // Проверяем валидность номера телефона if (!isValidPhoneNumber(phone)) { return ctx.reply(await conversation.external(({ t }) => t('msg-invalid-phone')));