К содержимому
ErgonLab
← Блог
Гайд · Автоматизация
· 8 мин

Telethon vs aiogram — две библиотеки, два сценария

Telegram-бота можно писать через user-account (Telethon) или через Bot API (aiogram). Это две разные архитектуры с разными возможностями. Когда что выбирать.

Главная разница за 30 секунд

В Telegram есть два разных способа автоматизации, и они работают на разных уровнях.

aiogram — это обёртка над Bot API. Bot API — это HTTPS-сервис от Telegram: ты регистрируешь бота у @BotFather, получаешь токен, дёргаешь endpoints вроде sendMessage или setWebhook. Всё, что делает aiogram, можно сделать curl-ом — он просто удобный async-фреймворк сверху.

Telethon — это клиент MTProto. MTProto — низкоуровневый протокол Telegram, тот самый, на котором работают официальные приложения. Telethon заходит в Telegram как живой пользователь: с номера телефона, через SMS-логин, с обычной сессией. Не «бот в плашке», а человек.

Из этой разницы растёт всё остальное. Bot API — ограниченный, безопасный, удобно деплоится. MTProto — гибкий, мощный, но требует аккаунта и заботы.

Что можно только через Telethon

Есть вещи, которые Bot API физически не умеет — и aiogram тут не поможет, как ни крутись.

Читать чаты, в которых ты не бот

Bot API позволяет получать только то, где бот — участник, и только то, что адресовано ему (в личке, или в группе с упоминанием). Никакой бот не может «прочитать канал X» или «следить за обсуждением в группе Y».

Telethon-аккаунт читает всё, что читаешь ты сам как пользователь. Подписался на канал — у тебя есть лента. Состоишь в группе — есть все сообщения.

У меня на этом работает мониторинг каналов для AutoImportMotors и парсер 91 тысячи сообщений жителей в SkandiKlubb. Bot API так бы не справился.

Отправлять как живой человек

Это критично для пресейла и тонких клиентских коммуникаций. Когда клиент пишет в чат, и ему отвечает «бот в плашке», диалог сразу мёртвый. А когда отвечает аккаунт «Лана Ergonlab» с фото и обычным контактом — клиент общается как с человеком.

Лана у меня — это user-account Telethon. Живёт в bots/lana/, ведёт диалоги с клиентами от своего имени. Внутри — изоляция инстансов, у каждого клиента своя сессия и свой state. Никаких «плашек бота», никаких inline-кнопок. Только текст, фото, голосовые — как живой ассистент.

Кастомные эмодзи

Bot API почти не поддерживает кастомные эмодзи (премиум-эмодзи из стикерпаков). Можно отправить как MessageEntity, но возможностей ноль — ни UX-стикеров в посте, ни брендинга.

Telethon через <tg-emoji emoji-id="..."> рендерит их свободно. У меня в @ergonlab через Telethon уходят все посты с кастомными эмодзи из своих 5 паков (170 штук). Бот API такое не отправит.

Отложка в канал

В Bot API нет встроенной отложенной публикации. Хочешь запланировать пост на завтра в 10:00 — пиши свой scheduler с очередью, persistence, retry, мониторингом падений.

В Telethon на это есть штатный параметр schedule=. Передал datetime, и сообщение легло в нативную телеграмовскую отложку — ту самую, которую видишь в клиенте. Простой скрипт публикации на 30 строк делает то, для чего на Bot API нужен бы целый сервис.

Полный контроль над сообщениями

Удалять чужие сообщения в своих группах, редактировать без жёстких ограничений Bot API на «48 часов после отправки», менять reactions, читать историю — всё это умеет Telethon.

Что лучше делать через aiogram

Telethon не панацея. Есть кейсы, где Bot API проще, надёжнее и безопаснее.

Команды и диалоги с подписчиками

Когда подписчик пишет твоему боту /start, нужен правильный публичный канал. Бот в плашке «Bot» — это ожидание аудитории. Они понимают, что общаются с автоматом, и это нормально.

У меня @ergonlab_bot — это aiogram. Принимает /start, ведёт через inline-кнопки, регистрирует пользователя в БД, шлёт демо. То же самое у @skandihelp_bot (бот ЖК) и @burotezis_bot (приёмщик заявок Тезиса).

Делать это через user-account — извращение: пришлось бы вручную парсить команды, отслеживать /start-эвенты, имитировать inline-кнопки через reply-клавиатуру. Bot API даёт это из коробки.

Inline-кнопки и callback-данные

InlineKeyboardMarkup, CallbackQuery — родная история Bot API. Кнопки в сообщениях, callback на кнопках, обновление сообщения по нажатию.

В Telethon это технически возможно, но через костыли — нужно симулировать кнопки в reply-клавиатуре или вообще без них.

Webhook и горизонтальное масштабирование

Bot API спроектирован под webhook: Telegram пушит апдейты тебе на endpoint, ты обрабатываешь, отвечаешь. Удобно горизонтально масштабировать — повесил несколько инстансов за балансировщиком, и Telegram сам распределяет нагрузку.

