Ссылки БАЗА: реальные 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
+9 -3
View File
@@ -646,10 +646,16 @@ class VKBotApplication:
# ==========================================================
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
sep = "&" if "?" in url else "?"
return f"{url}{sep}{utm}"
base, sep_frag, frag = url.partition("#")
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,
campaign: str = "main"):