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

Импорт через API

Сервер Time предоставляет REST API для импорта данных. Можно импортировать следующие данные:

  • Команды
  • Каналы (публичные и приватные)
  • Пользователи
  • Участие пользователей в команде
  • Участие пользователей в канале
  • Настройки уведомления пользователей
  • Кастомный статус пользователей
  • Сообщения
  • Реакции
  • Файлы
  • Сообщения в личных и групповых каналах
  • Статус непрочитанного личного и группового каналов
  • Схемы прав
  • Пользовательские эмоджи

Формат данных

Данные для импорта передаются в JSONL файле со следующими объектами. Объекты должны располагаться в указанном порядке.

Версия (Обязательно)

Объект "Версия" должен быть всегда первой строкой и не повторяться. Указывает на версию формата данных для импорта. В данный момент может быть только 1.

Схема (Необязательно)

Объекты схемы должны располагаться после объектов версии, но перед любыми объектами команды.

Эмоджи (Необязательно)

Объекты эмоджи должны располагаться после объекта версии, но перед любыми объектами команды.

Команда (Необязательно)

Объекты команды должны располагаться после любых объектов схемы, но перед любыми объектами каналов.

Канал (Необязательно)

Объекты каналов должны располагаться после любых объектов команды, но перед любыми объектами пользователей.

Пользователь (Необязательно)

Объекты пользователей должны располагаться после любых объектов команд и каналов, но перед любыми объектами сообщений. Каждый объект пользователя определяет команды и каналы, в которых он является участником. Если таких команд и каналов нет в файле, то они должны быть в базе даанных Time.

Сообщения (Необязательно)

Объекты сообщений должны располагаться после любых объектов пользователей, но перед любыми объектами личных каналов. Каждый объект сообщений определяет команду, канал и пользователя, отправившего сообщение. Если таких команд, каналов и пользователей нет в файле, то они должны быть в базе данных Time.

Личные каналы (Необязательно)

Объекты личных каналов должны располагаться после любых объектов сообщений, но перед любыми объектами личных сообщений.

Личные сообщения (Необязательно)

Объекты личных сообщений должны располагаться после любых объектов в файле. Каждый объект личного сообщения определяет пользователей, находящих в канале, и имя пользователя, отправившего сообщение. Если пользователей с таким именем нет в файле, то они должны быть в базе данных Time.

За исключением объектов версии, у каждого объекта есть поле или комбинация полей, которые определяют уникальность объекта. При импорте эти поля используется, чтобы определить, является ли объект новым или уже существующим и обновленным.

Поля для определения уникальности объектов

ОбъектПуть до объекта в JSONLПоля для определения уникальности
Версияversion
Схемаschemename
Эмоджиemojiname
Командаteamname
Каналchannelname, team
Пользовательuserusername
Настройки уведомления пользователяuser.notify_propsusername
Участие пользователя в командеuser.teamsteam, username
Участие пользователя в каналеuser.teams.channelsteam, channel, username
Сообщениеpostchannel, message, create_at
Сообщение в тредеpost.replies / direct_post.repliespost, message, create_at
Реакцияpost.reactionspost, emoji_name, create_at
Файлpost.attachments / direct_post.attachmentspath
Личный каналdirect_channelmembers
Личное сообщениеdirect_postchannel_members, user, message, create_at

Описание формата объектов

Версия

ПолеТипОписаниеОбязательность
typestringТип объекта, должен быть versionДа
versionnumberВерсия формата данных, должна быть 1Да
Пример
{
"type": "version",
"version": 1
}

Схема

ПолеТипОписаниеОбязательность
namestringИмя схемы. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов.Да
display_namestringОтображаемое имя схемы.Да
scopestringОбласть видимости схемы. Должно быть одним из следующих значений: team, channel.Да
descriptionstringОписание схемы.Нет
default_team_admin_roleRole objectРоль по умолчанию для администраторов команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать.Нет
default_team_user_roleRole objectРоль по умолчанию для пользователей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать.Нет
default_team_guest_roleRole objectРоль по умолчанию для гостей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать.Нет
default_team_restricted_guest_roleRole objectРоль по умолчанию для ограниченных гостей команды. Является обязательным, если установлен scope "team", иначе не должно присутствовать.Нет
default_channel_admin_roleRole objectРоль по умолчанию для администраторов канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать.Нет
default_channel_user_roleRole objectРоль по умолчанию для пользователей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать.Нет
default_channel_guest_roleRole objectРоль по умолчанию для гостей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать.Нет
default_channel_restricted_guest_roleRole objectРоль по умолчанию для ограниченных гостей канала. Является обязательным, если установлен scope "channel", иначе не должно присутствовать.Нет

Роль

