Конвертер экспорта Slack в текст — бесплатно и приватно

Превратите выгрузку рабочего пространства Slack в читаемые расшифровки. Превращает идентификаторы в имена, разворачивает ссылки и упоминания, убирает уведомления о входе и выходе.

Как разобрать экспорт рабочего пространства Slack в читаемый текст

Экспорт Slack — это не файл. Это дерево каталогов: по папке на канал, внутри каждой — по JSON-файлу на день, плюс горстка файлов с метаданными рабочего пространства в корне. Откройте любой дневной файл и увидите массив объектов-сообщений, где автор — это код вроде U04J8K2L9, текст прошит разметкой в угловых скобках, а метка времени — это Unix-время с микросекундами, записанное строкой.

Эта страница собирает из этого читаемые расшифровки — по одной на канал, в хронологическом порядке, с настоящими именами. Бросьте сюда весь .zip — он читается в этой вкладке браузера и никуда не загружается.

Имена лежат в другом файле

Именно это делает экспорт Slack нечитаемым без инструментов. Сообщения обозначают автора идентификатором пользователя и больше ничем. Соответствие этих идентификаторов человеческим именам живёт в users.json в корне архива — отдельно от каждого сообщения, которому оно нужно.

Поэтому users.json читается первым, раньше любого файла канала, и полученная карта тащится через весь разбор. У каждого пользователя есть несколько возможных имён — настоящее имя, отображаемое имя, логин аккаунта — и они пробуются именно в этом порядке: настоящее имя читатель узнаёт, а отображаемое — это то, что Slack показывает, когда оно задано. В части выгрузок объект user_profile вложен прямо в сообщение; если он есть, предпочтение отдаётся ему, потому что он фиксирует имя на тот момент, а не на сегодня.

У сообщений от ботов идентификатора пользователя нет вовсе — вместо него идентификатор бота и иногда имя. Такие случаи обрабатываются отдельно, чтобы вывод интеграции был подписан, а не выглядел пустым.

Собственная разметка Slack

Текст сообщения не является простым. Slack оборачивает несколько видов ссылок в угловые скобки, и если оставить их как есть, расшифровку трудно читать:

  • Упоминания пользователей выглядят как <@U04J8K2L9>. Они разрешаются по той же карте пользователей и превращаются в читаемое @имя.
  • Ссылки на каналы выглядят как <#C01234ABC|general> — иногда с именем после вертикальной черты, иногда без.
  • Ссылки имеют вид <https://example.com|текст ссылки>. Текст сохраняется, а URL ставится за ним в скобках, так что не теряется ни формулировка, ни адрес.
  • Широковещательные упоминания вроде <!here> и <!channel> превращаются в свои обычные эквиваленты.
  • HTML-сущности. Амперсанды, угловые скобки и кавычки в исходнике экранированы и раскодируются обратно.

Шум, от которого стоит избавиться

Slack записывает события теми же сообщениями, но с подтипом. Входы и выходы из канала, смены цели и темы, уведомления об архивации — всё это лежит в одном массиве с настоящим разговором. В рабочем пространстве любого размера их бывает больше, чем настоящих сообщений, особенно в общих каналах, куда всех добавляют автоматически. Они классифицируются как системные и по умолчанию выбрасываются.

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

Как склеиваются дни

Поскольку каждый канал разложен по файлам-дням, историю канала приходится собирать обратно. Файлы обрабатываются в отсортированном порядке — а для файлов, названных датой, это хронологический, — и сообщения дописываются в единую расшифровку по каналу. На выходе получается один непрерывный разговор под заголовком с названием канала, а не несколько сотен обрывков.

Файлы, не являющиеся данными каналов, — список каналов, логи интеграций, разнообразные индексы личных сообщений — пропускаются. Всё, что не удалось разобрать, тоже пропускается, а не роняет архив: один битый день не должен стоить вам всего рабочего пространства.

Для чего это используют

Сохранить историю до того, как бесплатное рабочее пространство упрётся в лимит сообщений и старая переписка перестанет открываться. Переехать на другой инструмент, оставив за собой что-то читаемое. Ответить на запрос комплаенса или юристов расшифровкой, а не каталогом JSON. Восстановить обсуждение вокруг решения, которое больше нигде не записали. Отдать канал проекта модели, чтобы она восстановила ход событий за полгода.

Как получить выгрузку

Владелец или администратор рабочего пространства может сделать её из настроек рабочего пространства: Импорт/экспорт данных, затем Экспорт. Стандартный экспорт покрывает публичные каналы. Приватные каналы и личные сообщения требуют другого уровня экспорта и, в большинстве юрисдикций, задокументированного основания.

Читается локально

Экспорт рабочего пространства — один из самых чувствительных файлов, которые производит организация. В нём внутренние обсуждения, имена клиентов, учётные данные, которые кто-то вставил в канал, куда не следовало, и откровенные мнения всех участников. Для большинства компаний загрузка такого в сторонний конвертер — это инцидент, о котором нужно сообщать.

Здесь ничего не передаётся. Архив открывается и разбирается на JavaScript в этой вкладке браузера, и отображается только читаемый результат. Ни один сервер файл не получает, поэтому нет ни вопроса о сроках хранения, ни того, чьё удаление надо запрашивать.

Другие платформы обрабатываются на общей странице экспорта переписок.