Дата публикации
ai_products

Как превратить 54 тысячи сообщений из Telegram в офлайн‑«мозг» в Obsidian

Что появилось / что изменилось

Автор собрал рабочий конвейер, который превращает экспорт Telegram (54 тысячи сообщений из 500+ каналов и чатов) в структурированную базу знаний в Obsidian. Главное, что вы получаете:

  • Автоматическая конвертация экспорта Telegram Desktop (JSON + HTML) в Markdown‑заметки для Obsidian.
  • Сохранение структуры: личные чаты, группы, каналы, «Избранное», контакты — раскладываются по папкам Contacts/, Saved Messages/, Personal Chats/, Groups/, Channels/, Other Chats/.
  • Работа с медиа: скрипт индексирует все файлы экспорта, находит реальные пути к фото, видео, документам и копирует их в хранилище Obsidian.
  • Сохранение форматирования и метаданных: даты, типы чатов, авторы сообщений.
  • Возможность группировать сообщения по дням (GROUP_BY_DAY=true), чтобы длинные чаты не превращались в один гигантский файл.
  • Настройка через переменные окружения: можно указать путь к result.json, директорию экспорта Telegram и папку для Obsidian‑хранилища.
  • Подключение LLM‑чата к полученной базе знаний: как локально (на случай отключения интернета), так и через веб‑API.
  • Дополнительно автор использует эмбеддинговую нейросеть, чтобы автоматически строить связи между заметками и получить офлайн‑клон «мозга» 500+ человек.

Цифровой масштаб: 54 000+ сообщений, более 500 каналов и чатов, полный экспорт Telegram в одном Obsidian‑хранилище.

Как это работает

Базовая идея простая: Telegram экспортирует историю чатов, Python‑скрипт превращает её в Markdown и раскладывает по структуре Obsidian.

  1. Экспорт из Telegram Desktop

    Telegram создаёт папку вида:

    DataExport_YYYY-MM-DD/
    ├── result.json          # метаданные экспорта
    ├── chats/
    │   ├── chat_001/
    │   │   ├── messages.html
    │   │   └── photos/
    │   └── chat_002/
    ├── profile_pictures/
    └── export_results.html
    
  2. Конфигурация через переменные окружения

    В коде задаются пути и режимы работы:

    JSON_FILE = os.getenv('TELEGRAM_JSON_FILE', 'result.json')
    EXPORT_BASE = Path(os.getenv('TELEGRAM_EXPORT_BASE', '.'))
    OUTPUT_DIR = Path(os.getenv('OBSIDIAN_OUTPUT_DIR', 'Telegram_Export'))
    PATCH_FILE = Path(os.getenv('PATCH_FILE', 'patch.txt'))
    GENERATE_PATCH_FILE = os.getenv('GENERATE_PATCH_FILE', 'true').lower() == 'true'
    COPY_MEDIA = os.getenv('COPY_MEDIA', 'true').lower() == 'true'
    GROUP_BY_DAY = os.getenv('GROUP_BY_DAY', 'true').lower() == 'true'
    

    Это позволяет запускать один и тот же скрипт на разных экспортных папках и управлять копированием медиа.

  3. Класс конвертера

    Класс TelegramToObsidian хранит данные экспорта, счётчики статистики (количество чатов, сообщений, медиа, контактов) и индексы для поиска файлов. Он отвечает за полный цикл: от чтения JSON до генерации Markdown и копирования файлов.

  4. Индексация медиа через patch.txt

    Проблема: пути к медиа в JSON часто не совпадают с реальной файловой структурой. Решение — сначала обойти весь экспорт и сохранить дерево файлов:

    result = subprocess.run(
        ['ls', '-R', str(EXPORT_BASE)],
        capture_output=True,
        text=True,
        check=True,
        encoding='utf-8'
    )
    with open(PATCH_FILE, 'w', encoding='utf-8') as f:
        f.write(result.stdout)
    

    Затем метод index_media_from_patch проходит по patch.txt, собирает пути ко всем медиафайлам с расширениями .jpg, .png, .gif, .webp, .mp4, .webm, .pdf, .zip, .mp3 и создаёт словарь media_index с несколькими ключами на один файл: по имени и по относительному пути внутри chats/.

  5. Поиск медиафайлов по нескольким стратегиям

    Метод find_media_file сначала фильтрует «пустые» и не включённые в экспорт файлы, а дальше пробует четыре варианта:

    • поиск по имени файла в media_index;
    • поиск по полному пути из JSON;
    • перебор индекса с совпадением по имени;
    • попытка собрать путь относительно EXPORT_BASE с разными вариантами (chats/, без chats/ и т.п.).

    Это повышает шанс найти реальный файл даже при хаотичной структуре экспорта.

  6. Генерация структуры Obsidian

    На выходе получается папка Telegram_Export/ с подкаталогами под типы чатов и индексным файлом Index.md. Каждый чат превращается в один или несколько Markdown‑файлов (если включено группирование по дням), медиа копируются рядом или в отдельные подпапки.

  7. Слой эмбеддингов и LLM‑чат

    После конвертации автор прогоняет заметки через эмбеддинговую нейросеть, строит связи между похожими фрагментами и подключает чат с LLM. Чат умеет работать как с локальной моделью, так и через веб‑API. В итоге вы можете общаться с собственной базой знаний как с ассистентом.

