статьяhakku.ai · гайд, 15.09.2026

    Экспорт и анализ Telegram-чата: 2 способа выгрузить историю

    Как выгрузить историю Telegram-чата или канала и отдать её ИИ: экспорт в JSON за 10 минут или MCP-коннектор к API для просмотров и статистики канала.

    Есть два способа выгрузить и проанализировать Telegram-чат, канал или группу с помощью ИИ. Первый — экспорт из десктопного клиента: десять минут, ничего настраивать не нужно. Второй — коннектор к API: полчаса разовой настройки, зато доступны просмотры, пересылки, участники и выгрузка сразу по всем чатам.

    Как выбрать способ

    Если нужен один чат или канал — экспорта из клиента достаточно. Если нужны сразу все чаты, статистика своего канала или метрики, которых в обычном экспорте нет (просмотры, пересылки, комментарии), — придётся завести коннектор к API.

    Вариант 1. Экспорт из клиентаВариант 2. Коннектор к API
    Настройканет~30 минут, разово
    Один чат или каналидеальноизбыточно
    Сразу все чатыневыносимо вручнуюединственный способ
    Тексты, реакции, медиаестьесть
    Просмотры, пересылки, комментариинетесть
    Участники группынетесть
    Статистика своего каналанетесть (окно 93 дня)
    Повторяемостьруками каждый разскриптом, инкрементально

    Этот гайд можно не читать, а отдать ИИ. Загрузите этот текст в Claude Desktop, Claude Code, Codex или другого агента с доступом к компьютеру и напишите одну фразу:

    «Прочитай гайд. Мне нужно проанализировать [свой канал / чат / всю переписку]. Определи по гайду подходящий вариант, задай мне недостающие вопросы и проведи меня по шагам: что скачать, что нажать, какие команды выполнить в терминале.»

    Дальше агент сам: либо ведёт по экспорту из клиента (вариант 1), либо собирает MCP-коннектор (вариант 2, промпт для него готовый — ниже). Ваша часть — вставлять команды в терминал и вводить код из Telegram: пароли и коды агенту не показывают, их вводите только вы.

    Вариант 1. Экспорт из клиента

    Шаг 1. Поставить нужный клиент

    Экспорт есть только в Telegram Desktop. У нативного macOS-клиента такого пункта нет.

    Скачать: desktop.telegram.org

    В Mac App Store Telegram Desktop называется «Telegram Lite» — чтобы не конфликтовать с нативным «Telegram». То есть «облегчённый» на вид клиент и есть полноценный.

    Различить в доке проще всего по иконке. Оба значка — белый самолётик на синем, но фон разный:

    Иконка Telegram Desktop (Telegram Lite): сплошная синяя плитка
    Сплошная синяя плитка — тот самый, экспорт есть.
    Иконка нативного Telegram для macOS: белая плитка с синим кругом внутри
    Белая плитка с синим кругом внутри — не тот, пункта экспорта в нём нет.

    Шаг 2. Открыть экспорт

    Чат, канал или группа → справа вверху → Export chat history.

    Меню канала в Telegram Desktop с пунктом Export chat history

    Подписываться на канал не нужно — экспорт доступен и там, где вы не участник.

    Шаг 3. Настроить

    Диалог Chat export settings в Telegram Desktop
    • Формат — переключить на JSON. По умолчанию в диалоге стоит Format: HTML. Эта строка кликабельная: нажать на неё и выбрать JSON — в нём даты, авторы, реакции и id сообщений лежат отдельными полями, и нейросеть или скрипт с ними работают. HTML годится только полистать глазами: распарсить его потом не выйдет.
    • Медиа — снять все галочки. Photos включён по умолчанию, и это главная причина, почему экспорт идёт часами вместо минут: картинки и видео весят кратно больше текста, а для анализа переписки не нужны. У Files свой ползунок Size limit (8 МБ) — он режет вложения, не сообщения; тексты выгрузятся целиком в любом случае.
    • Диапазон. From: the oldest message, to: present кликабельно, открывает календарь. Сброс — Reset.
    Календарь выбора диапазона дат в настройках экспорта Telegram

    Папка. Path по умолчанию Downloads/Telegram Desktop.

    Дальше — Export.

    Шаг 4. Дождаться

    • Первый в жизни экспорт Telegram задерживает примерно на сутки и шлёт подтверждение на другое устройство. Обойти нельзя — не планировать на день дедлайна.
    • Скорость равна скорости API: 8 000 сообщений — минуты, канал на 100 тысяч с медиа — часы.
    • Клиент должен оставаться открытым, экспорт не фоновый.

    На выходе — result.json (или .html) и папки photos/, video_files/, voice_messages/.

    Шаг 5. Отдать выгрузку агенту

    Файл result.json перетащить в Claude, Codex, ChatGPT или другого ассистента с чтением файлов и сформулировать задачу. Выгрузка на несколько десятков тысяч сообщений в контекст целиком не влезет — в этом случае просить агента считать по файлу кодом (питоном), а не «прочитать всё»: цифры тогда воспроизводимы и не выдуманы.

    Примеры запросов — брать как заготовку и править под себя.

    Разбор своего или чужого канала

    Вот выгрузка Telegram-канала (result.json). Посчитай по ней кодом, не на глаз:
    частоту публикаций по неделям; лучшее время и день по вовлечённости; топ-10 и антитоп-10 постов
    с цифрами; какие темы и форматы систематически выше среднего, какие ниже; динамику за период.
    Учти: посты из нескольких картинок — это одно сообщение, склей по grouped_id до подсчётов,
    иначе счётчик завышается в полтора раза. Если текст пуст, ищи его в rich_message.blocks.
    Ответ: таблица с цифрами + пять выводов, что делать с контент-планом.

    Тон голоса (tone of voice) для дальнейших текстов

    Это выгрузка нашего канала. Собери описание авторского тона, чтобы по нему можно было писать
    новые посты: структура типичного поста, длина, как начинается и чем заканчивается, обращение
    к читателю, лексика и характерные обороты, отношение к эмодзи и форматированию, чего автор
    не делает никогда. Подтверди каждый пункт двумя-тремя дословными цитатами из выгрузки.
    Отдельно — пять анти-примеров: фразы, которые в этом канале звучали бы чужеродно.

    Личная переписка: договорённости и хвосты

    Вот выгрузка личной переписки с человеком. Собери хронологию: о чём договаривались, какие
    обещания давали обе стороны, что из этого выполнено и что повисло без ответа. Отдельно —
    список открытых вопросов, адресованных мне, с датой и цитатой. Не пересказывай бытовое общение
    и не интерпретируй эмоции, только факты и договорённости.

    Рабочий чат или группа

    Вот выгрузка рабочего чата. Выдели: принятые решения с датой и автором; поручения и на ком они;
    повторяющиеся темы, которые всплывают снова и снова (признак нерешённой проблемы);
    кто из участников реально ведёт обсуждение, а кто только читает. Каждый пункт — со ссылкой
    на id сообщения, чтобы можно было проверить.

    Дашборд по результатам

    По посчитанным цифрам собери одностраничный HTML-дашборд, который открывается двойным кликом
    без интернета: ключевые метрики крупно, график динамики, таблица топ-постов. Никаких внешних
    библиотек и ссылок — всё внутри файла.

    Что в выгрузке есть и чего нет

    ЕстьНет
    Тексты, даты, авторы, ответы, форвардыПросмотры
    Реакции с разбивкой по эмодзиПересылки
    Хештеги, ссылки, упоминанияКомментарии к постам канала
    Медиафайлы (если отметили)Приток и отток подписчиков

    Комментарии лежат в привязанной группе и тянутся отдельно.

    Две ловушки парсинга

    Пустое поле text. У сообщений с форматированием текст лежит в rich_message.blocks, а text — пустая строка. Наивный парсер их теряет. Правило: text пуст и медиа нет — идти в blocks.

    Альбомы. Несколько картинок — это несколько сообщений: подпись и реакции на первом, остальные пустые. Без склейки по grouped_id счётчик постов завышается примерно в полтора раза, а «постов без реакций» — в десятки. Склеивать нужно до подсчётов.

    Вариант 2. Коннектор к API

    Даёт то, чего нет в выгрузке: просмотры, пересылки, комментарии, участников, статистику своего канала и обход всех чатов разом. Логика простая: вы получаете ключ приложения, дальше коннектор пишет ИИ, а вы запускаете четыре команды в терминале. Программировать не нужно.

    Шаг 1. Получить api_id и api_hash

    Открыть: my.telegram.org → API development tools

    1. Номер телефона в международном формате. Код придёт в сам Telegram, не по SMS.
    2. Форма «Create new application»: App title (любое), Short name (латиница, 5–32 символа), Platform — Desktop. URL можно оставить пустым.
    3. Забрать App api_id и App api_hash. Второй раз их удобно не покажут — сохранить сразу.

    Если рабочая пара уже есть — новую заводить не нужно. api_id идентифицирует приложение, а не пользователя: одной парой можно логиниться под любым аккаунтом.

    ERROR без объяснений — это почти всегда сеть, а не блокировка аккаунта. Заграничный VPN даёт рассинхрон: страна IP не совпадает со страной кода номера. Заходить с IP страны номера, в инкогнито. После нескольких попыток включается rate-limit на час-другой, выглядит он так же — подождать.

    Практическая рекомендация. Проверено в июле 2026 года. Если форма не поддаётся, самый надёжный способ — оказаться в стране, откуда она открывается: Армения, Грузия, Казахстан. Достаточно одной поездки, приложение создаётся один раз и работает дальше отовсюду.

    Второй вариант, без поездки, — попросить создать приложение друзей или родственников, которые уже там. Это безопасно: api_id идентифицирует приложение, а не человека. Доступа к вашему аккаунту такая пара не даёт — чтобы подключиться, всё равно нужно ввести одноразовый код из Telegram и облачный пароль, а они приходят только вам.

    Шаг 2. Отдать сборку коннектора ИИ

    Открыть Claude Code или Codex в терминале (либо Claude Desktop с доступом к файлам) и вставить промпт целиком. api_id и api_hash в промпт не вписывать — агент спросит их отдельно или попросит положить в переменные окружения.

    Собери мне локальный MCP-сервер к Telegram, чтобы ассистент мог читать мои чаты и каналы.
    Я не программист: объясняй по шагам и давай команды, которые я просто вставлю в терминал.
    
    ЧТО ДОЛЖНО ПОЛУЧИТЬСЯ
    · Python-сервер на библиотеках Telethon (MTProto) и mcp[cli]>=1.0.0,<2 — версию 2.0 не ставить,
      в ней вырезан FastMCP и сервер не поднимется.
    · Живёт локально, вне облачных и расшаренных папок:
      ~/Library/Application Support/Claude/mcp-servers/telegram-read/
      (Windows: %APPDATA%Claudemcp-servers	elegram-read)
    · Рядом run.sh (run.bat), который создаёт venv, ставит зависимости и запускает сервер.
    
    ДОСТУПЫ И СЕКРЕТЫ
    · api_id и api_hash спроси у меня и пропиши в env запуска или в Keychain — не в код,
      не в git, не в общие папки. api_hash — секрет, api_id — нет.
    · Файл сессии (.session) = ключ от моего аккаунта: держать рядом с сервером, в .gitignore,
      никуда не копировать.
    · Первый вход интерактивный: номер → код из Telegram → облачный пароль, если включена 2FA.
      Команду для входа дай мне отдельно, я выполню её сам в терминале.
    
    ИНСТРУМЕНТЫ (только чтение)
    · get_me — проверка, под кем вошли
    · list_dialogs(limit, only_unread, include_archived) — список чатов, тип и число участников;
      дефолтный лимит обрезает по активности, для полноты ставь limit>=4000
    · get_chat_history(chat, limit, offset_date) — история: текст, дата, автор, ответы, форварды,
      и для постов канала публичные счётчики views / forwards / reactions / comments
    · search_in_chat(chat, query, limit) — поиск внутри чата
    · get_participants(chat) — участники группы, с троттлингом по FLOOD_WAIT
    · export_history(chat, out_path) — выгрузка всей истории чата в локальный SQLite,
      инкрементально: читать от последнего сохранённого id, чтобы обрыв не начинал заново
    Никаких пишущих операций: не отправлять сообщения, не вступать, не удалять. Если нужен черновик —
    только save_draft (кладёт текст в поле ввода, наружу ничего не уходит).
    
    ПОДВОДНЫЕ КАМНИ, УЧЕСТЬ СРАЗУ
    · Долгие запросы выносить в фоновую задачу — иначе вызов обрывается по таймауту.
    · Глобальный поиск не умеет сдвиг по дате: старое искать по выгруженной истории.
    · Если Telegram блокируется провайдером, нужен зарубежный прокси: Telethon принимает его
      ТОЛЬКО словарём (python-socks), кортеж старого формата молча игнорируется.
    · client.is_connected() возвращает True без обращения к серверу — проверять живым запросом
      (например GetNearestDcRequest).
    
    ФИНАЛ
    Зарегистрируй сервер в конфиге клиента (claude_desktop_config.json / .mcp.json),
    скажи, что мне перезапустить, и проверь связь вызовом get_me.

    Дальше агент пишет файлы сам. Ваша часть — следующий шаг.

    Шаг 3. Четыре команды в терминале

    Страшно выглядит только в первый раз. Терминал — обычное окно, куда вставляют строку и жмут Enter; ничего печатать вручную не нужно, точные команды даст агент. Открыть: ⌘ + пробел → «Терминал» (Windows: Пуск → PowerShell).

    По смыслу шагов будет четыре:

    1. Установка зависимостей — одна команда, минуту качает библиотеки.
    2. Первый вход в аккаунт — запуск скрипта входа. Спросит номер, потом код из Telegram (приходит в сам мессенджер, не по SMS), потом облачный пароль, если включена двухфакторная. Вводить только вам: агент этих данных не видит.
    3. Регистрация сервера в конфиге клиента — обычно делает агент, вам остаётся подтвердить.
    4. Перезапуск Claude — коннекторы подхватываются только при старте.

    Типичные заминки первого входа:

    • Вход зависает — значит, запустили не в интерактивном терминале, а внутри скрипта. Повторить руками.
    • Invalid password — просит облачный пароль двухфакторной защиты, а не код из сообщения.
    • Упало сразу после Signed in successfully — вход всё равно прошёл, сессия создана, повторять не нужно.
    • database is locked — сессию держит другой процесс: работать одним или сделать копию сессии для скриптов.

    Шаг 4. Проверить, что заработало

    Перезапустить клиент и попросить ассистента: «покажи мой профиль в Telegram» — должен ответить get_me. Дальше — обычные человеческие запросы: «выгрузи историю канала за три месяца и посчитай вовлечённость», «кто в этой группе», «собери все чаты, где обсуждали проект».

    Что становится доступно

    • История с метаданными — просмотры, пересылки, ответы, реакции; пагинация и фильтр по датам.
    • Комментарии к постам. Связь с постом — через форвард-копию в группе комментариев: fwd_from.channel_post = id поста в канале.
    • Участники группы. У каналов-broadcast список обычно скрыт.
    • Вступления и выходы из служебных сообщений — считается отток.
    • Статистика своего канала: приток и отток раздельно, источники подписок и просмотров. Окно — 93 дня. По чужому каналу недоступна никогда.
    • Поиск по чату и глобальный, скачивание вложений.

    Если что-то пошло не так

    Таблицу можно показать агенту целиком — он поймёт, что чинить.

    СимптомПричинаЧто делать
    В списке диалогов не хватает чатовлимит обрезает по активностилимит от 4000, вглубь — пагинация по дате
    FLOOD_WAIT при запросе участниковметод тяжёлыйтроттлить, продолжать с возвращённого offset
    Долгий запрос обрываетсятаймаут вызовавыносить в фоновую задачу
    Глобальный поиск не находит староене умеет сдвиг по датевыгружать историю и искать локально
    ValueError при обращении к чатуустаревший кэш сущностей в копии сессиирезолвить по username, не по id
    Сервер не поднимается после установкиприехал mcp 2.0 без FastMCPпин mcp[cli]>=1.0.0,<2, пересоздать venv
    Клиент «висит» там, где Telegram блокируетсяпрокси передан кортежемпередавать словарём (python-socks)

    Полный архив, если вопрос «по всей переписке»

    Когда чатов тысячи, история выгружается фоновой задачей в локальный SQLite, а аналитика дальше — обычным SQL, без обращений к Telegram. Схему можно передать агенту как есть:

    dialogs  (chat_id PK, kind, title, username, members, last_date)
    messages (chat_id, msg_id, date, sender_id, out, reply_to, fwd_from, media, text)
    progress (chat_id PK, last_id, msgs, status, updated, error)
    • Сначала личные чаты, потом группы. Диалоги обходятся от свежих к старым, и один мегачат на сто тысяч сообщений съедает часы, пока личка ждёт в хвосте.
    • Возобновление бесплатно. Чат читается от старых к новым с последнего сохранённого id. Обрыв не страшен, повторный запуск дозабирает только новое.
    • Диалог с самим собой («Избранное») и ботов из аналитики исключать.
    • Понадобилось новое поле — не перевыгружать архив целиком: добавить колонку через ALTER TABLE и добрать значения по msg_id батчами.

    Безопасность

    • Файл сессии — ключ от аккаунта. Не класть в общие папки, облака и репозитории.
    • api_hash — в системное хранилище секретов, не в код. api_id не секрет.
    • Код коннектора не хранить в расшаренных папках — подменённый скрипт выполнится у владельца с доступом к его аккаунту.
    • Выгрузки участников — персональные данные. Не заливать в общие хранилища и сторонние сервисы.
    • Наружу через пользовательскую сессию не писать. Автономные действия — отдельным ботом на Bot API.

    Обсудить, как это применить у вас?

    Покажем, что из этого работает в вашем контуре, и с чего начать.