Сервер Time предоставляет REST API для импорта данных.
Можно импортировать следующие данные:
- Команды
- Каналы (публичные и приватные)
- Пользователи
- Участие пользователей в команде
- Участие пользователей в канале
- Настройки уведомления пользователей
- Кастомный статус пользователей
- Сообщения
- Реакции
- Файлы
- Сообщения в личных и групповых каналах
- Статус непрочитанного личного и группового каналов
- Схемы прав
- Пользовательские эмоджи
Формат данных
Данные для импорта передаются в JSONL файле со следующими объектами.
Объекты должны располагаться в указанном порядке.
Версия (Обязательно)
Объект "Версия" должен быть всегда первой строкой и не повторяться.
Указывает на версию формата данных для импорта.
В данный момент может быть только 1
.
Схема (Необязательно)
Объекты схемы должны располагаться после объектов версии, но перед любыми объектами команды.
Эмоджи (Необязательно)
Объекты эмоджи должны располагаться после объекта версии, но перед любыми объектами команды.
Команда (Необязательно)
Объекты команды должны располагаться после любых объектов схемы, но перед любыми объектами каналов.
Канал (Необязательно)
Объекты каналов должны располагаться после любых объектов команды, но перед любыми объектами пользователей.
Пользователь (Необязательно)
Объекты пользователей должны располагаться после любых объектов команд и каналов, но перед любыми объектами сообщений.
Каждый объект пользователя определяет команды и каналы, в которых он является участником.
Если таких команд и каналов нет в файле, то они должны быть в базе даанных Time.
Сообщения (Необязательно)
Объекты сообщений должны располагаться после любых объектов пользователей, но перед любыми объектами личных каналов.
Каждый объект сообщений определяет команду, канал и пользователя, отправившего сообщение.
Если таких команд, каналов и пользователей нет в файле, то они должны быть в базе данных Time.
Личные каналы (Необязательно)
Объекты личных каналов должны располагаться после любых объектов сообщений, но перед любыми объектами личных сообщений.
Личные сообщения (Необязательно)
Объекты личных сообщений должны располагаться после любых объектов в файле.
Каждый объект личного сообщения определяет пользователей, находящих в канале, и имя пользователя, отправившего сообщение.
Если пользователей с таким именем нет в файле, то они должны быть в базе данных Time.
За исключением объектов версии, у каждого объекта есть поле или комбинация полей, которые определяют уникальность объекта.
При импорте эти поля используется, чтобы определить, является ли объект новым или уже существующим и обновленным.
Поля для определения уникальности объектов
Объект | Путь до объекта в JSONL | Поля для определения уникальности |
---|
Версия | version | — |
Схема | scheme | name |
Эмоджи | emoji | name |
Команда | team | name |
Канал | channel | name , team |
Пользователь | user | username |
Настройки уведомления пользователя | user.notify_props | username |
Участие пользователя в команде | user.teams | team , username |
Участие пользователя в канале | user.teams.channels | team , channel , username |
Сообщение | post | channel , message , create_at |
Сообщение в треде | post.replies / direct_post.replies | post , message , create_at |
Реакция | post.reactions | post , emoji_name , create_at |
Файл | post.attachments / direct_post.attachments | path |
Личный канал | direct_channel | members |
Личное сообщение | direct_post | channel_members , user , message , create_at |
Описание формата объектов
Версия
Поле | Тип | Описание | Обязательность |
---|
type | string | Тип объекта, должен быть version | Да |
version | number | Версия формата данных, должна быть 1 | Да |
Пример
{
"type": "version",
"version": 1
}
Схема
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя схемы. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов. | Да |
display_name | string | Отображаемое имя схемы. | Да |
scope | string | Область видимости схемы. Должно быть одним из следующих значений: team , channel . | Да |
description | string | Описание схемы. | Нет |
default_team_admin_role | Role object | Роль по умолчанию для администраторов команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать. | Нет |
default_team_user_role | Role object | Роль по умолчанию для пользователей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать. | Нет |
default_team_guest_role | Role object | Роль по умолчанию для гостей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать. | Нет |
default_team_restricted_guest_role | Role object | Роль по умолчанию для ограниченных гостей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать. | Нет |
default_channel_admin_role | Role object | Роль по умолчанию для администраторов канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать. | Нет |
default_channel_user_role | Role object | Роль по умолчанию для пользователей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать. | Нет |
default_channel_guest_role | Role object | Роль по умолчанию для гостей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать. | Нет |
default_channel_restricted_guest_role | Role object | Роль по умолчанию для ограниченных гостей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать. | Нет |
Роль
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя роли. | Да |
display_name | string | Отображаемое имя роли. | Да |
description | string | Описание роли. | Нет |
permissions | array | Массив строк с названием разрешений, которые должны быть у роли. | Нет |
Пример
{
"type": "scheme",
"scheme": {
"name": "scheme_name",
"display_name": "Scheme display name",
"scope": "team",
"default_team_admin_role": {
"name": "custom_team_admin_role",
"display_name": "Custom Scheme Team Admin Role",
"description": "Admin role",
"permissions": ["manage_emojis", "create_emojis"]
},
"default_team_user_role": {
"name": "custom_team_user_role",
"display_name": "Custom Scheme Team User Role",
"description": "User role",
"permissions": ["manage_others_emojis"]
}
}
}
Эмоджи
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя эмоджи. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов. | Да |
image | string | Путь до файла с изображением для эмоджи. | Да |
Пример
{
"type": "emoji",
"emoji": {
"name": "emoji_name",
"image": "emojis/emoji_name.png"
}
}
Команда
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя команды. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов. | Да |
display_name | string | Отображаемое имя команды. | Да |
type | string | Тип команды. Должно быть одним из следующих значений: O - для открытых команд, I - для команд доступных только по приглашению. | Да |
description | string | Описание команды. | Нет |
allow_open_invite | boolean | Флаг, указывающий, что пользователи могут приглашать других пользователей в команду. | Нет |
scheme | string | Имя схемы, которая будет использоваться для команды. | Нет |
Пример
{
"type": "team",
"team": {
"name": "team_name",
"display_name": "Team display name",
"type": "O",
"description": "Team description",
"allow_open_invite": true,
"scheme": "scheme_name"
}
}
Канал
Поле | Тип | Описание | Обязательность |
---|
team | string | Имя команды, к которой принадлежит канал. | Да |
name | string | Имя канала. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов. | Да |
display_name | string | Отображаемое имя канала. | Да |
type | string | Тип канала. Должно быть одним из следующих значений: O - для публичных каналов, P - для приватных каналов. | Да |
header | string | Заголовок канала. | Нет |
purpose | string | Цель канала. | Нет |
scheme | string | Имя схемы, которая будет использоваться для канала. | Нет |
Пример
{
"type": "channel",
"channel": {
"team": "team_name",
"name": "channel_name",
"display_name": "Channel display name",
"type": "O",
"header": "Channel header",
"purpose": "Channel purpose",
"scheme": "scheme_name"
}
}
Пользователь
Поле | Тип | Описание | Обязательность |
---|
username | string | Имя пользователя. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов. | Да |
email | string | Email пользователя. | Нет |
auth_service | string | Имя сервиса авторизации. Может иметь следующие значения:
"" или отсутствует - аутентификация по паролю;
"ldap" - аутентификация через LDAP;
"saml" - аутентификация через SAML;
"openid" - аутентификация через OpenID. | Нет |
auth_data | string | Данные для аутентификации пользователя. Обязательно если auth_service установлен и не "" . | Нет |
password | string | Пароль пользователя. Требуется если auth_service не установлен и значение "" . | Нет |
nickname | string | Никнейм пользователя. | Нет |
first_name | string | Имя пользователя. | Нет |
last_name | string | Фамилия пользователя. | Нет |
position | string | Должность пользователя. | Нет |
profile_image | string | Изображение профиля пользователя. Путь к существующему файлу. | Нет |
roles | string | Роли пользователя. Может иметь следующие значения: "system_user" , "system_admin system_user" | Нет |
locale | string | Язык пользователя. | Нет |
delete_at | int64 | Время удаления пользователя, количество timestamp миллисекунд. | Нет |
teams | array | Массив объектов UserTeamMembership, в которых состоит пользователь. | Нет |
theme | string | Тема пользователя. | Нет |
military_time | string | Какой формат времени отображать пользователю. "true" - 24 часовой, "false" - 12 часовой. | Нет |
collapse_previews | string | Сворачивать превью ссылок по умолчанию. Может иметь следующие значения: "true" - сворачивать, "false" - не сворачивать. | Нет |
message_display | string | В каком стиле отображать сообщения: "clean" - стандартный стиль, "compact" - компактный. | Нет |
channel_display_mode | string | В каком стиле отображать каналы: "full" - полной длинны, "centered" - блок фиксированной ширины, расположенный по центу. | Нет |
use_markdown_preview | bool | Использовать форматирование markdown при просмотре превью сообщений. Допустимые значения: "True" , "False" . | Нет |
use_formatting | bool | Включить форматирование сообщений для ссылок, эмоджи, стилей текста и разрывов строк. Допустимые значения: "True" , "False" . | Нет |
show_unread_section | string | Включить показ непрочитанных сообщений в верху сайдбара. Может иметь следующие значения: "True" , "False" . | Нет |
email_interval | string | Интервал отправки email уведомлений. Может иметь следующие значения:
"immediate" - email отправляются немедленно;
"fifteen" - email отправляются батчем, каждый 15 минут;
"hour" - email отправляются батчем каждый час. | Нет |
notify_props | UserNotifyProps object | Настройки уведомлений пользователя. | Нет |
UserNotifyProps
Поле | Тип | Описание | Обязательность |
---|
desktop | string | Уведомления для десктоп версии приложения. Может иметь следующие значения: "all" , "mention" , "none" . | Нет |
desktop_sound | string | Включение звука уведомлений для десктоп версии приложения. Может иметь следующие значения: "true" , "false" . | Нет |
email | string | Включение email уведомлений. Может иметь следующие значения: "true" , "false" . | Нет |
mobile | string | Уведомления для мобильных устройств. Может иметь следующие значения: "all" , "mention" , "none" . | Нет |
mobile_push_status | string | Настройка, когда push уведомления должны отправляться. Может иметь следующие значения:
"online" - когда пользователь онлайн, отошел и оффлайн;
"away" - когда пользователь отошел и оффлайн;
"offline" - когда пользователь оффлайн. | Нет |
channel | string | Запускают @all , @channel и @here упоминание. Может иметь следующие значения: "true" , "false" . | Нет |
comments | string | Предпочтение уведомлений об ответах. Может иметь следующие значения:
"any" - отправляется уведомление на сообщения в тредах, если пользователь начал тред или является его участником;
"root" - отправляется уведомление на сообщения в тредах, если пользователь начал тред;
"never" - не отправлять уведомление на сообщения в тредах, если пользователь не упомянут. | Нет |
mention_keys | string | Набор слов, через запятую, которые вызывают упоминания для пользователя. | Нет |
UserTeamMembership
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя команды. | Да |
theme | string | Тема пользователя для определенной команды. | Нет |
roles | string | Роли пользователя для определенной команды. Может иметь следующие значения: "team_user" , "team_admin team_user" | Нет |
channels | array | Массив объектов UserChannelMembership, в которых состоит пользователь. | Нет |
UserChannelMembership
Поле | Тип | Описание | Обязательность |
---|
name | string | Имя канала. | Да |
roles | string | Роли пользователя для определенного канала. Может иметь следующие значения: "channel_user" , "channel_admin channel_user" | Нет |
notify_props | UserNotifyProps object | Настройки уведомлений пользователя для определенного канала. | Нет |
favorite | boolean | Является ли канал избранным. Может иметь значения: "true" , "false" . | Нет |
ChannelNotifyProps
Поле | Тип | Описание | Обязательность |
---|
desktop | string | Уведомления для десктоп версии приложения. Может иметь следующие значения: "default" , "all" , "mention" , "none" . | Нет |
mobile | string | Уведомления для мобильных устройств. Может иметь следующие значения: "default" , "all" , "mention" , "none" . | Нет |
mark_unread | string | Помечать канал как непрочитанный. Может иметь следующие значения:
"all" - для всех непрочитанных сообщений;
"mention" - только для упоминаний. | Нет |
Пример
{
"type": "user",
"user": {
"username": "username",
"email": "email@example.ru",
"teams": [
{
"name": "team_name",
"theme": "team_theme",
"roles": "team_user",
"channels": [
{
"name": "channel_name",
"roles": "channel_user",
"notify_props": {
"desktop": "all"
}
}
]
}
]
}
}
Сообщение
Поле | Тип | Описание | Обязательность |
---|
team | string | Имя команды, в котором находится сообщение. | Да |
channel | string | Имя канала, в котором находится сообщение. | Да |
user | string | Имя пользователя, который отправил сообщение. | Да |
message | string | Текст сообщения. | Да |
props | object | Свойства сообщения. | Нет |
create_at | int64 | Время создания сообщения, количество timestamp миллисекунд. | Да |
flagged_by | array | Массив имен пользователей, кто пометил сообщение как сохраненное. | Нет |
replies | array | Массив объектов Reply, в которых содержатся ответы на сообщение. | Нет |
reactions | array | Массив объектов Reaction, в которых содержатся реакции на сообщение. | Нет |
attachments | array | Массив объектов Attachment, в которых содержатся вложения к сообщению. | Нет |
Reply
Поле | Тип | Описание | Обязательность |
---|
user | string | Имя пользователя, который ответил на сообщение. | Да |
message | string | Текст ответа на сообщение. | Да |
create_at | int64 | Время создания ответа, количество timestamp миллисекунд. | Да |
flagged_by | array | Массив имен пользователей, кто пометил ответ как сохраненный. | Нет |
reactions | array | Массив объектов Reaction, в которых содержатся реакции на ответ. | Нет |
attachments | array | Массив объектов Attachment, в которых содержатся вложения к ответу. | Нет |
Reaction
Поле | Тип | Описание | Обязательность |
---|
user | string | Имя пользователя, который добавил реакцию. | Да |
create_at | int64 | Время создания реакции, количество timestamp миллисекунд. | Да |
emoji_name | string | Имя эмоджи, который добавил пользователь. | Да |
Attachment
Поле | Тип | Описание | Обязательность |
---|
path | string | Путь к файлу. | Да |
Пример
{
"type": "post",
"post": {
"team": "team_name",
"channel": "channel_name",
"user": "username",
"message": "message",
"props": {
"attachments": [
{"text": "attachment_text", "pretext": "attachment_pretext"}
],
},
"create_at": 1547561600000,
"flagged_by": ["username1"],
"replies": [
{
"user": "username",
"message": "message",
"create_at": 1547561600000,
"flagged_by": ["username11"],
}
],
"reactions": [
{
"user": "username",
"create_at": 1547561600000,
"emoji_name": "emoji_name"
}
],
"attachments": [
{
"path": "path"
}
]
}
}
Личный канал
Поле | Тип | Описание | Обязательность |
---|
members | array | Массив имен пользователей, которые входят в личный канал. | Да |
header | string | Заголовок личного канала. | Нет |
favorited_by | array | Массив имен пользователей, которые добавили личный канал в избранное. | Нет |
Пример
{
"type": "direct_channel",
"direct_channel": {
"members": ["username1", "username2"],
"header": "header",
"favorited_by": ["username1", "username2"]
}
}
Сообщение в личном канале
Поле | Тип | Описание | Обязательность |
---|
channel_members | array | Массив имен пользователей, которые входят в личный канал. | Да |
user | string | Имя пользователя, который отправил сообщение. | Да |
message | string | Текст сообщения. | Да |
create_at | int64 | Время создания сообщения, количество timestamp миллисекунд. | Да |
flagged_by | array | Массив имен пользователей, кто пометил сообщение как сохраненное. | Нет |
replies | array | Массив объектов Reply, в которых содержатся ответы на сообщение. | Нет |
reactions | array | Массив объектов Reaction, в которых содержатся реакции на сообщение. | Нет |
attachments | array | Массив объектов Attachment, в которых содержатся вложения к сообщению. | Нет |
Пример
{
"type": "direct_post",
"direct_post": {
"channel_members": ["username1", "username2"],
"user": "username",
"message": "message",
"create_at": 1547561600000,
"flagged_by": ["username1"],
"replies": [
{
"user": "username",
"message": "message",
"create_at": 1547561600000,
}
],
"reactions": [
{
"user": "username",
"create_at": 1547561600000,
"emoji_name": "emoji_name"
}
],
"attachments": [
{
"path": "path"
}
]
}
}