Slack-export omzetten naar tekst — gratis en privé

Maak van een Slack-werkruimte-export leesbare transcripten. Zet gebruikers-id's om in namen, pakt links en vermeldingen uit en laat toetredings- en vertrekmeldingen weg.

Een Slack-export omzetten naar tekst en er wijs uit worden

Een Slack-export is geen bestand. Het is een mappenboom: één map per kanaal, daarin één JSON-bestand per dag, en een handvol metadatabestanden van de workspace in de wortel. Open een willekeurig dagbestand en je vindt een array van berichtobjecten waarin de auteur een code als U04J8K2L9 is, de tekst doorregen is met markup tussen punthaken, en het tijdstempel een Unix-epoch met microseconden is, opgeslagen als string.

Deze pagina zet dat weer in elkaar tot leesbare transcripten, één per kanaal, op datumvolgorde, met echte namen. Sleep de hele .zip naar binnen — hij wordt in dit browsertabblad gelezen en nooit geüpload.

De namen staan in een ander bestand

Dit is het ene ding dat een Slack-export zonder gereedschap onleesbaar maakt. Berichten identificeren hun auteur met een user-id en verder niets. De koppeling van die id's aan mensennamen staat in users.json in de wortel van het archief, los van elk bericht dat hem nodig heeft.

Dus wordt users.json als eerste gelezen, vóór welk kanaalbestand dan ook, en de resulterende kaart wordt door de hele parse meegedragen. Elke gebruiker biedt meerdere mogelijke namen — echte naam, weergavenaam, de accounthandle — en die worden in die volgorde geprobeerd, want de echte naam is wat een lezer herkent en de weergavenaam is wat Slack toont zodra die is ingesteld. Sommige exports zetten ook een object user_profile rechtstreeks op het bericht; is dat er, dan krijgt het voorrang, want het legt de naam vast zoals hij toen was in plaats van zoals hij nu is.

Botberichten hebben helemaal geen user-id; ze dragen een bot-identifier en soms een gebruikersnaam. Die worden apart afgehandeld, zodat de uitvoer van een integratie wordt toegeschreven in plaats van leeg te blijven.

Slacks eigen markup

Berichttekst is niet plat. Slack verpakt verschillende soorten verwijzingen in punthaken, en onaangeroerd maken die een transcript slecht leesbaar:

  • Vermeldingen van gebruikers verschijnen als <@U04J8K2L9>. Die worden opgezocht in dezelfde gebruikerskaart en worden een leesbare @naam.
  • Kanaalverwijzingen verschijnen als <#C01234ABC|general>, soms met de naam achter de pijp en soms zonder.
  • Links hebben de vorm <https://example.com|weergavetekst>. De tekst blijft behouden met de URL erachter tussen haakjes, zodat noch de bewoording noch de bestemming verloren gaat.
  • Broadcast-vermeldingen zoals <!here> en <!channel> worden hun gewone equivalenten.
  • HTML-entiteiten. Ampersands, punthaken en aanhalingstekens staan geëscaped in de bron en worden teruggedecodeerd.

Ruis die het weggooien waard is

Slack legt gebeurtenissen vast als berichten met een subtype. Mensen die een kanaal in en uit gaan, wijzigingen van doel en onderwerp, archiveringsmeldingen — het staat allemaal in dezelfde array als het echte gesprek. In een workspace van enige omvang kunnen die de echte berichten in aantal overtreffen, zeker in algemene kanalen waar iedereen automatisch aan wordt toegevoegd. Ze worden geclassificeerd als systeemberichten en standaard weggegooid.

Dan is er nog het geval van een bericht zonder enige tekst: een geüpload bestand, of een botbericht waarvan de inhoud volledig in een attachment-blok zit. Attachments worden op tekst gecontroleerd voordat een bericht wordt weggegooid, zodat een integratie die haar uitvoer als attachment plaatst haar inhoud alsnog bijdraagt in plaats van te verdwijnen.

De dagen weer aan elkaar

Omdat elk kanaal over één bestand per dag is verdeeld, moet de geschiedenis van een kanaal weer worden verzameld. Bestanden worden in gesorteerde volgorde verwerkt, wat voor bestanden met een datum in de naam chronologisch is, en berichten worden aan één transcript per kanaal toegevoegd. Het resultaat is één doorlopend gesprek onder een kop met de kanaalnaam, in plaats van enkele honderden fragmenten.

Bestanden die geen kanaaldata zijn — de kanalenlijst, integratielogs, de diverse indexen van directe berichten — worden overgeslagen. Alles wat niet te parsen valt wordt overgeslagen in plaats van het archief te laten mislukken, zodat één beschadigde dag je niet de hele workspace kost.

Waar dit voor wordt gebruikt

Geschiedenis bewaren voordat een gratis workspace tegen zijn berichtenlimiet aanloopt en oudere gesprekken onbereikbaar worden. Overstappen naar een ander gereedschap en toch iets leesbaars achterlaten. Een compliance- of juridisch verzoek beantwoorden met een transcript in plaats van een map vol JSON. De discussie rond een besluit terughalen dat nergens anders is opgeschreven. Een projectkanaal aan een model geven om te reconstrueren wat er in zes maanden is gebeurd.

De export ophalen

Een eigenaar of beheerder van de workspace kan er een maken vanuit de workspace-instellingen, onder Import/Export Data, dan Export. De standaardexport dekt de openbare kanalen. Privékanalen en directe berichten vragen een ander exportniveau en, in de meeste rechtsgebieden, een gedocumenteerde reden.

Lokaal gelezen

Een workspace-export is een van de gevoeligere bestanden die een organisatie voortbrengt. Er staat interne discussie in, klantnamen, inloggegevens die mensen hebben geplakt in kanalen waar dat niet hoorde, en de openhartige meningen van iedereen die erbij betrokken was. Dat uploaden naar een externe converter is voor de meeste bedrijven een meldingsplichtig incident.

Hier wordt niets verzonden. Het archief wordt geopend en geparseerd door JavaScript in dit browsertabblad, en alleen de leesbare uitvoer wordt getoond. Geen server ontvangt het bestand, dus er is geen bewaarvraag te beantwoorden en niets waarvan je verwijdering moet vragen.

Andere platforms worden afgehandeld op de algemene chatexportpagina.