Ссылки БАЗА: реальные URL записи/оплаты + сохранение якоря в UTM

- Кнопки записи/оплаты ведут на форму сайта infocyber.pro (service_id web_1..web_5);
  тарифы — на главную с якорем #prices; пробное и интенсив — на общую форму записи
  (отдельной страницы интенсива на сайте пока нет).
- _utm(): UTM вставляется ДО якоря (?utm...#prices), иначе браузер не доскроллит
  до раздела. Значения ссылок вынесены в .env / задокументированы в .env.example.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kenik
2026-07-23 19:12:20 +03:00
parent 7a59b035ce
commit 741a89f458
2 changed files with 21 additions and 3 deletions
+12
View File
@@ -34,3 +34,15 @@ MAIL_TO=group-zakaz@infocyber.pro
HR_MAIL_TO= HR_MAIL_TO=
# true — SSL (порт 465), false — STARTTLS (порт 587) # true — SSL (порт 465), false — STARTTLS (порт 587)
SMTP_USE_SSL=true SMTP_USE_SSL=true
# --- Ссылки Кибершколы БАЗА (кнопки записи/оплаты в боте) ---
# UTM добавляются кодом автоматически; здесь только базовые URL. Замените при необходимости.
LINK_TRIAL=https://infocyber.pro/form/index.html
LINK_TARIFFS=https://infocyber.pro/#prices
LINK_GROUP_4=https://infocyber.pro/form/index.html?service_id=web_2
LINK_GROUP_8=https://infocyber.pro/form/index.html?service_id=web_3
LINK_IND_1=https://infocyber.pro/form/index.html?service_id=web_1
LINK_IND_4=https://infocyber.pro/form/index.html?service_id=web_4
LINK_IND_8=https://infocyber.pro/form/index.html?service_id=web_5
# Летний интенсив: отдельной страницы на сайте нет — ведём на общую форму (замените, когда появится)
LINK_SUMMER=https://infocyber.pro/form/index.html
+9 -3
View File
@@ -646,10 +646,16 @@ class VKBotApplication:
# ========================================================== # ==========================================================
def _utm(self, url: str, campaign: str = "main") -> str: def _utm(self, url: str, campaign: str = "main") -> str:
"""Добавляет UTM-метку к ссылке (main — обычные, summer — интенсив).""" """Добавляет UTM-метку к ссылке (main — обычные, summer — интенсив).
Якорь (#...) сохраняется: UTM вставляется ДО него, иначе браузер не
доскроллит до раздела (напр. https://infocyber.pro/?utm...#prices).
"""
utm = config.UTM_SUMMER if campaign == "summer" else config.UTM_MAIN utm = config.UTM_SUMMER if campaign == "summer" else config.UTM_MAIN
sep = "&" if "?" in url else "?" base, sep_frag, frag = url.partition("#")
return f"{url}{sep}{utm}" sep = "&" if "?" in base else "?"
result = f"{base}{sep}{utm}"
return f"{result}#{frag}" if sep_frag else result
def _baza_send_openlink(self, user_id: int, link_key: str, message: str, button: str, def _baza_send_openlink(self, user_id: int, link_key: str, message: str, button: str,
campaign: str = "main"): campaign: str = "main"):