Перейти к содержанию

Чаты — Администрирование

Обзор

Администрирование чатов не выделено в отдельную форму автоадминки. Чат технически остаётся задачей в чат-категории: участники хранятся как подписчики, сообщения -- как комментарии, а runtime-настройки -- в ChatSettings и ролях чата.

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

  • системные категории личных, открытых и закрытых групповых чатов;
  • категорию, открытую в представлении «чат»;
  • почтовые, push- и desktop-уведомления через домен notifications;
  • роли и настройки конкретного чата через chat API/UI;
  • диагностику сообщений, unread и очередей через таблицы комментариев, подписок и очередей.

Механизмы администрирования

Автоадминка и EntityEditor

В карте форм автоадминки не найдено отдельной формы chat/chats. Для чатов используются общие механизмы:

Механизм Где настраивается Что контролирует
system-settings Общие настройки приложения (dbo.Settings) ID системных категорий чата
Настройки категории Домен categories Представление категории, конфиденциальность, email-уведомления
UI/API чата /chat, /api/chats/{taskId}/settings, /api/chats/{taskId}/roles Настройки и роли конкретного чата

Собственных EntityEditor-схем у домена chat в прочитанных источниках не выявлено.

API управления настройками и ролями

Метод Route Назначение
GET /api/chats/{taskId}/settings Получить настройки чата и права на редактирование
POST /api/chats/{taskId}/settings Обновить настройки чата
GET /api/chats/{taskId}/user-settings Получить персональные права пользователя в чате
GET /api/chats/{taskId}/roles Получить роли пользователей и групп
POST /api/chats/{taskId}/roles Назначить роли
DELETE /api/chats/{taskId}/roles Снять роли

Подробный backend-контур описан в backend.md.

Системные настройки

Категории чатов

Тип чата определяется через ConfigurationService.Get() и системные значения Settings.

Ключ Что задаёт Runtime-эффект
ChatSubcatId Категория личных чатов Задачи этой категории считаются личными чатами; максимум 2 участника
GroupChatSubCatID Категория открытых групповых чатов Используется для групповых чатов без обязательной приватности
ClosedGroupChatSubcatId Категория закрытых групповых чатов Целевая категория при включении IsPrivate у группового чата или канала
select [Key], [Value]
from Settings
where [Key] in ('ChatSubcatId', 'GroupChatSubCatID', 'ClosedGroupChatSubcatId');

⚠️ Если ClosedGroupChatSubcatId не настроен, платформа при первом запуске может создать подкатегорию «Закрытые группы», записать значение в Settings и перенести приватные групповые чаты в новую категорию. Подробности поведения переключения IsPrivate описаны в business.md.

SettingsCustom / sys_general_settings

Chat-specific ключи SettingsCustom в прочитанных источниках не выявлены. Для диагностики конфигурации чатов использовать Settings (system-settings), а не custom-settings.

Настройки категории

Представление категории в режиме чата

Категорию можно открыть в чат-представлении:

/spa/subcat/{subcatId}/chat

В этом режиме задачи категории отображаются как переписки. Пользовательская логика представления -- сортировка по времени последнего сообщения и очистка HTML/Markdown в превью -- описана в business.md; в admin.md она не дублируется.

Категорийные флаги

Настройка Где описана Что важно для chat
Представления категории ../categories/admin.md Включает доступность чат-представления в категории
Конфиденциальность категории business.md Ограничивает видимость чата подписчиками
«Не посылать почтовые сообщения» ../notifications/business.md Отключает email из категории групповых чатов; per-chat mute email не отключает

Настройки конкретного чата

Таблица dbo.ChatSettings хранит per-chat настройки. Полный список полей и бизнес-ограничений уже описан в business.md.

Группа настроек Поля Что контролирует
Приватность IsPrivate Перенос группового чата между открытой и закрытой категорией
Участники и профиль IsAddSubscribersEnabled, IsEditProfileEnabled, IsSubscribersVisibile Можно ли участникам добавлять подписчиков, менять профиль и видеть список участников
Сообщения IsRootCommentsEnabled, IsThreadsEnabled, IsThreadCommentsEnabled Корневые сообщения и треды
Функции сообщений IsReactionsEnabled, IsMessagePinEnabled, IsAttachmentsEnabled, IsSurveysEnabled, IsVoiceMessagesEnabled Реакции, закрепление, файлы, опросы, голосовые
ВКС IsConferenceEnabled Доступность конференции из чата