Что это значит для вас

Этот подход полезен, если вы живёте в Telegram: читаете каналы, учитесь по постам, общаетесь в рабочих чатах, а потом не можете ничего найти через пару месяцев.

Где это помогает:

  • Личная база знаний. Все важные посты, обсуждения, гайды и ссылки переезжают в Obsidian. Дальше вы связываете их с заметками из других источников.
  • Исследовательские и рабочие проекты. Можно собрать историю обсуждений из групп и каналов, раскидать по темам и подключить LLM для быстрых ответов по этому корпусу.
  • Офлайн‑доступ. Если вы боитесь блокировок или потери доступа к Telegram, Obsidian‑хранилище на диске даёт резервную копию знаний.
  • Навигация по огромным чатам. Опция GROUP_BY_DAY превращает бесконечные ветки обсуждений в ежедневные дайджесты.

Где не стоит ждать чудес:

  • Если вы не пользуетесь Obsidian и не готовы к файловой модели заметок, придётся сначала освоить сам инструмент.
  • Если у вас несколько гигабайт медиа, конвертация и индексация займут заметное время и место на диске.
  • Без эмбеддингов и LLM это всё равно просто структурированная история чатов — ценность даёт именно последующая работа с заметками.

Продукт строится вокруг Telegram Desktop и локального Python‑скрипта. Для запуска не нужен VPN, но для использования LLM через внешние API доступ к интернету потребуется. Локальный режим LLM решает эту проблему, если вы готовы настраивать модели у себя.

Место на рынке

Решение конкурирует не с конкретным сервисом, а с целым классом подходов:

  • Встроенный поиск Telegram ограничен и плохо работает как долговременная память: нет нормальных тэгов, ссылок между заметками, графа знаний.
  • Облачные сервисы заметок (Notion, Evernote) дают удобный интерфейс, но не предлагают прямой и детальный импорт Telegram‑экспорта на уровне отдельных сообщений и медиа.
  • Obsidian‑плагины для Telegram обычно работают через ботов и не рассчитаны на массовый импорт 54 000+ сообщений из 500+ чатов с сохранением структуры экспорта.

Здесь ставка на другое: полный контроль у пользователя, локальное хранилище, чёткая структура папок и возможность подключить любые эмбеддинговые модели и LLM по своему выбору. Если вы уже живёте в Obsidian и хотите забрать туда свой Telegram, это более прямой и детальный путь, чем точечные боты или ручной копипаст.


Читайте также

Как превратить 54 тысячи сообщений из Telegram в офлайн‑«мозг» в Obsidian — VogueTech | VogueTech