Перейти к содержанию

0005 — Заявка пишется в БД первой

  • Статус: accepted
  • Дата: 2026-05-01

Контекст

Каждая заявка с сайта должна попасть к менеджеру и (по возможности) в amoCRM. Внешние системы ненадёжны: amoCRM может быть недоступна, токен — протухнуть, сеть — отказать. Заявка при этом теряться не должна, а пользователь не должен ждать ответа CRM.

Решение

Заявка сначала сохраняется в локальную БД (источник истины), и только потом уходит во внешние каналы (email/Telegram/amoCRM) — асинхронно, через фоновый воркер. HTTP-ответ формы не ждёт внешние системы.

Последствия

Плюсы:

  • Заявка не теряется при сбое любого внешнего канала — она уже в БД и видна в админке.
  • Форма отвечает «спасибо» мгновенно, не завися от скорости/доступности CRM.
  • Сбой одного канала не ломает форму и не мешает остальным каналам; неудачные отправки ретраятся.

Минусы / плата:

  • Нужен фоновый воркер (qcluster) и очередь задач — лишний движущийся компонент в проде.
  • Доставка во внешние системы становится «eventually» (не мгновенной), но для уведомлений о заявках это допустимо.

Детали реализации потока — Архитектура; настройка каналов — Каналы уведомлений.