Runbook очереди уведомлений

Цель

Документ определяет действия ответственного при тревогах закрытого health-endpoint и запрещает массовые или неподтверждённые повторные отправки.

Web3Forms остаётся независимым рабочим каналом. Проблема Supabase или Telegram не должна блокировать получение email-заявки.

Уровни состояния

OK

Условия:

Действие: никаких изменений. Зафиксировать только регулярную успешную проверку в системе мониторинга.

Warning

Возможные коды:

Действия:

  1. не включать hybrid, если он ещё не принят;
  2. проверить Telegram-конфигурацию и события в доверенной среде;
  3. установить, относится ли проблема к одной тестовой заявке или очереди;
  4. не копировать телефон, имя и текст заявки в issue;
  5. не выполнять retry без сверки request ID в базе и Telegram;
  6. при подтверждённом failed использовать только broker-notification-retry и код причины из whitelist;
  7. повторить health-запрос после исправления.

Critical

Возможные коды:

Действия:

  1. оставить или вернуть сайт в режим web3forms с пустым endpoint;
  2. не выполнять массовый retry;
  3. проверить, не принял ли Telegram сообщение до аварийного завершения функции;
  4. определить число затронутых записей через агрегаты, без выгрузки персональных данных;
  5. остановить дальнейшее развёртывание Supabase-канала;
  6. устранить причину конфигурации, RPC или Telegram;
  7. обрабатывать подтверждённые failed по одной заявке;
  8. повторить smoke и health-проверку;
  9. зафиксировать технический итог в issue №7 без идентификаторов клиента.

Матрица кодов

Код Возможная причина Первое действие Retry
failed_present единичная ошибка Telegram или сводки проверить notification_last_error в доверенной среде только после сверки
failed_critical массовая ошибка конфигурации или Telegram остановить включение Supabase, проверить secrets и доступность массовый retry запрещён
stale_sending функция прервалась во время доставки сверить request ID в Telegram и базе штатное восстановление или ручное решение
pending_backlog handler не забирает очередь или Telegram выключен проверить deploy, secrets и claim RPC retry не требуется до диагностики
attempts_elevated таймауты, повторы или аварийное окно проверить события и повторные вызовы только подтверждённый failed

Проверка перед ручным retry

Обязательно подтвердить:

Запрещено:

Проверка после retry

Проверить:

  1. HTTP-ответ административной функции;
  2. notification_status;
  3. увеличение notification_manual_retry_count ровно на один;
  4. наличие notification_retry_requested;
  5. наличие notification_retry_sent или notification_retry_failed;
  6. одно сообщение в Telegram;
  7. отсутствие персональных данных в техническом событии;
  8. исчезновение или изменение соответствующего health alert.

Работа с зависшим sending

stale_sending означает, что sending старше 15 минут.

Перед восстановлением:

  1. проверить Telegram по request ID;
  2. проверить время notification_attempted_at;
  3. проверить события notification_sent и notification_failed;
  4. учитывать аварийное окно: Telegram мог принять сообщение до фиксации sent.

Если сообщение уже есть, повтор запрещён до ручного решения ответственного. Если сообщения нет и попытка действительно зависла, используется штатный атомарный claim, а не перевод записи в failed вручную.

Закрытие инцидента

Инцидент можно закрыть, когда:

Эскалация

Эскалация обязательна, если:

При подозрении на утечку token его необходимо немедленно заменить, удалить старое значение из окружения и повторить smoke авторизации.

Откат

Безопасный откат:

lead_capture:
  mode: "web3forms"
  endpoint: ""

Дополнительно:

ЗаявкаПозвонитьВК