Convertisseur d'export Slack en texte — gratuit et privé

Transformez un export d'espace de travail Slack en transcriptions lisibles. Résout les identifiants en noms, déballe les liens et mentions, et écarte les avis d'arrivée et de départ.

Comprendre un export d'espace de travail Slack

Un export Slack n'est pas un fichier. C'est une arborescence : un dossier par canal, un fichier JSON par jour à l'intérieur de chacun, et une poignée de fichiers de métadonnées d'espace de travail à la racine. Ouvrez n'importe quel fichier quotidien et vous trouvez un tableau d'objets message où l'auteur est un code du genre U04J8K2L9, où le texte est truffé de balisage entre chevrons, et où l'horodatage est un temps Unix avec des microsecondes attaché sous forme de chaîne.

Cette page réassemble tout cela en transcriptions lisibles, une par canal, dans l'ordre des dates, avec de vrais noms. Déposez le .zip entier : il est lu dans cet onglet et n'est jamais envoyé.

Les noms sont dans un autre fichier

C'est la seule chose qui rend un export Slack illisible sans outillage. Les messages identifient leur auteur par un identifiant utilisateur et rien d'autre. La table qui associe ces identifiants à des noms humains se trouve dans users.json, à la racine de l'archive, séparée de chacun des messages qui en ont besoin.

users.json est donc lu en premier, avant tout fichier de canal, et la table obtenue est transportée tout au long de l'analyse. Chaque utilisateur propose plusieurs noms possibles — nom réel, nom affiché, identifiant de compte — et ils sont essayés dans cet ordre, puisque le nom réel est celui qu'un lecteur reconnaît et le nom affiché celui que montre Slack quand il est renseigné. Certains exports intègrent aussi un objet user_profile directement sur le message ; quand il est présent il est préféré, car il enregistre le nom tel qu'il était à l'époque plutôt que tel qu'il est aujourd'hui.

Les messages de robots n'ont aucun identifiant utilisateur : ils portent un identifiant de robot et parfois un nom d'utilisateur. Ils sont traités séparément pour que la sortie d'une intégration soit attribuée plutôt que de rester vide.

Le balisage propre à Slack

Le texte des messages n'est pas brut. Slack enveloppe plusieurs types de références entre chevrons et, laissées telles quelles, elles rendent une transcription pénible à lire :

  • Les mentions d'utilisateur apparaissent sous la forme <@U04J8K2L9>. Elles sont résolues avec la même table d'utilisateurs et deviennent un @nom lisible.
  • Les références de canal apparaissent sous la forme <#C01234ABC|general>, parfois avec le nom après la barre verticale et parfois sans.
  • Les liens prennent la forme <https://example.com|texte affiché>. Le texte est conservé avec l'URL entre parenthèses juste après, si bien que ni la formulation ni la destination ne sont perdues.
  • Les mentions générales comme <!here> et <!channel> deviennent leur équivalent simple.
  • Les entités HTML. Les esperluettes, les chevrons et les guillemets sont échappés dans la source et sont redécodés.

Du bruit qu'il vaut mieux écarter

Slack enregistre les événements comme des messages dotés d'un sous-type. Arrivées et départs de canal, changements d'objet et de sujet, avis d'archivage — tout cela figure dans le même tableau que la vraie conversation. Dans un espace de travail d'une certaine taille, ces entrées peuvent dépasser le nombre de vrais messages, en particulier dans les canaux généraux où tout le monde est ajouté automatiquement. Elles sont classées comme messages système et écartées par défaut.

Il y a aussi le cas d'un message sans aucun texte : un envoi de fichier, ou une publication de robot dont le contenu réside entièrement dans un bloc de pièce jointe. Les pièces jointes sont examinées à la recherche de texte avant qu'un message ne soit écarté, si bien qu'une intégration qui publie sa sortie en pièce jointe apporte tout de même son contenu au lieu de disparaître.

Réassembler les journées

Comme chaque canal est réparti sur un fichier par jour, l'historique d'un canal doit être rassemblé. Les fichiers sont traités dans l'ordre alphabétique, ce qui pour des noms de fichiers datés revient à l'ordre chronologique, et les messages sont ajoutés à une transcription unique par canal. Le résultat est une conversation continue sous un titre nommant le canal, plutôt que plusieurs centaines de fragments.

Les fichiers qui ne sont pas des données de canal — la liste des canaux, les journaux d'intégration, les divers index de messages directs — sont ignorés. Tout ce qui ne s'analyse pas est ignoré plutôt que de faire échouer l'archive : une journée corrompue ne vous coûte pas l'espace de travail.

À quoi cela sert

Préserver l'historique avant qu'un espace de travail gratuit n'atteigne sa limite de messages et que les conversations anciennes ne deviennent inaccessibles. Migrer vers un autre outil en gardant quelque chose de lisible derrière soi. Répondre à une demande légale ou de conformité avec une transcription plutôt qu'un dossier de JSON. Retrouver la discussion autour d'une décision qui n'a jamais été consignée ailleurs. Confier un canal de projet à un modèle pour reconstituer ce qui s'est passé sur six mois.

Obtenir l'export

Un propriétaire ou un administrateur d'espace de travail peut en produire un depuis les réglages de l'espace, sous Importer/Exporter des données, puis Exporter. L'export standard couvre les canaux publics. Les canaux privés et les messages directs demandent un niveau d'export différent et, dans la plupart des juridictions, un motif documenté.

Lu localement

Un export d'espace de travail est l'un des fichiers les plus sensibles qu'une organisation produise. Il contient des discussions internes, des noms de clients, des identifiants que des gens ont collés dans des canaux où ils n'auraient pas dû, et les opinions sincères de tout le monde. L'envoyer à un convertisseur tiers constitue, pour la plupart des entreprises, un incident à déclarer.

Rien ici n'est transmis. L'archive est ouverte et analysée par du JavaScript dans cet onglet, et seule la sortie lisible est affichée. Aucun serveur ne reçoit le fichier : il n'y a donc aucune question de conservation à trancher et rien dont demander la suppression.

Les autres plateformes sont prises en charge sur la page générale d'export de conversation.