Лендинги
Квиз-лендинги
Для разработчиков. Состояние на 25.09.2026. Подробности, переменные и выкатка — README репозиториев Buharestskie/mfctest, do-nula-refinancing-2, bfl_fspp, mfcspisan. Что видит отдел продаж — статья «Заявки с лендингов».
Коротко
Четыре лендинга-квиза — лидогенераторы отдела продаж. Посетитель отвечает на несколько вопросов и оставляет телефон, лендинг заводит в amoCRM контакт и сделку, а три из четырёх — ещё и примечание с ответами (у do-nula-refinancing-2 примечания нет: ответы только в полях сделки). Своей бизнес-логики у них почти нет: сборка заявки, лимиты от спама и, у трёх из четырёх, код из SMS.
| Репозиторий | Сайт | Что обещает | Воронка → этап | После телефона | Где живёт |
|---|---|---|---|---|---|
do-nula-refinancing-2 | реструктуризация.online | реструктуризация долгов | «Продажи МПП» → «Квалификация» | код из SMS | global |
bfl_fspp | fssp.site | проверка долгов по базе ФССП (обращения к ФССП в коде нет) | «Продажи МПП» → «Квалификация» | код из SMS | global |
mfcspisan | mfcspisan.ru | списание долгов через МФЦ | «Продажи МПП» → «Квалификация» | код из SMS | сторонний сервер, доступа нет |
mfctest | mfctest.ru | списание долгов через МФЦ | «МПП ИИ-агент» → «Новый лид Тест» | ссылка в мессенджер, бот монолита donula | global |
Родословная
Первым был 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— наglobalgit-клоны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.