Telethon работает на long-polling через MTProto. Один аккаунт — одна сессия. Параллелить — только через раздельные аккаунты.

Безопасность production-бота

Bot API не привязан к человеку. Утёк токен — отозвал у @BotFather, выпустил новый, перенастроил. У бота нет личных переписок, истории, контактов, привязки к номеру.

С Telethon-сессией ты по факту даёшь полный доступ к аккаунту: вся история, контакты, чаты, возможность писать от твоего имени. Утечка .session-файла — катастрофа.

Как я делаю гибрид

В ErgonLab вся экосистема — это связка обоих подходов, каждый на своём месте.

Лана — Telethon (user-account). bots/lana/lana_daemon.py --client <name> слушает входящие в чате с клиентом, отвечает как живой ассистент, поддерживает кастомные эмодзи, отправляет голосовые, фото, документы. Архитектура изоляции: каждый клиент — отдельный инстанс в instances/<client>/ со своим .env, сессией, state, inbox, outbox.

@ergonlab_bot — aiogram (Bot API). Это публичный бот для подписчиков канала и лидов. Принимает команды, ведёт по воронке, регистрирует в CRM, отдаёт демо-материалы. Здесь нужен именно бот в плашке — это ожидание аудитории.

Скрипты публикации в @ergonlab — Telethon. Лежат в scripts/, отправляют HTML-посты в отложку канала с кастомными эмодзи, через нативный Telegram-планировщик. Это не бот, это скриптовая публикация от моего имени как админа канала.

SkandiKlubb-парсер — Telethon. Читает 91 тысячу сообщений жителей ЖК для AI-генератора жалоб. Bot API таких прав не даёт.

HealthCompanion (@health-бот в группе «План(Коля)») — aiogram. Принимает /workout, /food, /supplements от меня и брата. Классический сценарий бота-команды.

Логика выбора простая: нужен аккаунт-человек — Telethon. Нужен сервис для пользователей — aiogram. Часто на одном проекте есть и то, и то — это норма.

Минусы Telethon, о которых стоит знать заранее

Привязка к номеру. Нужен реальный SIM-номер для каждой сессии. Я под Лану держу отдельный номер — её нельзя ставить на мой основной аккаунт, потому что тогда любой tg_send.py будет писать от моего имени.

Риск бана. Telegram палит «спам»-активность user-аккаунтов жёстче, чем у ботов. Массовая рассылка от Telethon-аккаунта — почти гарантированный бан. Я держу типинг-задержки, естественные паузы, никогда не шлю сообщения вне контекста уже существующего диалога.

Сессия — это секрет. Файл .session — это твой залогиненный аккаунт. Если он утечёт, у атакующего полный доступ. Хранить только в .gitignore, не коммитить, на VPS — с правами 600 и в защищённом каталоге.

Сложнее деплой. Bot API — просто токен в env, и всё. Telethon — сессионный файл, который надо изначально создать через SMS-логин на локальной машине, потом аккуратно переложить на сервер.

Зависание сессии. Иногда Telethon-демон ловит Cannot send requests while disconnected и виснет. У меня в bots/lana/ есть lana_ctl.sh с командой restart, чтобы быстро поднимать. Это известная проблема, я её до конца не решил — но workaround есть.

Минусы aiogram, о которых стоит знать заранее

Жёсткие лимиты Bot API. 30 сообщений в секунду глобально, 1 в секунду на чат, длина сообщения 4096 символов, фото — 1024 символа подписи. Превысил — Telegram возвращает 429 и блокирует на время.

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

«Бот в плашке». Если задача — выглядеть как живой человек, aiogram не подойдёт. Никакие хитрости не уберут метку «Bot» рядом с именем.

Bot API всегда видит, что ты бот. Антибот-фильтры некоторых сервисов реагируют именно на это. Если интегрируешься с веб-сценариями, где надо «как пользователь» — нужен Telethon.

Что выбрать для своего проекта

Чек-лист, по которому решаю я:

  • Только команды от пользователей, нужен публичный интерфейс? → aiogram
  • Нужен мониторинг чужих каналов/групп? → Telethon, без вариантов
  • Нужно выглядеть как живой человек для клиента? → Telethon
  • Нужны кастомные эмодзи и брендинг постов? → Telethon
  • Нужен production-сервис с webhook и масштабированием? → aiogram
  • Нужна отложенная публикация в канал? → Telethon (или свой scheduler поверх aiogram)
  • Не уверен — начни с aiogram, безопаснее, проще, не привяжешь к номеру

И не бойся комбинировать. Гибрид «aiogram для бота + Telethon для скриптов и user-account» — это самая частая конфигурация, и она работает.

Соседние посты

Читать дальше

← Предыдущий
Как мы учим эксперта собирать продукты на Claude Code
Следующий →
Subagents — параллельная работа без переполнения контекста
Все материалы
Принимаю заказы

Понравилось?
Обсудим задачу?

Напишите коротко — ответим в течение дня.

Написать в Telegram
@ergonlab_bot