⎯ TL;DR
  • «Telegram-софт» обычно — generic SaaS (HubSpot-style) + маркетплейс-адаптер под Telegram. Слабо.
  • TG:ON построен на TDLib/pyrogram — native MTProto client. Работает с официальным протоколом, не через Bot API.
  • Разница: доступ к message_history, user_photos, channels.getParticipants, dialogs — того, что Bot API не отдаёт.
  • Обработка FLOOD_WAIT / PEER_FLOOD / SESSION_REVOKED — на уровне протокола, не ретраев по HTTP.
  • Entity caching, dialog pagination, peer resolution — работают корректно в 2026.
  • Session-файлы локальные. Их можно экспортировать, перенести, бэкапить. В cloud-SaaS — нельзя.

Если ты когда-нибудь смотрел на рынок «Telegram-автоматизаций» и задавался вопросом, почему одни тулы работают на 10 аккаунтов и 100 сообщений в час, а другие ломаются на пятом получателе — дело не в «качестве кода». Дело в том, на каком уровне протокола софт разговаривает с Telegram.

Почти весь массовый Telegram-софт — это generic CRM / outreach-платформа, к которой прикрутили адаптер под Telegram Bot API. Снаружи выглядит одинаково: «отправка сообщений в Telegram». Внутри — разница в сто раз по тому, что тулу доступно и как он переживает ошибки.

01 · Два разных API

Bot API vs MTProto — в чём разница

У Telegram две точки входа для сторонних клиентов:

Почему это важно: через Bot API нельзя сделать то, что может обычный пользовательский клиент. Бот не видит список диалогов, не может вытащить участников публичного канала (только если добавить бота админом), не умеет читать сообщения в чатах, где он не состоит.

# Что Bot API НЕ отдаёт: dialogs # список чатов пользователя messages.getHistory # история сообщений в чате channels.getParticipants # участники канала (без админки) photos.getUserPhotos # фото профиля messages.search # глобальный поиск contacts.resolveUsername # @username → peer # Что Bot API отдаёт: sendMessage # отправка — если юзер тебе уже писал getUpdates # long-poll входящих setWebhook # callback для inline-ботов

Для outreach и парсинга Bot API — тупик. Он спроектирован для интерактивных ботов (@GmailBot, @WeatherBot), а не для работы со списком каналов, парсинга участников и массовой отправки.

Ключевой нюанс: «отправка от имени бота» и «отправка от имени пользователя» — это принципиально разные сущности. Первое работает только в диалогах, где юзер сам инициировал контакт. Второе — полноценный аккаунт, который может писать новым людям, состоять в каналах, видеть свой список диалогов.

02 · Native-клиент

Что умеет native-клиент и не умеет adapter

Native MTProto-клиент — это твой Telegram, просто запущенный программно. Сессия логинится через auth.sendCode + auth.signIn, как в обычном Desktop-клиенте. Дальше доступен весь API пользователя:

ФичаМетод MTProtoЧто даёт
История сообщенийmessages.getHistoryПарсинг с датами, reactions, forward-chain
Участники каналаchannels.getParticipantsФильтры: recent, admins, kicked, bots, search
Фото пользователяphotos.getUserPhotosСкачивание аватаров для персонализации
Список диалоговmessages.getDialogsПагинация через offset_date + offset_peer
Резолв usernamecontacts.resolveUsername@handle → полноценный InputPeer
Поиск сообщенийmessages.searchKeyword-поиск в конкретном peer
Inline-поискcontacts.searchНайти пользователей/чаты по строке

Это не «расширенные возможности». Это базовые функции Telegram, которыми пользуется обычный человек в приложении. Для парсинга аудитории, outreach и CRM-интеграции они все обязательны.

Generic SaaS с Bot API-адаптером умеет ровно одно: отправлять сообщения тем, кто первым написал боту. Всё остальное приходится допиливать сбоку — обычно через «загрузите CSV с username'ами, мы попытаемся их найти». Работает плохо: без resolveUsername адаптер не умеет получить InputPeer, без InputPeer не умеет ничего.

«Если тул не умеет channels.getParticipants — он не автоматизирует Telegram. Он автоматизирует HTTP-запросы к BotFather.»
03 · Обработка ошибок

Ошибки Telegram на уровне протокола

Второе принципиальное отличие — как тул переживает ошибки. MTProto определяет десятки классов ошибок, и на каждый адекватная реакция разная. Generic SaaS с HTTP-адаптером видит только 400 / 429 / 500 и делает ретрай через N секунд. Этого мало.

