0005 — Заявка пишется в БД первой
- Статус: accepted
- Дата: 2026-05-01
Контекст
Каждая заявка с сайта должна попасть к менеджеру и (по возможности) в amoCRM. Внешние системы ненадёжны: amoCRM может быть недоступна, токен — протухнуть, сеть — отказать. Заявка при этом теряться не должна, а пользователь не должен ждать ответа CRM.
Решение
Заявка сначала сохраняется в локальную БД (источник истины), и только потом уходит во внешние каналы (email/Telegram/amoCRM) — асинхронно, через фоновый воркер. HTTP-ответ формы не ждёт внешние системы.
Последствия
Плюсы:
- Заявка не теряется при сбое любого внешнего канала — она уже в БД и видна в админке.
- Форма отвечает «спасибо» мгновенно, не завися от скорости/доступности CRM.
- Сбой одного канала не ломает форму и не мешает остальным каналам; неудачные отправки ретраятся.
Минусы / плата:
- Нужен фоновый воркер (
qcluster) и очередь задач — лишний движущийся компонент в проде. - Доставка во внешние системы становится «eventually» (не мгновенной), но для уведомлений о заявках это допустимо.
Детали реализации потока — Архитектура; настройка каналов — Каналы уведомлений.