Тикеты заявок, «пробное занятие», доработка ветки вебинара
- Тикеты: add_lead возвращает id заявки; при передаче менеджеру клиент получает «🎫 Номер вашей заявки: №N», тот же номер — в карточке оператору и в письме. Один тикет на заход (сбрасывается при новом старте воронки/интенсива). - Кнопка «Записаться на пробное» → «Записаться на пробное занятие» (лейблы + распознавание). - Ветка вебинара: вход по callback-кнопке и по тексту «записаться на вебинар», текст выровнен по ТЗ, после регистрации состояние FREE_CHAT — основное меню остаётся доступным (не блокирует продающую ветку). Дата/время — в config. Тесты: test_baza_question_ticket, test_webinar_registration. pytest 36 passed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -74,6 +74,28 @@ def test_baza_records_lead_once(app):
|
||||
assert any("Групповой" in name for name, _ in s["by_service"])
|
||||
|
||||
|
||||
def test_baza_question_ticket(app):
|
||||
"""§9: клиенту и в карточку оператору уходит номер заявки (тикет)."""
|
||||
u = 70040
|
||||
app._sent.clear()
|
||||
app.handle_message(u, "Задать вопрос 💬")
|
||||
app.handle_message(u, "Есть ли рассрочка?")
|
||||
ticket = bot.db.get_profile(u).get("ticket")
|
||||
assert ticket # тикет присвоен
|
||||
assert any(f"№{ticket}" in s["msg"] for s in app._sent) # клиент видит номер
|
||||
|
||||
|
||||
def test_webinar_registration(app):
|
||||
"""Ветка вебинара: регистрация, метка, остаётся в боте (меню доступно)."""
|
||||
u = 70041
|
||||
app.handle_message(u, "записаться на вебинар")
|
||||
assert "webinar_registered" in bot.db.get_profile(u).get("metki", [])
|
||||
assert _state(u) == "FREE_CHAT"
|
||||
# основное меню доступно — обычная продающая ветка запускается
|
||||
app.handle_message(u, "Подобрать тренировку 🎯")
|
||||
assert _state(u) == "BAZA_FORWHO"
|
||||
|
||||
|
||||
def test_baza_smart_skip_known_fields(app):
|
||||
"""§15: уже сохранённые ответы не переспрашиваются."""
|
||||
u = 70020
|
||||
|
||||
Reference in New Issue
Block a user