Контракт контроля очереди уведомлений

Назначение

Закрытая Edge Function broker-notification-health предоставляет техническое состояние очереди Telegram-уведомлений без раскрытия персональных данных заявителей.

Она не является частью публичного сайта, не вызывается браузером посетителя и не включает Supabase как канал приёма заявок.

Публичная конфигурация до отдельной приёмки сохраняется:

lead_capture:
  mode: "web3forms"
  endpoint: ""

Источник данных

Функция вызывает только RPC:

public.broker_lead_notification_queue_health()

RPC возвращает агрегаты по статусам и доступна только service_role.

В ответ нельзя включать:

Авторизация

Функция требует отдельный secret:

NOTIFICATION_MONITOR_TOKEN

Запрос:

GET /functions/v1/broker-notification-health
Authorization: Bearer <monitor token>

Monitor token:

В supabase/config.toml для функции используется verify_jwt = false, чтобы собственный bearer token дошёл до handler. После этого handler самостоятельно обязан отклонить запрос без правильного monitor token.

Сетевая модель

Функция:

Формат ответа

Успешный ответ:

{
  "ok": true,
  "status": "ok",
  "checked_at": "2026-07-13T20:00:00.000Z",
  "alerts": [],
  "queue": [
    {
      "notification_status": "sent",
      "lead_count": 12,
      "oldest_lead_at": "2026-07-13T10:00:00.000Z",
      "oldest_attempted_at": "2026-07-13T10:00:02.000Z",
      "stale_count": 0,
      "max_attempt_count": 1,
      "total_manual_retries": 0
    }
  ],
  "thresholds": {
    "failed_warning": 1,
    "failed_critical": 5,
    "pending_warning": 10,
    "attempts_warning": 3,
    "stale_sending_minutes": 15
  }
}

Допустимые итоговые состояния:

HTTP-коды:

Коды тревог

Разрешены только технические коды:

Коды не должны содержать идентификатор или сведения заявки.

Пороги

Пороги задаются secrets/env функции:

Изменение порогов выполняется после анализа фактического потока заявок и фиксируется в issue №7 без публикации секретов.

Реакция оператора

При warning:

  1. проверить агрегаты очереди;
  2. сверить технические события в доверенной среде;
  3. не выполнять retry без проверки request ID в Telegram и базе;
  4. использовать закрытую broker-notification-retry только для подтверждённого failed.

При critical:

  1. не включать или временно отключить публичный Supabase endpoint;
  2. оставить Web3Forms рабочим;
  3. проверить зависшие sending и ошибки Telegram;
  4. устранить причину;
  5. провести ручной retry только по утверждённому runbook;
  6. повторить health-запрос и smoke-тест.

Активационный барьер

Health-функция может быть развёрнута только после:

  1. применения всех шести миграций;
  2. проверки broker_lead_notification_queue_health();
  3. создания отдельного monitor token;
  4. подтверждения отсутствия CORS;
  5. проверки ответа без персональных данных;
  6. настройки ответственного и канала тревог;
  7. выполнения docs/supabase-notification-health-smoke.md.

Развёртывание health-функции само по себе не разрешает включать hybrid.

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