ПолеТипОписаниеОбязательность
namestringИмя роли.Да
display_namestringОтображаемое имя роли.Да
descriptionstringОписание роли.Нет
permissionsarrayМассив строк с названием разрешений, которые должны быть у роли.Нет
Пример
{
"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"]
}
}
}

Эмоджи

ПолеТипОписаниеОбязательность
namestringИмя эмоджи. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов.Да
imagestringПуть до файла с изображением для эмоджи.Да
Пример
{
"type": "emoji",
"emoji": {
"name": "emoji_name",
"image": "emojis/emoji_name.png"
}
}

Команда

ПолеТипОписаниеОбязательность
namestringИмя команды. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов.Да
display_namestringОтображаемое имя команды.Да
typestringТип команды. Должно быть одним из следующих значений: O - для открытых команд, I - для команд доступных только по приглашению.Да
descriptionstringОписание команды.Нет
allow_open_invitebooleanФлаг, указывающий, что пользователи могут приглашать других пользователей в команду.Нет
schemestringИмя схемы, которая будет использоваться для команды.Нет
Пример
{
"type": "team",
"team": {
"name": "team_name",
"display_name": "Team display name",
"type": "O",
"description": "Team description",
"allow_open_invite": true,
"scheme": "scheme_name"
}
}

Канал

ПолеТипОписаниеОбязательность
teamstringИмя команды, к которой принадлежит канал.Да
namestringИмя канала. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов.Да
display_namestringОтображаемое имя канала.Да
typestringТип канала. Должно быть одним из следующих значений: O - для публичных каналов, P - для приватных каналов.Да
headerstringЗаголовок канала.Нет
purposestringЦель канала.Нет
schemestringИмя схемы, которая будет использоваться для канала.Нет
Пример
{
"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"
}
}

Пользователь

ПолеТипОписаниеОбязательность
usernamestringИмя пользователя. Должно состоять из латиницы в нижнем регистре, цифр и _ и иметь от 2 до 64 символов.Да
emailstringEmail пользователя.Нет
auth_servicestringИмя сервиса авторизации. Может иметь следующие значения:
"" или отсутствует - аутентификация по паролю;
"ldap" - аутентификация через LDAP;
"saml" - аутентификация через SAML;
"openid" - аутентификация через OpenID.
Нет
auth_datastringДанные для аутентификации пользователя. Обязательно если auth_service установлен и не "".Нет
passwordstringПароль пользователя. Требуется если auth_service не установлен и значение "".Нет
nicknamestringНикнейм пользователя.Нет
first_namestringИмя пользователя.Нет
last_namestringФамилия пользователя.Нет
positionstringДолжность пользователя.Нет
profile_imagestringИзображение профиля пользователя. Путь к существующему файлу.Нет
rolesstringРоли пользователя. Может иметь следующие значения: "system_user", "system_admin system_user"Нет
localestringЯзык пользователя.Нет
delete_atint64Время удаления пользователя, количество timestamp миллисекунд.Нет
teamsarrayМассив объектов UserTeamMembership, в которых состоит пользователь.Нет
themestringТема пользователя.Нет
military_timestringКакой формат времени отображать пользователю. "true" - 24 часовой, "false" - 12 часовой.Нет
collapse_previewsstringСворачивать превью ссылок по умолчанию. Может иметь следующие значения: "true" - сворачивать, "false" - не сворачивать.Нет
message_displaystringВ каком стиле отображать сообщения: "clean" - стандартный стиль, "compact" - компактный.Нет
channel_display_modestringВ каком стиле отображать каналы: "full" - полной длинны, "centered" - блок фиксированной ширины, расположенный по центу.Нет
use_markdown_previewboolИспользовать форматирование markdown при просмотре превью сообщений. Допустимые значения: "True", "False".Нет
use_formattingboolВключить форматирование сообщений для ссылок, эмоджи, стилей текста и разрывов строк. Допустимые значения: "True", "False".Нет
show_unread_sectionstringВключить показ непрочитанных сообщений в верху сайдбара. Может иметь следующие значения: "True", "False".Нет
email_intervalstringИнтервал отправки email уведомлений. Может иметь следующие значения:
"immediate" - email отправляются немедленно;
"fifteen" - email отправляются батчем, каждый 15 минут;
"hour" - email отправляются батчем каждый час.
Нет
notify_propsUserNotifyProps objectНастройки уведомлений пользователя.Нет

UserNotifyProps

