Чаты — Администрирование¶
Администрирование чатов не выделено в отдельную форму автоадминки. Чат технически остаётся задачей в чат-категории: участники хранятся как подписчики, сообщения — как комментарии, а настройки — в 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 управления настройками и ролями¶
Маршруты 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 |
Снять роли |
Системные настройки¶
Категории чатов¶
Тип чата определяется системными значениями в таблице Settings.
| Ключ | Что задаёт | Эффект |
|---|---|---|
ChatSubcatId |
Категория личных чатов | Задачи этой категории считаются личными чатами; максимум 2 участника. ДП «Обложка социальной сети» в этой категории не привязывается (с 2.268.x). |
GroupChatSubCatID |
Категория открытых групповых чатов | Используется для групповых чатов без обязательной приватности |
ClosedGroupChatSubcatId |
Категория закрытых групповых чатов | Целевая категория при включении IsPrivate у группового чата или канала |
select [Key], [Value]
from Settings
where [Key] in ('ChatSubcatId', 'GroupChatSubCatID', 'ClosedGroupChatSubcatId');
⚠️ Если ClosedGroupChatSubcatId не настроен, платформа при первом запуске может создать подкатегорию «Закрытые группы», записать значение в Settings и перенести приватные групповые чаты в новую категорию. Подробности поведения переключения IsPrivate описаны в бизнес-документации.
Пошаговая настройка категории групповых чатов¶
Личные и групповые чаты должны быть привязаны к разным категориям. Категория для групповых чатов настраивается так:
- Создать отдельную категорию в разделе «Системный» с типом представления «Групповой чат» (не «Личный чат»).
- В общих настройках приложения в поле выбора категории групповых чатов указать созданную категорию — значение запишется в ключ
GroupChatSubCatIDтаблицыSettings. - Для закрытых групп — отдельная категория с тем же типом представления, привязывается к
ClosedGroupChatSubcatId.
⚠️ Типовая ошибка. Если GroupChatSubCatID указывает на ту же категорию, что и ChatSubcatId (категория личных чатов), либо на категорию с типом представления «Личный чат», — при добавлении третьего участника возникает ошибка «в личном чате может быть только два участника». Тип чата определяется по subcatId задачи-чата: групповым он считается, только если subcatId совпадает с GroupChatSubCatID. Решение — переназначить GroupChatSubCatID на отдельную категорию правильного типа.
SettingsCustom / sys_general_settings
Chat-specific ключи SettingsCustom в прочитанных источниках не выявлены. Для диагностики конфигурации чатов использовать Settings (system-settings), а не custom-settings.
Ограничение прав на коммуникации через ChatSubcatId¶
Право текущего пользователя на создание задач в категории, указанной в ChatSubcatId (категория личных чатов), определяет видимость инструментов коммуникации в нескольких UI-зонах. Если у группы пользователей отобрать это право — у всех её участников автоматически скрываются кнопки «Позвонить», «Пригласить в видеоконференцию» и связанные ВКС-элементы, без отдельной настройки в каждой зоне.

Затронуты следующие UI-зоны (с версии 2.268.355; расширение покрытия — с версии 2.268.358):
| Зона | Что скрывается без права на ChatSubcatId |
|---|---|
| Мини-карточка пользователя | Кнопки «Позвонить» и «Пригласить в видеоконференцию» |
| Полный профиль пользователя — шапка и меню | Кнопка «Начать видеоконференцию» в шапке и пункт меню |
| Полный профиль — вкладка «Контакты», секция ВКС | Кнопка с персональной ссылкой на комнату ВКС |
| Полный профиль — копирование ссылки на персональную комнату ВКС | Кнопка копирования ссылки на персональную комнату ВКС |
| Левое боковое меню — пункт «Мои звонки и встречи» | Пункт меню |
| Карточка задачи | Создание ВКС-встречи — оба входа |
| Поиск контактов | Меню при наведении с кнопками целиком; внутри — отдельная кнопка ВКС |
Отдельной настройки «право на ВКС» нет. ВКС-кнопки видны при одновременном выполнении двух условий: у пользователя есть право на категорию ChatSubcatId и включён глобальный флаг конференций (IsConferenceEnabled, см. ниже).
Механизм управления — стандартный: в правах на категорию ChatSubcatId для нужной группы отобрать действие «Создание задач». Никаких отдельных спецправ или новых настроек категории фикс не вводит.
Глубокие ссылки/URL (например, прямой переход в комнату ВКС по ссылке, полученной от другого пользователя) этим механизмом не закрываются — он работает на уровне видимости UI-элементов, а не на уровне доступа к самим ресурсам ВКС.
Настройки категории¶
Представление категории в режиме чата
Категорию можно открыть в чат-представлении:
/spa/subcat/{subcatId}/chat
В этом режиме задачи категории отображаются как переписки. Пользовательская логика представления (сортировка по времени последнего сообщения, очистка HTML/Markdown в превью) описана в бизнес-документации и здесь не дублируется.
Категорийные флаги
| Настройка | Где описана | Что важно для chat |
|---|---|---|
| Представления категории | ../categories/admin.md |
Включает доступность чат-представления в категории |
| Конфиденциальность категории | business.md |
Ограничивает видимость чата подписчиками |
| «Не посылать почтовые сообщения» | ../notifications/business.md |
Отключает email из категории групповых чатов; отключение уведомлений отдельного чата на email не влияет |
Настройки конкретного чата¶
Таблица dbo.ChatSettings хранит настройки отдельного чата. Полный список полей и бизнес-ограничений описан в бизнес-документации.

