Тексты воронки по ТЗ + смена ссылок из админки

Тексты:
- «Сколько лет игроку?» (было «…будущему ученику?») во всех местах;
- сообщение для «Младше 12 лет» приведено дословно к ТЗ (§4);
- убраны отсебятины-преамбулы, которых нет в ТЗ (приветствие, старт воронки,
  цены «Что дальше?», интенсив «Хотите записаться?»); кнопка младше-12 «Вернуться назад».

Смена ссылок в админке:
- таблица bot_links (key, url) + методы get_link/get_all_links/set_link;
- _link(key): БД-переопределение → дефолт из config/.env; используется на шагах оплаты;
- раздел «Ссылки 🔗» в админ-панели: список текущих адресов + «✏️ Изменить ссылку»
  (выбор из 8 кнопок → ввод URL с валидацией http/https). UTM добавляются автоматически.

Тесты: добавлен test_admin_edit_link. pytest 31 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-23 19:45:47 +03:00
parent fac2e3808b
commit 261e5c2da0
5 changed files with 144 additions and 17 deletions
+12
View File
@@ -109,6 +109,18 @@ LINKS = {
"summer": os.getenv("LINK_SUMMER", "https://infocyber.pro/"), # оплата летнего интенсива
}
# Человеческие названия ссылок (для админки смены ссылок). Порядок = порядок показа.
LINK_LABELS = {
"trial": "Запись на пробное",
"tariffs": "Страница тарифов",
"group_4": "Групповой абонемент — 4 занятия",
"group_8": "Групповой абонемент — 8 занятий",
"individual_1": "Индивидуальное — 1 занятие",
"individual_4": "Индивидуальные — 4 занятия",
"individual_8": "Индивидуальные — 8 занятий",
"summer": "Летний интенсив CS2",
}
# --- Триггеры запуска (регистронезависимо) ---
MAIN_TRIGGERS = ["начать", "тренировки", "занятия", "цена", "стоимость", "записаться",
"привет", "здравствуйте", "старт", "меню"]