feat(bot): prepare MAX notification adapter and setup handoff #89

Merged
Soyavo merged 1 commits from feat/83-max-bot into dev 2026-10-04 16:17:19 +03:00
Owner

Что меняется

Добавлен серверный канал MAX для уведомлений пациента с сайта: подключение одноразовой ссылкой, подтверждение завершённых тестов и нейтральные напоминания с кнопкой в личный кабинет. Webhook сохраняет события до ответа MAX, worker доставляет из постоянной очереди с повторами и повторной проверкой согласия. /stop и остановка бота отключают привязку и отменяют ожидающие уведомления.

Токены, ответы на тесты, оценки, диагнозы и медицинский текст в сообщения MAX не попадают. Входящие сообщения не передаются в LLM.

Closes #83

Зона

A. Серверные зависимости #84 и #86 уже объединены. Защита диагностики настроек — отдельный contract MR по #87. Интерфейс сайта не изменяется.

Подключение будущим владельцем

Инструкция: app/channels/MAX_SETUP.md. Владелец создаёт бота, администратор заполняет MAX_* и HTTPS-адреса, затем выполняет check → включает MAX_ENABLED → subscribe → status → пробную привязку. По умолчанию MAX выключен; бот и токен сейчас не создавались, реальная доставка не проверялась.

Как проверить

make lint test: 1030 passed, 1 skipped. Проверены полный серверный сценарий подключения/отключения, обе модели завершённых тестов, дедупликация webhook, фильтрация групп/ботов, нейтральное содержимое сообщений, отзыв согласия, очередь и 429, HTTP-контракт MAX, команды настройки и жизненный цикл.

Ограничения

До выдачи токена и публичного HTTPS возможны только автономные проверки с подменённым транспортом. Один API-процесс с MAX на токен; при падении между отправкой в MAX и подтверждением в БД возможен повтор сообщения.

Чек-лист

  • rebase на актуальную серверную основу
  • make lint + make test зелёные
  • Лог в issue
  • Синтетические данные, секреты в окружении
  • Общие файлы изменены отдельными contract MR
## Что меняется Добавлен серверный канал MAX для уведомлений пациента с сайта: подключение одноразовой ссылкой, подтверждение завершённых тестов и нейтральные напоминания с кнопкой в личный кабинет. Webhook сохраняет события до ответа MAX, worker доставляет из постоянной очереди с повторами и повторной проверкой согласия. /stop и остановка бота отключают привязку и отменяют ожидающие уведомления. Токены, ответы на тесты, оценки, диагнозы и медицинский текст в сообщения MAX не попадают. Входящие сообщения не передаются в LLM. Closes #83 ## Зона A. Серверные зависимости #84 и #86 уже объединены. Защита диагностики настроек — отдельный contract MR по #87. Интерфейс сайта не изменяется. ## Подключение будущим владельцем Инструкция: app/channels/MAX_SETUP.md. Владелец создаёт бота, администратор заполняет MAX_* и HTTPS-адреса, затем выполняет check → включает MAX_ENABLED → subscribe → status → пробную привязку. По умолчанию MAX выключен; бот и токен сейчас не создавались, реальная доставка не проверялась. ## Как проверить make lint test: 1030 passed, 1 skipped. Проверены полный серверный сценарий подключения/отключения, обе модели завершённых тестов, дедупликация webhook, фильтрация групп/ботов, нейтральное содержимое сообщений, отзыв согласия, очередь и 429, HTTP-контракт MAX, команды настройки и жизненный цикл. ## Ограничения До выдачи токена и публичного HTTPS возможны только автономные проверки с подменённым транспортом. Один API-процесс с MAX на токен; при падении между отправкой в MAX и подтверждением в БД возможен повтор сообщения. ## Чек-лист - [x] rebase на актуальную серверную основу - [x] make lint + make test зелёные - [x] Лог в issue - [x] Синтетические данные, секреты в окружении - [x] Общие файлы изменены отдельными contract MR
Soyavo added 2 commits 2026-10-04 16:12:17 +03:00
fix(contract): redact input values in settings errors
CI / ruff · pytest (pull_request) Successful in 2m22s
28967c7c37
Refs #87
feat(bot): add MAX notifications adapter and operator handoff
CI / ruff · pytest (pull_request) Successful in 2m27s
7780b484f3
Refs #83
Soyavo merged commit 07652d044c into dev 2026-10-04 16:17:19 +03:00
Sign in to join this conversation.