Konwerter eksportu Slack na tekst — za darmo i prywatnie

Zamień eksport przestrzeni roboczej Slack w czytelne transkrypcje. Rozwiązuje identyfikatory na nazwiska, rozpakowuje linki i wzmianki oraz usuwa komunikaty o dołączeniu i wyjściu.

Eksport workspace'u Slacka na tekst: jak z tego cokolwiek zrozumieć

Eksport ze Slacka nie jest plikiem. To drzewo katalogów: jeden katalog na kanał, w każdym jeden plik JSON na dzień, plus garść plików z metadanymi workspace'u w korzeniu. Otwórz dowolny plik dzienny, a znajdziesz tablicę obiektów wiadomości, w której autorem jest kod w rodzaju U04J8K2L9, tekst jest przetykany znacznikami w nawiasach ostrych, a znacznik czasu to uniksowa epoka z mikrosekundami, zapisana jako łańcuch znaków.

Ta strona składa to z powrotem w czytelne transkrypcje, jedną na kanał, w kolejności dat, z prawdziwymi nazwiskami. Upuść cały .zip — jest czytany w tej karcie przeglądarki i nigdy nie jest wysyłany.

Nazwiska są w innym pliku

To jedna jedyna rzecz, która czyni eksport ze Slacka nieczytelnym bez narzędzi. Wiadomości wskazują autora identyfikatorem użytkownika i niczym więcej. Odwzorowanie tych identyfikatorów na ludzkie nazwiska leży w users.json w korzeniu archiwum, osobno od każdej wiadomości, która go potrzebuje.

Dlatego users.json czytany jest jako pierwszy, przed jakimkolwiek plikiem kanału, a powstała mapa niesiona jest przez cały przebieg. Każdy użytkownik oferuje kilka możliwych nazw — imię i nazwisko, nazwę wyświetlaną, uchwyt konta — i próbuje się ich w tej kolejności, bo to imię i nazwisko rozpoznaje czytelnik, a nazwę wyświetlaną pokazuje Slack, gdy jest ustawiona. Niektóre eksporty osadzają też obiekt user_profile bezpośrednio na wiadomości; gdy jest, ma pierwszeństwo, bo zapisuje nazwę taką, jaka była wtedy, a nie taką, jaka jest teraz.

Wiadomości botów w ogóle nie mają identyfikatora użytkownika — niosą identyfikator bota, czasem nazwę użytkownika. Obsługiwane są osobno, żeby wyjście integracji było przypisane, zamiast pojawiać się jako puste.

Własne znaczniki Slacka

Tekst wiadomości nie jest czysty. Slack owija kilka rodzajów odwołań w nawiasy ostre, a zostawione samym sobie utrudniają czytanie transkrypcji:

  • Wzmianki o użytkownikach występują jako <@U04J8K2L9>. Rozwiązywane są przez tę samą mapę użytkowników i stają się czytelnym @imię.
  • Odwołania do kanałów występują jako <#C01234ABC|general>, czasem z nazwą po pionowej kresce, a czasem bez.
  • Linki mają postać <https://example.com|tekst wyświetlany>. Tekst zostaje, a adres ląduje po nim w nawiasie, więc nie ginie ani brzmienie, ani cel.
  • Wzmianki zbiorowe w rodzaju <!here> i <!channel> stają się swoimi zwykłymi odpowiednikami.
  • Encje HTML. Ampersandy, nawiasy ostre i cudzysłowy są w źródle escapowane i wracają do zwykłej postaci.

Szum, który warto wyrzucić

Slack zapisuje zdarzenia jako wiadomości z podtypem. Wejścia i wyjścia z kanału, zmiany celu i tematu, informacje o archiwizacji — wszystko to siedzi w tej samej tablicy co prawdziwa rozmowa. W workspasie jakiejkolwiek wielkości potrafi przeważać nad prawdziwymi wiadomościami, zwłaszcza w kanałach ogólnych, do których wszyscy dodawani są automatycznie. Klasyfikowane są jako wiadomości systemowe i domyślnie wyrzucane.

Jest też przypadek wiadomości bez żadnego tekstu: wgrany plik albo wpis bota, którego treść siedzi w całości w bloku załącznika. Załączniki sprawdzane są pod kątem tekstu, zanim wiadomość zostanie odrzucona, więc integracja publikująca swoje wyjście jako załącznik wciąż wnosi treść, zamiast zniknąć.

Sklejanie dni z powrotem

Skoro każdy kanał rozbity jest na jeden plik dziennie, historia kanału musi zostać zebrana z powrotem do kupy. Pliki przetwarzane są w kolejności posortowanej, co przy nazwach z datą jest kolejnością chronologiczną, a wiadomości doklejane są do jednej transkrypcji na kanał. Wynikiem jest jedna ciągła rozmowa pod nagłówkiem z nazwą kanału, a nie kilkaset fragmentów.

Pliki, które nie są danymi kanału — lista kanałów, logi integracji, rozmaite indeksy wiadomości prywatnych — są pomijane. Cokolwiek nie da się sparsować, jest pomijane, zamiast wywalać archiwum, więc jeden uszkodzony dzień nie kosztuje cię całego workspace'u.

Do czego się tego używa

Zachowanie historii, zanim darmowy workspace uderzy w limit wiadomości i starsze rozmowy przestaną być dostępne. Migracja do innego narzędzia z zostawieniem po sobie czegoś czytelnego. Odpowiedź na wniosek zgodnościowy albo prawny transkrypcją zamiast katalogiem JSON-a. Odzyskanie dyskusji wokół decyzji, której nigdzie indziej nie spisano. Podanie kanału projektowego modelowi, żeby odtworzył, co działo się przez pół roku.

Jak zdobyć eksport

Właściciel albo administrator workspace'u może go wygenerować z ustawień workspace'u, w Import/Export Data, potem Export. Standardowy eksport obejmuje kanały publiczne. Kanały prywatne i wiadomości bezpośrednie wymagają innego poziomu eksportu i, w większości jurysdykcji, udokumentowanego powodu.

Czytane lokalnie

Eksport workspace'u to jeden z bardziej wrażliwych plików, jakie produkuje organizacja. Zawiera wewnętrzne dyskusje, nazwiska klientów, poświadczenia, które ludzie wklejali do kanałów, do których nie powinni, i szczere opinie wszystkich zainteresowanych. Wysłanie go do zewnętrznego konwertera jest dla większości firm incydentem podlegającym zgłoszeniu.

Tutaj nic nie jest przesyłane. Archiwum otwiera i parsuje JavaScript w tej karcie przeglądarki, a wyświetlany jest wyłącznie czytelny wynik. Żaden serwer nie dostaje pliku, więc nie ma pytania o retencję, na które trzeba by odpowiadać, ani niczego, o czego usunięcie trzeba by prosić.

Inne platformy obsługiwane są na ogólnej stronie eksportu czatów.