# Что MTProto возвращает и как на это правильно реагировать FLOOD_WAIT_X # X сек паузы — обязательно выждать PEER_FLOOD # аккаунт в soft-restriction → cooldown 24-72ч SESSION_REVOKED # сессия убита с другого устройства → re-login AUTH_KEY_UNREGISTERED # auth-key недействителен → удалить session-file USER_DEACTIVATED # аккаунт забанен @SpamBot → нет смысла ретраить PHONE_NUMBER_BANNED # номер в блэклисте → сжечь и забыть CHAT_WRITE_FORBIDDEN # кик из чата → пропустить получателя USER_PRIVACY_RESTRICTED # юзер скрыл настройки → skip

Правильная реакция на PEER_FLOOD — не «подожди 60 секунд и повтори». Это сигнал, что аккаунт уже в restricted-состоянии. Если продолжать отправлять — через 2-3 часа прилетит бан от @SpamBot. Native-клиент должен немедленно остановить sending от этого аккаунта и перевести его в cooldown на 24-72 часа.

SESSION_REVOKED значит: юзер (или Telegram безопасность) разлогинил твою сессию с другого устройства. Ретраить тот же auth-key бессмысленно — он уже не работает. Native-клиент удаляет session-file и либо алертит в UI, либо инициирует re-login через SMS. Generic SaaS просто ретраит 5 раз и сдаётся.

Классический симптом «адаптера»: инструмент ретраит PEER_FLOOD как обычную rate-limit ошибку. Результат — аккаунт добивается до полного бана за 2-3 часа. Native-клиент видит PEER_FLOOD и немедленно отправляет аккаунт в cooldown.

04 · Entity caching

Почему 2026-й ломает тулы без entity-cache

Telegram использует сложную систему peer-идентификаторов: user_id + access_hash, channel_id + access_hash. Чтобы отправить сообщение в канал, нужно знать оба значения. access_hash выдаётся сервером на конкретную сессию — использовать его от другой сессии нельзя.

Это называется entity caching: native-клиент должен хранить таблицу peer_id → access_hash и обновлять её, когда получает новые значения в updates. Без этого:

Native-клиенты (TDLib, pyrogram) решают это из коробки: есть встроенная таблица peers, синхронизация через updates, правильная инвалидация. Generic SaaS-адаптеры часто кэшируют только user_id — и ломаются на операциях, которые требуют access_hash.

05 · Session-files

Ключи локально — ключевой принцип

Ещё одно отличие native от cloud-SaaS: где хранится auth-key сессии.

С точки зрения инженерии это anti-pattern для cloud-SaaS. Auth-key — это по сути пароль+2FA в одном объекте. Хранить такие ключи массово у третьей стороны — всё равно что отдать пароли от банк-аккаунтов в облачный CRM. Работает, пока вендор честен и его не взломают.

«Telegram session-key — это не токен, который легко обновить. Это долгоживущий ключ, по которому ты — это ты. Держи его дома.» ⎯ internal rule
06 · Когда достаточно

Когда adapter'а хватает, а когда нет

Честное разделение: не всем нужен native-клиент.

Use caseBot API / adapter хватитНужен native MTProto
Уведомления в свой каналДа
Chatbot в FAQ-режимеДа
Пинг 10 контактов в деньДа
Outreach в 100+ новых пользователейНетДа
Парсинг участников каналовНетДа
CRM с историей перепискиНетДа
Инвайтинг в свой каналНетДа
Автоответы в чатыНетДа
Управление фермой на 10+ аккаунтовНетДа

Если у тебя workflow из первых трёх строк — не трать деньги на native-клиент, хватит любого бота. Если из остальных — любой «Telegram-софт без MTProto» будет ломаться на каждой нетривиальной операции. Это вопрос не фич, а архитектуры.

⎯ скачать

TG:ON для macOS · Windows · Linux

Desktop-приложение, 160 MB. Native MTProto-клиент, session-файлы локально. Триал 3 дня без карты.

Скачать бесплатно
⎯ попробовать native

MTProto + TDLib
из коробки.

Full client access: message_history, participants, dialogs. Сессии локально. Триал 3 дня.

Скачать
⎯ Вывод

Адаптер ≠ native-клиент

«Telegram automation» — маркетинговое слово. Полезная часть в нём — только то, что тул реально умеет делать с MTProto напрямую. Всё остальное — красивый UI над Bot API, который ломается на первой серьёзной операции.

Проверяй перед покупкой: умеет ли тул парсить участников публичного канала (не админом)? Умеет ли доставать историю переписки из своих диалогов? Где лежит session-файл, можно ли его экспортировать? Как реагирует на PEER_FLOOD? Если ответы «нет/нет/у нас/ретраит» — это адаптер.

TG:ON native с первого дня. TDLib + pyrogram под капотом, session-файлы локально, корректная обработка всех классов протокольных ошибок. Скачивается одним бинарником, ключи остаются у тебя.