Квиз-лендинги Для разработчиков. Состояние на 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-. Бот заводит свою сделку «ИИ Лид» в той же воронке и записывает строку ai- в её поле; сделку лендинга он не трогает. Связь двух сделок — только эта строка. Выкатка 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.