Перейти к основному контенту

Квиз-лендинги

Для разработчиков. Состояние на 25.09.2026. Подробности, переменные и выкатка — README репозиториев Buharestskie/mfctest, do-nula-refinancing-2, bfl_fspp, mfcspisan. Что видит отдел продаж — статья «Заявки с лендингов».

Коротко

Четыре лендинга-квиза — лидогенераторы отдела продаж. Посетитель отвечает на несколько вопросов и оставляет телефон, лендинг заводит в amoCRM контакт и сделку, а три из четырёх — ещё и примечание с ответами (у do-nula-refinancing-2 примечания нет: ответы только в полях сделки). Своей бизнес-логики у них почти нет: сборка заявки, лимиты от спама и, у трёх из четырёх, код из SMS.

РепозиторийСайтЧто обещаетВоронка → этапПосле телефонаГде живёт
do-nula-refinancing-2реструктуризация.onlineреструктуризация долгов«Продажи МПП» → «Квалификация»код из SMSglobal
bfl_fsppfssp.siteпроверка долгов по базе ФССП (обращения к ФССП в коде нет)«Продажи МПП» → «Квалификация»код из SMSglobal
mfcspisanmfcspisan.ruсписание долгов через МФЦ«Продажи МПП» → «Квалификация»код из SMSсторонний сервер, доступа нет
mfctestmfctest.ruсписание долгов через МФЦ«МПП ИИ-агент» → «Новый лид Тест»ссылка в мессенджер, бот монолита donulaglobal

Родословная

Первым был do-nula-refinancing-2 (апрель 2026). bfl_fspp — его форк, mfcspisan — форк bfl_fspp: файлы бэкенда местами совпадают байт в байт, requirements.txt одинаковый у всех. mfctest стоит особняком: это лендинг pages/dolgimfc, вырезанный из монолита donula, с переписанным бэкендом. Аудит 11.09.2026 рекомендовал слить четыре лендинга в один параметризуемый — различаются набор вопросов, домен, воронка и тексты, ровно то, что выносится в конфиг. Не сделано.

Как устроен каждый

  • Один процесс FastAPI (Python 3.12, httpx) раздаёт статику лендинга и несколько JSON-ручек. Redis — коды из SMS и лимиты по IP. Базы нет. У mfctest статику отдаёт nginx прямо с диска, бэкенд видит только /quiz/.
  • В amoCRM лендинги сами не ходят — только через шлюз amocrm-service, который держит токен, лимит и квоты. Шлюз пускает только адреса из своего allowlist: сети контейнеров на global и адрес стороннего сервера mfcspisan. Переехал лендинг — поправить allowlist, иначе анкета отвечает 502.
  • SMS — через beeline-service. У do-nula и bfl_fspp первый код запрашивает фронт после отрисовки страницы ввода кода, у mfcspisan — сервер внутри /quiz/submit.
  • Сделка создаётся до подтверждения кода. Проверка кода в amoCRM ничего не пишет, подтверждённые и неподтверждённые заявки в воронке не различить.
  • ID воронок, этапов, полей и тегов — константы в app/constants.py. Пересоздали поле в amoCRM — правка кода и пересборка образа.
  • Юридические документы (legal/ у трёх лендингов, с 22.09.2026): каждая редакция — отдельный файл с датой в имени, старые остаются доступны по адресу с датой, дата действующей редакции согласия пишется в сделку. Существующий файл не правят — добавляют новый. Документы запечены в образ: новая редакция появится после пересборки. У bfl_fspp этого обновления нет.

mfctest: две сделки

После телефона сделка «Лид с сайта» создаётся сразу, SMS нет. Потом посетитель выбирает мессенджер, ссылка ведёт в бота монолита donula с параметром ai-<id сделки>. Бот заводит свою сделку «ИИ Лид» в той же воронке и записывает строку ai-<id> в её поле; сделку лендинга он не трогает. Связь двух сделок — только эта строка.

Выкатка

  • do-nula-refinancing-2, bfl_fspp, mfctest — на global git-клоны main: git pull --ff-only и docker compose up -d --build. У всех трёх есть внешняя проба («Реструктуризация долгов», «Проверка по ФССП», «Анкета МФЦ», на статус-странице скрыты) — выкатка в окне обслуживания.
  • mfctest: статику nginx берёт прямо с диска, после git pull она уже на сайте; пересборка нужна для бэкенда и документов.
  • mfcspisan — на стороннем сервере, как он там выкатывается, неизвестно; пробы у нас нет.

На что наступают

  • Домен mfctest.ru ещё указывает на старый сервер app. Пока app жив, трафик идёт через него, и проба смотрит туда же. Перед выключением app A-запись нужно переключить.
  • У mfctest корень сайта совпадает с корнем проекта. Всё, что не закрыто в nginx, видно снаружи — включая README и compose. Секреты в репозиторий не класть.
  • Кнопка «Изменить номер» у do-nula создаёт новые контакт и сделку, у bfl_fspp и mfcspisan меняет телефон у того же контакта.
  • Сбой после создания сделки даёт дубль. Если упал запрос примечания или отправка SMS, посетитель видит ошибку, а сделка уже есть — повторная отправка создаст вторую.
  • Сборка на global ходит в зеркало PyPI (прописано в Dockerfile через ENV): прямой PyPI из сети сборки недоступен. У mfcspisan зеркала нет — при переносе на global сборка упадёт.
  • Без файла согласия в legal/soglasie/ каждая анкета падает с 500: дата редакции обязательна для сделки.
  • Кэш браузера. Скрипты подключены с меткой версии в адресе — после правки JS/CSS её нужно поменять в HTML.