Cargando...
 
Skip to main content

Manipulación de un export de Telegram


NOTA: Al momento de escribir este artículo estamos usando la versión Telegram para Android v12.4.0 (6506)

Telegram tiene la posibilidad de exportar todo un canal (o grupo) de forma completa. O sea con todos sus mensajes de texto, audio, multimedia, etc. Ese proceso lo hace en dos formatos: HTML y JSON, y una estructura de carpetas con los medios.

Si bien quedan exportados completo, los canales que están divididos por temas (o tópicos) no salen así separados, sino que te da todo de corrido. Sin embargo, es posible volver a separar los temas, pero para eso hay que entender cómo es la estructura de los mensajes y trabajar sobre eso.

Este artículo pretende revisar la estructura de los exports de Telegram. Esta aproximación es bastante amateur y con mucha ayuda de algún LLM (en esta ocasión, principalmente Google Gemini).

Para trabajar con estas salidas unificadas, obviamente que lo más útil es usar los archivos JSON. El siguiente es un fragmento de ese JSON en el cual:

  1. Se crea un tema.
  2. Se publica un mensaje en ese tema.


(NOTA: por alguna razón TikiWiki no indenta bien el fragmento)

{

"id": 2,
"type": "service",
"date": "2025-12-01T13:25:52",
"date_unixtime": "1764606352",
"actor": "Federico",
"actor_id": "user301480998",
"action": "topic_created",
"title": "Topic A",
"text": "",
"text_entities": []
},
{
"id": 3,
"type": "message",
"date": "2025-12-01T13:25:52",
"date_unixtime": "1764606352",
"from": "Federico",
"from_id": "user301480998",
"reply_to_message_id": 2,
"text": "Este es el Topic A",
"text_entities": [
{
"type": "plain",
"text": "Este es el Topic A"
}
]

},


En esto lo importante es analizar las claves y sus valores de cada objeto. Por ejemplo, el objeto que crea el tópico tiene un id ("2"), es de un tipo ("service") está definido por una acción ("topic_created"). También podemos ver el título del tema ("title": "Topic A",).

El siguiente objeto, un mensaje dentro de "Topic A", tiene una clave que hace que quede agrupado dentro del tópico: "reply_to_message_id": 2.

Estos son tres objetos de un grupo con tópicos:

{

"id": 4,
"type": "service",
"date": "2025-12-01T13:26:07",
"date_unixtime": "1764606367",
"actor": "Federico",
"actor_id": "user301480998",
"action": "topic_created",
"title": "Topic B",
"text": "",
"text_entities": []
},
[...]
{
"id": 13,
"type": "message",
"date": "2025-12-08T13:43:32",
"date_unixtime": "1765212212",
"from": "Federico",
"from_id": "user301480998",
"reply_to_message_id": 4,
"text": "Topic B, Topic B",
"text_entities": [
{
"type": "plain",
"text": "Topic B, Topic B"
}
]
},
[...]
{
"id": 21,
"type": "message",
"date": "2026-02-09T18:11:32",
"date_unixtime": "1770671492",
"from": "Federico",
"from_id": "user301480998",
"reply_to_message_id": 13,
"text": "Quién dijo qué?",
"text_entities": [
{
"type": "plain",
"text": "Quién dijo qué?"
}
]

},


Acá el primer objeto (id 4) define el tópico, el segundo (id 13) es un mensaje suelto dentro de ese tópico y el tercero (id 21) es una respuesta a un mensaje (definido como el objeto id 13) dentro de ese tópico. En este caso, para rastrear a qué tópico pertenece el id 21 hay que rastrear a que mensaje responde el mensaje respondido: 21 responde a 13 que responde a 4 (creación del tópico); entonces, 21 pertenece a ese tópico.