WebSocket события
Формат сообщений
Все сообщения в формате JSON:
{
"event": "event_name",
"data": {
// данные события
},
"timestamp": "2026-01-10T15:30:00Z"
}
События
new_chat
Новый чат создан (пользователь написал впервые).
{
"event": "new_chat",
"data": {
"user_id": 123456789,
"user_name": "Иван Петров",
"username": "ivan_petrov",
"source": "telegram",
"first_message": "Привет!"
},
"timestamp": "2026-01-10T15:30:00Z"
}
new_message
Новое сообщение в существующем чате.
{
"event": "new_message",
"data": {
"message_id": 123,
"user_id": 123456789,
"user_name": "Иван Петров",
"text": "Когда будет доставка?",
"file_path": null,
"source": "telegram"
},
"timestamp": "2026-01-10T15:31:00Z"
}
user_typing
Пользователь печатает сообщение.
{
"event": "user_typing",
"data": {
"user_id": 123456789,
"user_name": "Иван Петров"
},
"timestamp": "2026-01-10T15:32:00Z"
}
message_read
Пользователь прочитал сообщение (для виджета).
{
"event": "message_read",
"data": {
"user_id": -1234567890,
"last_read_message_id": 125
},
"timestamp": "2026-01-10T15:33:00Z"
}
user_online
Пользователь стал онлайн.
{
"event": "user_online",
"data": {
"user_id": 123456789
},
"timestamp": "2026-01-10T15:34:00Z"
}
user_offline
Пользователь ушёл в оффлайн.
{
"event": "user_offline",
"data": {
"user_id": 123456789
},
"timestamp": "2026-01-10T15:35:00Z"
}
Обработка событий
function handleEvent(data) {
switch (data.event) {
case 'new_chat':
// Добавить новый чат в список
addChat(data.data);
playNotificationSound();
break;
case 'new_message':
// Добавить сообщение в историю
addMessage(data.data);
if (data.data.user_id !== currentChatId) {
incrementUnreadCount(data.data.user_id);
}
playNotificationSound();
break;
case 'user_typing':
// Показать индикатор печати
showTypingIndicator(data.data.user_id);
break;
case 'user_online':
updateUserStatus(data.data.user_id, 'online');
break;
case 'user_offline':
updateUserStatus(data.data.user_id, 'offline');
break;
}
}
Фильтрация событий
По умолчанию вы получаете все события организации. Для фильтрации отправьте:
// Подписка только на определённого пользователя
ws.send(JSON.stringify({
action: 'subscribe',
filter: {
user_id: 123456789
}
}));
// Отписка
ws.send(JSON.stringify({
action: 'unsubscribe',
filter: {
user_id: 123456789
}
}));