Release notes (2026-04-09) — Дневник самонаблюдений + test bot tooling

Источник: /Users/masaltsev/Documents/dev/crm/docs/RELEASE_NOTES_2026-04-09.md.

Summary

  • Добавлен функционал «Дневник самонаблюдений» (модель, webhook, админка Filament, интеграция в MAX‑бот).
  • Настроены инструменты разработки: test bot через long polling, симуляция webhook‑пейлоада, экспорт истории дневника.

Features

Diary (CRM + MAX)

  • Webhook из Яндекс.Форм: POST /api/diary/yandex-webhook с проверкой секрета (X-Yandex-Form-Secret или X-Webhook-Token).
  • Хранение в БД: таблица diary_entries, модель DiaryEntry, автоматическое выделение red-flag по ключевым словам, идемпотентность по yandex_form_id.
  • Админка (Filament):
    • DiaryEntryResource для просмотра записей.
    • На форме волонтёра и пары добавлены переключатели дневника и сводки (кол-во записей/флагов/последняя запись).
  • MAX‑бот:
    • предложение дневника после сохранения отчёта (если дневник включён);
    • меню «📖 Мой дневник» + действия: показать последнюю запись и экспорт.

Export

  • Экспорт истории дневника отправляется файлом .txt через workflow POST /uploads → upload → POST /messages с attachments.
  • Содержимое файла в формате Markdown, сгруппировано по подопечному, а внутри — по датам (старое → новое). Это задел для будущего PDF.

Dev tooling

  • php artisan bot:poll — long polling для test bot MAX (локальная разработка без webhook).
  • php artisan diary:webhook:simulate — генерация тестового payload Яндекс.Форм для локальной отладки.
  • В локальной среде в дневнике бота добавлена кнопка «🧪 Симулировать webhook» (создаёт тестовую запись).

Config & migrations

New env vars

  • MAX_BOT_TOKEN_TEST — токен test bot для polling.
  • DIARY_YANDEX_FORM_URL — базовый URL Яндекс.Формы (для кнопки «Открыть дневник»).
  • DIARY_YANDEX_WEBHOOK_SECRET — секрет webhook Яндекс.Форм.
  • DIARY_EXPORT_FORMAT — пока используется txt.

DB changes

  • Новая таблица: diary_entries.
  • Новые поля в volunteer_profiles:
    • diary_enabled (default false)
    • diary_is_student (default false)

Note: “Студент‑психолог” (future)

Поле «Студент‑психолог» (volunteer_profiles.diary_is_student) — это заготовка для будущих релизов.

Сейчас оно:

  • хранится в БД и редактируется в CRM;
  • не меняет пользовательский флоу (в MAX и в Яндекс.Форме).

Планируемое назначение — включать/отключать дополнительный вопрос дневника (профессиональная рефлексия) для студентов‑психологов, когда появится управляемая версия формы.

Commits included

  • d17d63c Bot: add long polling command for test bot
  • 26b1938 Max bot: fix binding and improve menus
  • 07ceb9b Diary: add webhook ingestion and persistence
  • e919a3a Filament: add diary UI and resources
  • 5d3868b Diary: add export formatter and webhook payload simulator
  • 1e300e2 Tests: cover diary webhook and max bot diary flow
  • 5542f4a Docs: add diary architecture and operations spec