ПолеТипОписаниеОбязательность
desktopstringУведомления для десктоп версии приложения. Может иметь следующие значения: "all", "mention", "none".Нет
desktop_soundstringВключение звука уведомлений для десктоп версии приложения. Может иметь следующие значения: "true", "false".Нет
emailstringВключение email уведомлений. Может иметь следующие значения: "true", "false".Нет
mobilestringУведомления для мобильных устройств. Может иметь следующие значения: "all", "mention", "none".Нет
mobile_push_statusstringНастройка, когда push уведомления должны отправляться. Может иметь следующие значения:
"online" - когда пользователь онлайн, отошел и оффлайн;
"away" - когда пользователь отошел и оффлайн;
"offline" - когда пользователь оффлайн.
Нет
channelstringЗапускают @all, @channel и @here упоминание. Может иметь следующие значения: "true", "false".Нет
commentsstringПредпочтение уведомлений об ответах. Может иметь следующие значения:
"any" - отправляется уведомление на сообщения в тредах, если пользователь начал тред или является его участником;
"root" - отправляется уведомление на сообщения в тредах, если пользователь начал тред;
"never" - не отправлять уведомление на сообщения в тредах, если пользователь не упомянут.
Нет
mention_keysstringНабор слов, через запятую, которые вызывают упоминания для пользователя.Нет

UserTeamMembership

ПолеТипОписаниеОбязательность
namestringИмя команды.Да
themestringТема пользователя для определенной команды.Нет
rolesstringРоли пользователя для определенной команды. Может иметь следующие значения: "team_user", "team_admin team_user"Нет
channelsarrayМассив объектов UserChannelMembership, в которых состоит пользователь.Нет

UserChannelMembership

ПолеТипОписаниеОбязательность
namestringИмя канала.Да
rolesstringРоли пользователя для определенного канала. Может иметь следующие значения: "channel_user", "channel_admin channel_user"Нет
notify_propsUserNotifyProps objectНастройки уведомлений пользователя для определенного канала.Нет
favoritebooleanЯвляется ли канал избранным. Может иметь значения: "true", "false".Нет

ChannelNotifyProps

ПолеТипОписаниеОбязательность
desktopstringУведомления для десктоп версии приложения. Может иметь следующие значения: "default", "all", "mention", "none".Нет
mobilestringУведомления для мобильных устройств. Может иметь следующие значения: "default", "all", "mention", "none".Нет
mark_unreadstringПомечать канал как непрочитанный. Может иметь следующие значения:
"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"
}
}
]
}
]
}
}

Сообщение

ПолеТипОписаниеОбязательность
teamstringИмя команды, в котором находится сообщение.Да
channelstringИмя канала, в котором находится сообщение.Да
userstringИмя пользователя, который отправил сообщение.Да
messagestringТекст сообщения.Да
propsobjectСвойства сообщения.Нет
create_atint64Время создания сообщения, количество timestamp миллисекунд.Да
flagged_byarrayМассив имен пользователей, кто пометил сообщение как сохраненное.Нет
repliesarrayМассив объектов Reply, в которых содержатся ответы на сообщение.Нет
reactionsarrayМассив объектов Reaction, в которых содержатся реакции на сообщение.Нет
attachmentsarrayМассив объектов Attachment, в которых содержатся вложения к сообщению.Нет

Reply

ПолеТипОписаниеОбязательность
userstringИмя пользователя, который ответил на сообщение.Да
messagestringТекст ответа на сообщение.Да
create_atint64Время создания ответа, количество timestamp миллисекунд.Да
flagged_byarrayМассив имен пользователей, кто пометил ответ как сохраненный.Нет
reactionsarrayМассив объектов Reaction, в которых содержатся реакции на ответ.Нет
attachmentsarrayМассив объектов Attachment, в которых содержатся вложения к ответу.Нет

Reaction

ПолеТипОписаниеОбязательность
userstringИмя пользователя, который добавил реакцию.Да
create_atint64Время создания реакции, количество timestamp миллисекунд.Да
emoji_namestringИмя эмоджи, который добавил пользователь.Да

Attachment

ПолеТипОписаниеОбязательность
pathstringПуть к файлу.Да
Пример
{
"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"
}
]
}
}

Личный канал

ПолеТипОписаниеОбязательность
membersarrayМассив имен пользователей, которые входят в личный канал.Да
headerstringЗаголовок личного канала.Нет
favorited_byarrayМассив имен пользователей, которые добавили личный канал в избранное.Нет
Пример
{
"type": "direct_channel",
"direct_channel": {
"members": ["username1", "username2"],
"header": "header",
"favorited_by": ["username1", "username2"]
}
}

Сообщение в личном канале

ПолеТипОписаниеОбязательность
channel_membersarrayМассив имен пользователей, которые входят в личный канал.Да
userstringИмя пользователя, который отправил сообщение.Да
messagestringТекст сообщения.Да
create_atint64Время создания сообщения, количество timestamp миллисекунд.Да
flagged_byarrayМассив имен пользователей, кто пометил сообщение как сохраненное.Нет
repliesarrayМассив объектов Reply, в которых содержатся ответы на сообщение.Нет
reactionsarrayМассив объектов Reaction, в которых содержатся реакции на сообщение.Нет
attachmentsarrayМассив объектов 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"
}
]
}
}