Перейти к основному содержимому

Веб-сокет API

Time имеет базовую поддержку Веб-сокет API. Подключенный веб-сокет может отправлять запросы, отправляя следующее через соединение:

{
"action": "user_typing",
"seq": 2,
"data": {
"channel_id": "nhze199c4j87ped4wannrjdt9c",
"parent_id": ""
}
}

Это пример запроса user_typing, цель которого - уведомить сервер о том, что подключенный клиент начал печатать в канале или ветке. Поле action указывает, что запрашивается, и выполняет аналогичную функцию маршрута в HTTP API. Поле data используется для добавления любых дополнительных данных вместе с запросом. Сервер также поддерживает бинарные сообщения WebSocket в случае, если у клиента есть такая потребность.

seq или номер последовательности устанавливается клиентом и должен увеличиваться с каждым использованием. Он используется для различения ответов на запросы, которые приходят через веб-сокет. Например, стандартный ответ на вышеуказанный запрос будет:

{
"status": "OK",
"seq_reply": 2
}

Обратите внимание, что seq_reply равен 2, совпадая с seq оригинального запроса. Используя это, клиент может различить, для какого запроса предназначен ответ.

Если была какая-либо информация для ответа, она будет заключена в поле data.

В случае ошибки ответ будет:

{
"status": "FAIL",
"seq_reply": 2,
"error": {
"id": "some.error.id.here",
"message": "Some error message here"
}
}

Список действий API WebSocket:

  • user_typing
  • get_statuses_by_ids
  • update_presence

Действие update_presence

Устанавливает текущее присутствие пользователя в канале/ветке. Используется для получения событий typing. Если поля установлены в пустую строку ("") - событие typing не будет получено. Это действие должно быть отправлено хотя бы один раз, иначе все события typing будут получены. Пример:

{
"action": "update_presence",
"seq": 2,
"data": {
"channel_id": "nhze199c4j87ped4wannrjdt9c",
"thread_id": ""
}
}

Событие thread_read_changed

Пример:

{
"event": "thread_read_changed",
"data": {},
"broadcast": {
"omit_users": null,
"user_id": "87icc7gj8png9raxzz3t3ym7dy",
"channel_id": "",
"team_id": "k1bjiqyu37r7mp76zbnju4dzby",
"contains_sanitized_data": false,
"contains_sensitive_data": false
},
"seq": 2
}
  • Отметить ветку как прочитанную до определенного времени PUT /users/{user_id}/teams/{team_id}/threads/{thread_id}/read/{timestamp} Данные: - channel_id: - thread_id: - timestamp: то же, что и ThreadMemberships.LastViewed после обновления - unread_mentions: то же, что и ThreadMemberships.UnreadMentions после обновления - unread_replies: вычисляется по ветке после обновления - previous_unread_mentions: то же, что и ThreadMemberships.UnreadMentions до обновления - previous_unread_replies: вычисляется по ветке до обновления - previous_timestamp: то же, что и ThreadMemberships.LastViewed до обновления Пример:
{
"event": "thread_read_changed",
"data": {
"channel_id": "f4hqkj8ifjy5zpqr5nyjrrajsy",
"previous_unread_mentions": 0,
"previous_unread_replies": 5,
"thread_id": "ag1654pt3pdcfpfakxi774co6w",
"timestamp": 1706274237704,
"previous_timestamp": 1706274203704,
"unread_mentions": 0,
"unread_replies": 0
},
"broadcast": {
"omit_users": null,
"user_id": "87icc7gj8png9raxzz3t3ym7dy",
"channel_id": "",
"team_id": "k1bjiqyu37r7mp76zbnju4dzby",
"contains_sanitized_data": false,
"contains_sensitive_data": false
},
"seq": 2
}
  • Отметить ветку как непрочитанную с поста POST (/users/{user_id}/teams/{team_id}/threads/{thread_id}/set_unread/{post_id} Данные: - channel_id: - thread_id: - timestamp: то же, что и ThreadMemberships.LastViewed после обновления - unread_mentions: то же, что и ThreadMemberships.UnreadMentions после обновления - unread_replies: вычисляется по ветке после обновления - previous_unread_mentions: то же, что и ThreadMemberships.UnreadMentions до обновления - previous_unread_replies: вычисляется по ветке до обновления - previous_timestamp: то же, что и ThreadMemberships.LastViewed до обновления Broadcast: user_id, team_id

Пример:

{
"event": "thread_read_changed",
"data": {
"channel_id": "f4hqkj8ifjy5zpqr5nyjrrajsy",
"previous_unread_mentions": 0,
"previous_unread_replies": 0,
"thread_id": "ag1654pt3pdcfpfakxi774co6w",
"timestamp": 1706268533024,
"previous_timestamp": 1706268502024,
"unread_mentions": 0,
"unread_replies": 6
},
"broadcast": {
"omit_users": null,
"user_id": "87icc7gj8png9raxzz3t3ym7dy",
"channel_id": "",
"team_id": "k1bjiqyu37r7mp76zbnju4dzby",
"contains_sanitized_data": false,
"contains_sensitive_data": false
},
"seq": 3
}