Перейти к основному содержимому

Непрочитанные сообщения

В ЛК владельца счетчики непрочитанных сообщений показываются в боковом меню для разделов Синди и Чаты.

Поведение badge

  • Счетчики обновляются polling-запросами каждые 5 секунд.
  • Значение 0 не отображается.
  • Значения больше 9 отображаются как 9+.
  • Открытие раздела Синди или floating-чата Синди помечает непрочитанные фоновые ответы как прочитанные.
  • Открытие конкретного диалога в Чатах очищает unread только у этого диалога.

API

Owner AI:

  • GET /api/auth/ai-admin/unread-summary/ — возвращает { "unread_count": number }.
  • POST /api/auth/ai-admin/read/ — выставляет read_at для непрочитанных assistant-сообщений текущего владельца и возвращает новый счетчик.

Messenger chats:

  • GET /api/notifications/chats/unread-summary/ — возвращает сумму непрочитанных сообщений, число диалогов с unread и разбивку по каналам.
  • POST /api/notifications/chats/conversations/<id>/read/ — очищает unread только выбранного диалога и возвращает обновленную aggregate summary.

Уведомление владельцу

Когда операторский фоновый ответ Синди сохраняется как новое непрочитанное assistant-сообщение, SalonAI отправляет владельцу сообщение:

У вас новое сообщение от Синди.

Приоритет каналов:

  1. telegram_user
  2. whatsapp

Телефон получателя берется из User.phone, fallback — Salon.phone. Если телефон или канал недоступен, доставка мягко пропускается, а результат записывается в OwnerAiAdminMessage.meta.

Manual QA

  1. Создать фоновый ответ Синди и проверить, что у Синди в sidebar появился красный badge.
  2. Открыть /ai и проверить, что badge исчез после успешного POST /api/auth/ai-admin/read/.
  3. Создать входящее сообщение в WhatsApp или Telegram chat и проверить badge у Чаты.
  4. Открыть конкретный диалог в /chats и проверить, что очищается только этот диалог.
  5. Проверить отображение 9+, создав больше 9 unread сообщений.
  6. Отключить сеть/API и убедиться, что в browser console появляется не чаще одного console.warn на тип polling-сбоя.