Роли хранятся в dbo.ChatRolesUsers и dbo.ChatRolesGroups; модель ролей описана в business.md.

URL-навигация

Создание нового чата

/spa/chat/new?with={UserID,UserID,...}&name={chat_name}&msg={chat_message}
/spa/chat/new?with={UserID}&with={UserID}&name={chat_name}&msg={chat_message}
Параметр Назначение
with ID пользователей-участников; можно передать через запятую или повторить параметр несколько раз
name Название чата
msg Первое сообщение, публикуемое сразу после создания

Приватный чат с пользователем

/spa/chat/new?with={userId}&private=true
Параметр Назначение
with ID пользователя
private Признак приватного чата

Уведомления и тикеры

Chat использует общий контур уведомлений:

  • ChatNotificationMode управляет push, непрочитанностью и desktop-уведомлениями конкретного участника;
  • email отключается не per-chat mute, а настройками категории и пользователя;
  • push для личных и групповых чатов имеет отдельное форматирование.

Не дублировать правила уведомлений в этом файле: административные настройки и диагностика находятся в ../notifications/admin.md, бизнес-правила -- в ../notifications/business.md, счётчики и тикеры -- в ../notifications/runbook-tickers-counters.md.

Аудит и диагностика

Объекты БД

Объект Назначение
ChatSettings Настройки конкретного чата
ChatRolesUsers, ChatRolesGroups Роли пользователей и групп в чате
ChatAvatars Аватары чатов
Comments, CommentRecipients Сообщения и read-state
MailSubscribersUsers, MailSubscribersGroups Участники чата
vUserChatUnreadCount, vUserPinnedAndChatUnreadCount Read-model непрочитанных чатов
MessageQueue, MessageQueueLog Очереди обработки событий, если проблема связана с доставкой уведомлений

⚠️ ChatSettings не покрывает все сценарии использования мессенджера. Для полного охвата учитывать три источника: Settings.ChatSubcatId, Settings.GroupChatSubCatID и задачи, закреплённые в мессенджере через подписки. Активность сообщений проверяется через Comments и CommentRecipients.

Быстрые проверки

-- Тип системной чат-категории
select
        t.TaskID,
        t.SubcatID,
        case
            when t.SubcatID = (select top 1 cast(v.Value as int) from Settings v where v.[Key] = 'ChatSubcatId') then 'Personal'
            when t.SubcatID = (select top 1 cast(v.Value as int) from Settings v where v.[Key] = 'GroupChatSubCatID') then 'Group'
            else 'Channel/SocialNetwork/CategoryChat'
        end as ChatType
from Tasks t
where t.TaskID = @chatTaskId;

-- Настройки и роли конкретного чата
select *
from ChatSettings
where TaskId = @chatTaskId;

select *
from ChatRolesUsers
where TaskId = @chatTaskId;

select *
from ChatRolesGroups
where TaskId = @chatTaskId;

Для сценариев «сообщение не видно», unread не пересчитался или чат не обновился без перезагрузки использовать маршрут из data-flow.md; для правил комментариев и форматирования -- ../comments/admin.md и ../comments/text-formatting.md.

Связанные документы

  • business.md -- типы чатов, роли, ChatSettings, уведомления участника, представление «чат».
  • backend.md -- контроллеры, сервисы и SQL-зависимости.
  • data-flow.md -- сквозные цепочки создания, отправки сообщений, read-state и close/left.
  • frontend.md -- SPA routes, realtime-подписки и UI-диагностика.
  • mobile.md -- мобильные endpoints и ограничения.
  • ../categories/admin.md -- настройки категории и представлений.
  • ../notifications/admin.md -- административные настройки уведомлений.
  • ../notifications/business.md -- бизнес-правила email/push/desktop.
  • ../comments/admin.md -- администрирование комментариев как основы сообщений чата.