Чаты — Администрирование¶
Обзор¶
Администрирование чатов не выделено в отдельную форму автоадминки. Чат технически остаётся задачей в чат-категории: участники хранятся как подписчики, сообщения -- как комментарии, а 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-- администрирование комментариев как основы сообщений чата.