Ребрендинг БАЗА: новое меню + воронка подбора, интенсив, оплата, карточка менеджеру
Меню Кибершколы БАЗА (4 кнопки): Подобрать тренировку / Летний интенсив CS2 / Посмотреть цены / Задать вопрос. Воронка «Подобрать тренировку» (FSM BAZA_*): для кого → возраст → игра → уровень → формат → групповые / индивидуальные / нужен совет. На каждом шаге — «Назад» и «В главное меню», ветки: младше 12 и «другая игра» уводят к менеджеру. Ветка «Летний интенсив CS2»: инфо → возраст → уровень → оплата. Запуск по кнопке и по кодовым словам (лето/интенсив), основные триггеры и приветствие — из config. Шаг оплаты: инлайн-кнопка «Перейти к оплате» (ссылки-плейсхолдеры из config.LINKS + UTM), «Проблема с оплатой» и «Задать вопрос менеджеру» уводят к оператору. Карточка менеджеру собирается из профиля воронки (пустые поля пропускаются) + метки; дублируется на почту. Данные не переспрашиваются, после передачи менеджеру бот не вмешивается (OPERATOR_CHAT). Тесты воронки — pytest (30 passed). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+95
-9
@@ -8,24 +8,110 @@ import config
|
||||
# ==========================================
|
||||
|
||||
def get_main_keyboard(is_admin: bool = False) -> str:
|
||||
"""Главное меню бота. Для админа добавляется кнопка «Админка ⚙️»."""
|
||||
"""Главное меню Кибершколы БАЗА. Для админа добавляется кнопка «Админка ⚙️»."""
|
||||
keyboard = VkKeyboard(one_time=False)
|
||||
# Кнопка начать опрос (зеленая)
|
||||
keyboard.add_button("Заполнить заявку 📝", color=VkKeyboardColor.PRIMARY)
|
||||
keyboard.add_button("Подобрать тренировку 🎯", color=VkKeyboardColor.PRIMARY)
|
||||
keyboard.add_line()
|
||||
# Карьера в ИКП (набор игроков и сотрудников)
|
||||
keyboard.add_button("Карьера в ИКП 💼", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_button("Летний интенсив CS2 🔥", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_line()
|
||||
# Кнопки FAQ и оператора
|
||||
keyboard.add_button("Частые вопросы ❓", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_button("Позвать оператора 🧑💼", color=VkKeyboardColor.NEGATIVE)
|
||||
# Кнопка админ-панели — только для администраторов (отдельной строкой)
|
||||
keyboard.add_button("Посмотреть цены 💰", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_button("Задать вопрос 💬", color=VkKeyboardColor.SECONDARY)
|
||||
if is_admin:
|
||||
keyboard.add_line()
|
||||
keyboard.add_button("Админка ⚙️", color=VkKeyboardColor.POSITIVE)
|
||||
return keyboard.get_keyboard()
|
||||
|
||||
|
||||
# ==========================================
|
||||
# КЛАВИАТУРЫ ВОРОНКИ «ПОДОБРАТЬ ТРЕНИРОВКУ» (БАЗА)
|
||||
# ==========================================
|
||||
|
||||
def _kb(rows, back=False, ask_manager=False, back_menu=True):
|
||||
"""Хелпер: строит нижнюю клавиатуру из строк кнопок + служебные кнопки снизу.
|
||||
|
||||
back — кнопка «Назад ⬅️» (к предыдущему вопросу воронки);
|
||||
ask_manager — кнопка «Задать вопрос менеджеру 💬»;
|
||||
back_menu — кнопка «В главное меню ↩️».
|
||||
"""
|
||||
keyboard = VkKeyboard(one_time=False)
|
||||
for i, row in enumerate(rows):
|
||||
if i:
|
||||
keyboard.add_line()
|
||||
for label in row:
|
||||
keyboard.add_button(label, color=VkKeyboardColor.SECONDARY)
|
||||
if ask_manager:
|
||||
keyboard.add_line()
|
||||
keyboard.add_button("Задать вопрос менеджеру 💬", color=VkKeyboardColor.SECONDARY)
|
||||
if back or back_menu:
|
||||
keyboard.add_line()
|
||||
if back:
|
||||
keyboard.add_button("Назад ⬅️", color=VkKeyboardColor.SECONDARY)
|
||||
if back_menu:
|
||||
keyboard.add_button("В главное меню ↩️", color=VkKeyboardColor.SECONDARY)
|
||||
return keyboard.get_keyboard()
|
||||
|
||||
|
||||
def get_baza_forwho_keyboard() -> str:
|
||||
return _kb([["Для себя", "Для подростка"]])
|
||||
|
||||
|
||||
def get_baza_age_keyboard() -> str:
|
||||
return _kb([["12–13 лет", "14–15 лет"], ["16 лет и старше", "Младше 12 лет"]], back=True)
|
||||
|
||||
|
||||
def get_baza_younger12_keyboard() -> str:
|
||||
keyboard = VkKeyboard(one_time=False)
|
||||
keyboard.add_button("Обсудить с менеджером 💬", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_line()
|
||||
keyboard.add_button("Назад ⬅️", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_button("В главное меню ↩️", color=VkKeyboardColor.SECONDARY)
|
||||
return keyboard.get_keyboard()
|
||||
|
||||
|
||||
def get_baza_game_keyboard() -> str:
|
||||
return _kb([["CS2", "Dota 2"], ["World of Tanks", "Другая игра"]], back=True)
|
||||
|
||||
|
||||
def get_baza_level_keyboard() -> str:
|
||||
return _kb([["Только начинает"], ["Играет для себя"],
|
||||
["Есть рейтинг или ранг"], ["Играет в команде или турнирах"]], back=True)
|
||||
|
||||
|
||||
def get_baza_format_keyboard() -> str:
|
||||
return _kb([["Групповые тренировки"], ["Индивидуальные тренировки"],
|
||||
["Пока не знаю, нужен совет"]], back=True)
|
||||
|
||||
|
||||
def get_baza_group_keyboard() -> str:
|
||||
return _kb([["Записаться на пробное"], ["Купить 4 тренировки", "Купить 8 тренировок"]],
|
||||
back=True, ask_manager=True)
|
||||
|
||||
|
||||
def get_baza_individual_keyboard() -> str:
|
||||
return _kb([["Записаться на пробное"], ["Купить 1 тренировку"],
|
||||
["Купить 4 тренировки", "Купить 8 тренировок"]],
|
||||
back=True, ask_manager=True)
|
||||
|
||||
|
||||
def get_baza_help_keyboard() -> str:
|
||||
return _kb([["Записаться на пробное"], ["Подобрать заново 🎯"]], ask_manager=True)
|
||||
|
||||
|
||||
def get_baza_intensive_keyboard() -> str:
|
||||
return _kb([["Хочу участвовать 🔥"]], ask_manager=True)
|
||||
|
||||
|
||||
def get_baza_prices_keyboard() -> str:
|
||||
keyboard = VkKeyboard(one_time=False)
|
||||
keyboard.add_button("Подобрать тренировку 🎯", color=VkKeyboardColor.PRIMARY)
|
||||
keyboard.add_line()
|
||||
keyboard.add_button("Записаться на пробное", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_button("Выбрать абонемент", color=VkKeyboardColor.SECONDARY)
|
||||
keyboard.add_line()
|
||||
keyboard.add_button("Задать вопрос 💬", color=VkKeyboardColor.SECONDARY)
|
||||
return keyboard.get_keyboard()
|
||||
|
||||
|
||||
def get_admin_keyboard(is_super: bool = False) -> str:
|
||||
"""Клавиатура админ-панели с разделами. Супер-админу — раздел «Администраторы»."""
|
||||
keyboard = VkKeyboard(one_time=False)
|
||||
|
||||
Reference in New Issue
Block a user