Convertidor de exportaciones de chat a texto — WhatsApp, ChatGPT, Slack

Convierte una exportación de WhatsApp, ChatGPT, Claude, Slack o Discord en una transcripción legible. El formato se detecta solo y nada sale de tu navegador.

Exportaciones de chat: cinco plataformas, cinco ideas incompatibles de lo mismo

Todas las plataformas de mensajería te dejan exportar tus datos, y cada una ha decidido por su cuenta cómo debe representarse una conversación en disco. El contenido de fondo es idéntico — quién dijo qué y cuándo — pero las formas no tienen nada en común. Una es un registro de texto cuyo formato de marca temporal depende de la región del teléfono. Otra es un árbol de nodos indexados por identificador donde la conversación es un único camino por el grafo. Otra es una carpeta de archivos organizados por canal y fecha, con los nombres guardados en un sitio completamente distinto.

Esta página los lee todos y produce una transcripción legible. La plataforma se deduce de la estructura del propio archivo y no de su nombre, así que puedes soltar una exportación sin decirle qué tienes. Todo corre en esta pestaña.

Cómo funciona la detección

Los nombres de archivo no sirven para esto. La mitad de estas plataformas llaman a su exportación conversations.json, y de todos modos los archivos se renombran al pasar por el correo y el almacenamiento en la nube. La detección lee estructura: un array chat_messages junto a un campo sender, un objeto mapping acompañado de create_time, un campo ts con una marca temporal Unix como cadena. Cada uno es una huella que solo produce una plataforma.

Hay una sutileza de orden que importa. Una exportación de WhatsApp de iPhone empieza por [12/03/2024, 14:23:01] — un corchete, que es también como empieza un array JSON. Comprobar JSON primero entregaría todos los registros de chat de iPhone al analizador JSON, que fallaría con ellos. El patrón de línea de WhatsApp se comprueba por tanto antes que la prueba del corchete, no después.

Las cinco formas

  • WhatsApp escribe un registro de texto simple, un mensaje por línea, con un formato de marca temporal que varía según la plataforma y el idioma. Los mensajes de varias líneas continúan en líneas desnudas sin marcador, así que un analizador tiene que tratar cualquier línea sin marca temporal como continuación de la de arriba.
  • ChatGPT guarda cada conversación como un mapa de nodos. Cada respuesta regenerada y cada pregunta editada se conserva como una rama, así que reconstruir lo que realmente viste implica recorrer desde la raíz siguiendo el último hijo en cada paso.
  • Claude usa un array plano, el más fácil de los cinco. El único matiz es que las exportaciones recientes ponen el texto del mensaje en una lista de bloques de contenido con tipo, mientras que las antiguas usan un campo de cadena simple: se leen ambas.
  • Slack es una estructura de directorios: una carpeta por canal, un archivo JSON por día, más un users.json aparte con la tabla de identidades. Los mensajes se refieren a las personas como U0123ABCD, así que sin ese archivo cada mensaje queda atribuido a un código.
  • Las exportaciones de Discord, tal como las produce la herramienta comunitaria habitual, son un único objeto con metadatos del canal y un array plano de mensajes. Sencillo, y lo más parecido a lo que diseñarías si empezaras de cero.

Qué se quita

Una exportación en crudo contiene mucho que nadie quiere leer. Los valores por defecto lo descartan, y unos interruptores lo devuelven:

Los avisos del sistema. El aviso de cifrado al principio de cada exportación de WhatsApp, las entradas y salidas de grupo, los cambios de asunto, los «este mensaje se ha eliminado», el subtipo channel_join de Slack. En un grupo con rotación pueden superar en número a los mensajes reales.

Las marcas de adjuntos. <Media omitted> aparece allí donde había una imagen o una nota de voz, y en un chat con muchas fotos es la mayor parte del archivo. Te dice que pasó algo y nada sobre qué fue.

La fontanería oculta. Las exportaciones de ChatGPT incluyen el prompt de sistema y el tráfico de herramientas, marcados como ocultos en la conversación. Nunca se te mostraron y se descartan.

Los archivos comprimidos también se admiten

Slack y ChatGPT entregan archivos .zip, no JSON suelto, así que el archivo comprimido se puede soltar tal cual. El lector busca primero conversations.json, ya que cuando hay uno es la exportación entera. En su defecto trata el archivo como un espacio de trabajo de Slack: carga users.json antes que nada para que las identidades se resuelvan, luego recorre los archivos diarios y los reúne de nuevo en una transcripción por canal en orden de fecha. Los archivos que no reconoce se omiten en lugar de hacer fracasar todo el conjunto.

Por qué esto corre en tu navegador

Esta es la entrada de este sitio donde más importa. Una exportación de chat no es un documento que escribieras para un público: son años de conversación privada, y contiene todo lo que se dijo en ella. Direcciones. Salud. Dinero. Cosas sobre otras personas que nunca dieron su consentimiento a nada de esto.

Subir eso a un servicio de conversión es confiar en la política de conservación de un desconocido, en sus controles de acceso, en sus copias de seguridad y en su futuro. El análisis de aquí es JavaScript ejecutándose en esta pestaña. Tu archivo lo lee el navegador, se convierte en memoria y se te muestra. No hay paso de subida, así que no hay nada que conservar ni nada que eliminar. Construirlo así hace además que su funcionamiento no cueste nada y que siga funcionando sin conexión una vez cargada la página.

Páginas por plataforma

Si sabes lo que tienes, las páginas dedicadas llevan las instrucciones de exportación de cada plataforma: WhatsApp, ChatGPT, Claude y Slack. Usan el mismo analizador, así que para el resultado da igual.