Chat-Exporte: fünf Plattformen, fünf unvereinbare Vorstellungen von derselben Sache
Jede Messaging-Plattform lässt Sie Ihre Daten exportieren, und jede hat unabhängig entschieden, wie eine Unterhaltung auf der Festplatte auszusehen hat. Der zugrunde liegende Inhalt ist identisch — wer wann was gesagt hat — aber die Formen haben nichts gemeinsam. Eines ist ein Textprotokoll, dessen Zeitstempelformat von der Region des Telefons abhängt. Eines ist ein Baum aus Knoten, adressiert über Bezeichner, in dem die Unterhaltung ein einzelner Pfad durch den Graphen ist. Eines ist ein Ordner voller Dateien, nach Kanal und Datum sortiert, während die Namen ganz woanders liegen.
Diese Seite liest sie alle und erzeugt ein lesbares Transkript. Die Plattform wird an der Struktur der Datei erkannt, nicht an ihrem Namen, Sie können also einen Export ablegen, ohne ihm zu sagen, was Sie haben. Alles läuft in diesem Browser-Tab.
Wie die Erkennung funktioniert
Dateinamen taugen dafür nichts. Die Hälfte dieser Plattformen nennt ihren Export conversations.json, und Dateien werden auf dem Weg durch E-Mail und Cloud-Speicher ohnehin umbenannt. Die Erkennung liest daher Struktur: ein chat_messages-Array neben einem sender-Feld, ein mapping-Objekt zusammen mit create_time, ein ts-Feld mit einem Unix-Zeitstempel als Zeichenkette. Jedes davon ist ein Fingerabdruck, den nur eine Plattform erzeugt.
Eine Feinheit der Reihenfolge zählt. Ein WhatsApp-Export vom iPhone beginnt mit [12/03/2024, 14:23:01] — einer eckigen Klammer, mit der auch ein JSON-Array anfängt. Zuerst auf JSON zu prüfen würde jedes iPhone-Chatprotokoll dem JSON-Parser übergeben, der daran scheitert. Das WhatsApp-Zeilenmuster wird deshalb vor der Klammerprüfung getestet, nicht danach.
Die fünf Formen
- WhatsApp schreibt ein reines Textprotokoll, eine Nachricht je Zeile, mit einem Zeitstempelformat, das je nach Plattform und Spracheinstellung variiert. Mehrzeilige Nachrichten laufen ohne Markierung auf nackten Zeilen weiter, ein Parser muss also jede Zeile ohne Zeitstempel als Fortsetzung der darüber behandeln.
- ChatGPT legt jede Unterhaltung als Knotenkarte ab. Jede neu erzeugte Antwort und jede bearbeitete Frage bleibt als Zweig erhalten, das tatsächlich Gesehene lässt sich also nur rekonstruieren, indem man von der Wurzel aus geht und bei jedem Schritt dem letzten Kind folgt.
- Claude verwendet ein flaches Array, das einfachste der fünf. Die einzige Unebenheit: neuere Exporte legen den Nachrichtentext in eine Liste typisierter Inhaltsblöcke, ältere in ein schlichtes Zeichenketten-Feld. Beides wird gelesen.
- Slack ist eine Verzeichnisstruktur: ein Ordner je Kanal, eine JSON-Datei je Tag, dazu eine separate
users.jsonmit der Identitätszuordnung. Nachrichten benennen Personen alsU0123ABCD, ohne diese Datei ist also jede Nachricht einem Code zugeschrieben. - Discord-Exporte, wie sie das verbreitete Community-Werkzeug erzeugt, sind ein einzelnes Objekt mit Kanal-Metadaten und einem flachen Nachrichten-Array. Unkompliziert und dem am nächsten, was man entwerfen würde, wenn man neu anfinge.
Was entfernt wird
Ein roher Export enthält vieles, was niemand lesen will. Die Voreinstellungen lassen es weg, Schalter holen es zurück:
Systemhinweise. Der Verschlüsselungshinweis am Anfang jedes WhatsApp-Exports, Gruppenbeitritte und -austritte, Betreffänderungen, „diese Nachricht wurde gelöscht“, Slacks channel_join-Subtyp. In einer Gruppe mit Fluktuation können diese die echten Nachrichten übertreffen.
Anhang-Platzhalter. <Media omitted> steht überall dort, wo ein Bild oder eine Sprachnachricht war, und in einem fotolastigen Chat ist das der größte Teil der Datei. Es sagt Ihnen, dass etwas passiert ist, und nichts darüber, was.
Verborgene Mechanik. ChatGPT-Exporte enthalten den System-Prompt und den Werkzeugverkehr, gekennzeichnet als in der Unterhaltung verborgen. Sie wurden Ihnen nie angezeigt und entfallen.
Archive werden ebenfalls verarbeitet
Slack und ChatGPT liefern .zip-Dateien, kein loses JSON, das Archiv kann also direkt abgelegt werden. Der Leser sucht zuerst nach conversations.json, denn wenn eine vorhanden ist, ist sie der ganze Export. Andernfalls behandelt er das Archiv als Slack-Workspace: er lädt users.json vor allem anderen, damit Identitäten aufgelöst werden, geht dann die Tagesdateien durch und fügt sie in Datumsreihenfolge wieder zu einem Transkript je Kanal zusammen. Nicht erkannte Dateien werden übersprungen, statt das ganze Archiv scheitern zu lassen.
Warum das in Ihrem Browser läuft
Das ist die Eingabe auf dieser Seite, bei der es am meisten zählt. Ein Chat-Export ist kein Dokument, das Sie für ein Publikum geschrieben haben — es sind Jahre privater Unterhaltung, und er enthält alles, was darin gesagt wurde. Adressen. Gesundheit. Geld. Dinge über andere Menschen, die dem nie zugestimmt haben.
Das an einen Umwandlungsdienst hochzuladen heißt, der Aufbewahrungsrichtlinie einer fremden Firma zu vertrauen, ihren Zugriffskontrollen, ihren Sicherungen und ihrer Zukunft. Das Parsen hier ist JavaScript, das in diesem Tab läuft. Ihre Datei wird vom Browser gelesen, im Arbeitsspeicher umgewandelt und Ihnen gezeigt. Es gibt keinen Upload-Schritt, also nichts aufzubewahren und nichts zu löschen. Es so zu bauen bedeutet außerdem, dass der Betrieb nichts kostet und es offline funktioniert, sobald die Seite geladen ist.
Seiten je Plattform
Wenn Sie wissen, was Sie haben, tragen die eigenen Seiten die Exportanleitung für die jeweilige Plattform: WhatsApp, ChatGPT, Claude und Slack. Sie verwenden denselben Parser, für das Ergebnis macht es also keinen Unterschied.