| Группа настроек | Поля | Что контролирует |
|---|---|---|
| Приватность | IsPrivate |
Перенос группового чата между открытой и закрытой категорией |
| Участники и профиль | IsAddSubscribersEnabled, IsEditProfileEnabled, IsSubscribersVisibile |
Можно ли участникам добавлять подписчиков, менять профиль и видеть список участников |
| Сообщения | IsRootCommentsEnabled, IsThreadsEnabled, IsThreadCommentsEnabled |
Корневые сообщения и треды |
| Функции сообщений | IsReactionsEnabled, IsMessagePinEnabled, IsAttachmentsEnabled, IsSurveysEnabled, IsVoiceMessagesEnabled |
Реакции, закрепление, файлы, опросы, голосовые |
| ВКС | IsConferenceEnabled |
Доступность конференции из чата |
Роли хранятся в dbo.ChatRolesUsers и dbo.ChatRolesGroups; модель ролей описана в бизнес-документации.
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 отключается не на уровне отдельного чата, а настройками категории и пользователя;
- push для личных и групповых чатов имеет отдельное форматирование.
Правила уведомлений в этом файле не дублируются: административные настройки и диагностика — в администрировании уведомлений, бизнес-правила — в бизнес-документации уведомлений, счётчики и тикеры — в runbook по тикерам.
Аудит и диагностика¶
Объекты БД¶
Таблицы и представления, полезные при диагностике чатов:
| Объект | Назначение |
|---|---|
ChatSettings |
Настройки конкретного чата |
ChatRolesUsers, ChatRolesGroups |
Роли пользователей и групп в чате |
ChatAvatars |
Аватары чатов |
Comments, CommentRecipients |
Сообщения и состояние прочтения |
MailSubscribersUsers, MailSubscribersGroups |
Участники чата |
vUserChatUnreadCount, vUserPinnedAndChatUnreadCount |
Представление непрочитанных чатов |
MessageQueue, MessageQueueLog |
Очереди обработки событий, если проблема связана с доставкой уведомлений |
⚠️ ChatSettings не покрывает все сценарии использования мессенджера. Для полного охвата учитывать три источника: Settings.ChatSubcatId, Settings.GroupChatSubCatID и задачи, закреплённые в мессенджере через подписки. Активность сообщений проверяется через Comments и CommentRecipients.
Быстрые проверки¶
Готовые SQL-запросы для диагностики:
-- Тип системной чат-категории
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;
Для правил комментариев и форматирования см. администрирование комментариев и форматирование текста.
Типичные тикеты¶
«Не могу добавить подписчика в личном чате»¶
Добавление подписчика в личном чате — корректное поведение: личный чат (Personal) не поддерживает добавление подписчиков по дизайну. Решение — создать новый групповой чат с нужными участниками.
SQL-диагностика типа чата:
-- Определить тип чата
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'
end as ChatType
from Tasks t
where t.TaskID = @chatTaskId;
-- Подписчики чата
select s.UserID, u.FullName, s.IsDeleted, s.CreatedDate
from MailSubscribersUsers s
join Users u on u.UserID = s.UserID
where s.TaskID = @chatTaskId and s.IsDeleted = cast(0 as bit)
order by s.CreatedDate;
-- Настройки чата
select * from ChatSettings where TaskId = @chatTaskId;
«Не вижу чат в списке»
Возможные причины:
- Пользователь не подписчик чата
- Чат закрыт
- Чат конфиденциальный, и пользователь не подписчик
- Категория чата не попадает под текущий фильтр
Связанные документы¶
Смежные разделы:
- Чаты — бизнес-логика — типы чатов, роли,
ChatSettings, уведомления участника, представление «чат». - Категории — администрирование — настройки категории и представлений.
- Уведомления — администрирование — административные настройки уведомлений.
- Уведомления — бизнес-логика — бизнес-правила email/push/desktop.
- Комментарии — администрирование — администрирование комментариев как основы сообщений чата.