Внутренний чат
Внутренний чат — мессенджер между сотрудниками одного домена. Бывает двух видов: личный (один на один, DICPersonal) и групповой (DICGroup). Обмен идёт по WebSocket поверх общего соединения приложения с подпиской на канал chat|internal.
Подключение
Соединение, аутентификация и подписка выполняются через объект WebSocketMember (общий для всех WebSocket-соединений).
Сразу после установки соединения сервер присылает:
{
"action": "connect",
"obj": "WebSocketMember",
"code": 200,
"action_id": "<uuid>"
}
Клиент авторизуется (в params — JWT-токен в поле authorization):
{
"obj": "WebSocketMember",
"action": "auth",
"action_id": "<uuid>",
"params": { "authorization": "<JWT-токен>" }
}
Затем подписывается на канал внутреннего чата:
{
"obj": "WebSocketMember",
"action": "subscribe",
"action_id": "<uuid>",
"params": { "name": "chat|internal" }
}
Отписка — действие unsubscribe с тем же name. Для поддержания соединения сервер шлёт ping, клиент отвечает pong (копируя dt из запроса).
Объекты
Личный чат:
DICPersonal — личный чат — личный чат двух сотрудников;
DICPersonalMessage — сообщение личного чата — сообщение личного чата.
Групповой чат:
DICGroup — групповой чат — групповой чат;
DICGroupMessage — сообщение группового чата — сообщение группового чата.
DICPersonal — личный чат
Name |
Type |
Description |
Описание |
|---|---|---|---|
id |
Integer |
PK, auto |
ID чата |
members |
List[Integer] |
required, min_size=2, max_size=2, уникальная пара |
Два участника (ID сотрудников) |
params |
Dict |
ключ — ID сотрудника → DICPersonalParams, default={} |
Персональные настройки участников |
Настройки участника (DICPersonalParams): mute (логический, по умолчанию false) — отключить уведомления.
DICPersonalMessage — сообщение личного чата
Name |
Type |
Description |
Описание |
|---|---|---|---|
id |
Integer |
PK, auto |
ID сообщения |
chat_id |
Integer |
required, FK → DICPersonal.id |
ID личного чата |
create_dt |
Timestamp |
not null |
Время создания |
update_dt |
Timestamp |
nullable |
Время редактирования |
delete_dt |
Timestamp |
nullable |
Время удаления (soft-delete) |
sender |
Integer |
required |
ID отправителя (сотрудника) |
message |
PolyModelType |
required, один из типов DICHM* |
Тело сообщения |
status |
Integer |
required, choices=[0, 1, 2], default=0 |
Статус прочтения |
DICGroup — групповой чат
Name |
Type |
Description |
Описание |
|---|---|---|---|
id |
Integer |
PK, auto |
ID группового чата |
members |
List[Integer] |
required, min_size=0, max_size=10000 |
Участники (без администраторов) |
admins |
List[Integer] |
required, min_size=1, max_size=10000 |
Администраторы (хотя бы один) |
params |
Dict |
ключ — ID сотрудника → DICMemberParams, default={} |
Персональные настройки участников |
detail |
ModelType |
required, DICGroupDetail |
Название и иконка чата |
is_deleted |
Boolean |
required, default=False |
Признак удаления (soft-delete) |
DICGroupDetail: icon (строка, обязательно) — иконка; name (строка, обязательно, min_length=2) — название. Настройки участника (DICMemberParams): mute (логический, по умолчанию false).
Примечание
Автор чата должен быть в admins и не должен быть в members; списки admins и members не пересекаются.
DICGroupMessage — сообщение группового чата
Name |
Type |
Description |
Описание |
|---|---|---|---|
id |
Integer |
PK, auto |
ID сообщения |
chat_id |
Integer |
FK → DICGroup.id |
ID группового чата |
create_dt |
Timestamp |
not null |
Время создания |
update_dt |
Timestamp |
nullable |
Время редактирования |
delete_dt |
Timestamp |
nullable |
Время удаления (soft-delete) |
sender |
Integer |
required |
ID отправителя |
message |
PolyModelType |
required, один из типов DICHM* |
Тело сообщения |
status |
Dict |
ключ — ID сотрудника → {d, s} |
Статусы прочтения по участникам |
Элемент статуса: d (число, unix-время установки статуса), s (число, choices=[0, 1, 2], default=1).
Действия
DICPersonal: list, list_with_detail (со счётчиком непрочитанных и последним сообщением), get, append (members: [id1, id2]), delete.
DICPersonalMessage: list, append (chat_id, message), update (только отправитель), status_update (status — только получатель), delete (soft-delete, только отправитель), file_upload (chat_id + multipart-поле file_data, до 15 МБ).
DICGroup: list, list_with_detail, get, append (members, admins, detail), detail_update (только админ), update_members_and_admins (только админ), leave (выйти из чата), delete (пометить удалённым).
DICGroupMessage: list, append, update, status_update, delete, file_upload.
Типы сообщений (model_name)
Тип |
Назначение |
|---|---|
DICHMSimpleText |
Текстовое сообщение (поле value) |
DICHMHTMLText |
HTML-сообщение (value) |
DICHMMarkDownText |
Сообщение в Markdown (value) |
DICHMFile |
Файловое вложение (name, size, link; через file_upload) |
DICHMTypes |
Индикатор набора текста (не сохраняется в БД) |
DICHMImageBase64 |
Изображение в base64 (image, caption) |
DICHMImageListBase64 |
Несколько изображений в base64 (images, caption) |
Статусы сообщения
0— сохранено, не прочитано;1— доставлено;2— прочитано.