Перейти к содержимому
Socialift
Сравнение

Telegram Bot API или MTProto: что выбрать

Bot API — HTTPS-интерфейс по токену BotFather: простой и безопасный, но бот видит только новые события, адресованные ему. MTProto — API для клиентов Telegram: пользовательский аккаунт (юзербот) читает историю, список участников и отправляет файлы до 2 ГБ, но упирается в FLOOD_WAIT и рискует баном. Сервис для клиентов — бот, автоматизация своего аккаунта — MTProto.

Обновлено:

Разница в двух словах

В Bot API вы работаете как бот: по токену, через HTTPS и только в рамках того, что разрешено ботам. В MTProto вы обычно входите как пользователь — по телефону, коду и 2FA — и можете из кода делать почти всё, что доступно в приложении Telegram. Больше возможностей — больше ответственности и рисков.

Важное уточнение: MTProto не равно «юзербот». Боты тоже могут авторизоваться через MTProto (auth.importBotAuthorization, с api_id), но ограничения ботов при этом сохраняются. На практике под «MTProto» чаще всего имеют в виду работу от имени пользовательского аккаунта — в этом смысле термин используется и в статье.

Термины

Bot API
HTTP-интерфейс на api.telegram.org. Каждый запрос: /bot<token>/имяМетода, ответ в JSON.
MTProto API
Протокол и API для клиентов Telegram. Для подключения нужны api_id и api_hash с my.telegram.org.
Юзербот
Обычный пользовательский аккаунт, автоматизированный через MTProto. Не официальный термин, а жаргон разработчиков.
Telethon
Популярная Python-библиотека для MTProto. Клиент TelegramAccount в Socialift построен поверх Telethon.
Локальный сервер Bot API
Собственный экземпляр открытого сервера Bot API: расширяет лимиты на файлы и ограничения вебхука.

Большая сравнительная таблица

Большая сравнительная таблица — Таблица возможностей по платформам
КритерийBot APIMTProto (аккаунт пользователя)
АвторизацияТокен BotFatherapi_id + api_hash, затем телефон → код → 2FA; результат — строка сессии
ТранспортHTTPS + JSON, запросы без состоянияПостоянное соединение MTProto, состояние сессии хранится
Написать первымНельзя: человек должен написать боту или добавить его в группуМожно, но действуют настройки приватности и антиспам-ограничения
Чтение историиМетода нет; только новые update, они хранятся до 24 часовПолная история (если в группе не скрыта от новых участников)
Список участниковТолько администраторы, статус одного участника и их числоСписок доступен; подписчиков канала видят только админы, админы могут скрыть список
Сообщения в группахPrivacy mode: только команды и ответы (всё — если бот админ или режим выключен)Всё в чатах, где состоит аккаунт
Вступление в чатыСам вступить не может — его добавляютПо инвайт-ссылке или публичному @username
Отправка файлов50 МБ (фото 10 МБ); на локальном сервере 2000 МБ2 ГБ, с Telegram Premium 4 ГБ
Скачивание файлов20 МБ; на локальном сервере без ограниченийФайлы, доступные аккаунту, до 4 ГБ
Лимиты скоростиДокументированы: ~1 сообщение/с в чат, 20/мин в группу, ~30/с в рассылке; превышение — 429 + retry_afterПубличных цифр нет; превышение — 420 FLOOD_WAIT_X, ждать X секунд
Отложенные сообщенияНетЕсть: Telegram сам отправит сообщение в заданное время
Статистика каналаНетДля админов каналов от определённого размера
Риск по ToSНизкий; главный риск — утечка токенаАккаунты неофициальных клиентов под наблюдением; спам, флуд, накрутка — вечный бан
ХостингВебхук (443/80/88/8443) или long polling, подходит для serverlessДолгоживущий процесс; одну сессию нельзя использовать параллельно (AUTH_KEY_DUPLICATED)
SDK SocialiftTelegramTelegramAccount (pip install "socialift[telegram]")

Как выбрать: решение под задачу

Как выбрать: решение под задачу — Таблица возможностей по платформам
ЗадачаВыборПочему
Ответы клиентам, статусы заказов, уведомленияBot APIЧеловек сам жмёт /start, есть кнопки и вебхук, низкий риск бана
Новости для тысяч подписчиковКанал + бот (публикует как админ)Не упираетесь в лимиты личных сообщений
Модерация своей группыBot APIБан, ограничения и заявки на вступление есть у бота
Экспорт или анализ истории своих чатовMTProtoУ бота нет метода истории
Список участников своей группыMTProto (как админ)Bot API не отдаёт полный список
Отложенные посты в канале, статистикаMTProtoВ Bot API этого нет
Файлы больше 50 МБMTProto или локальный сервер Bot APIЛимит официального сервера Bot API — 50 МБ
Массовые сообщения или инвайты незнакомымНи то, ни другоеПротиворечит правилам Telegram, аккаунт могут заблокировать навсегда

Юзербот — это законно? Что говорят правила Telegram

Telegram приглашает разработчиков создавать приложения на своём API и не берёт за это плату. Значит, сама автоматизация аккаунта через MTProto не запрещена. Но есть условия: у приложения должен быть собственный api_id, оно не должно действовать от имени пользователя без его ведома и согласия и не должно использовать данные Telegram для обучения моделей ИИ.

На официальной странице прямо сказано: все аккаунты, вошедшие через неофициальные клиенты, автоматически ставятся под наблюдение, а за флуд, спам и накрутку подписчиков или просмотров каналов — вечный бан. У Bot API тоже есть правила, но главный риск бота обычно — утечка токена, и она решается командой /token в BotFather.

Оба подхода в одном проекте

Часто правильный ответ — «оба»: аккаунт читает то, что закрыто для бота, а бот выполняет видимую клиенту часть.

hybrid.py
import asyncio
from socialift import Telegram, TelegramAccount

async def main():
    async with Telegram.from_env() as bot, TelegramAccount.from_env() as account:
        # Аккаунт: то, чего бот не может, — поиск по истории группы
        last = await account.messages("@my_group", limit=100)
        found = await account.search("@my_group", "цена", limit=100)

        # Бот: публикует отчёт в канал от своего имени (бот — админ канала)
        await bot.send_message("@my_channel",
                               f"Прочитано сообщений: {len(last)}, со словом «цена»: {len(found)}")

asyncio.run(main())

Telegram.from_env() читает TELEGRAM_BOT_TOKEN, а TelegramAccount.from_env() — TELEGRAM_API_ID, TELEGRAM_API_HASH и TELEGRAM_SESSION.

Лимиты: две разные ошибки — один except

Bot API возвращает 429 и retry_after, MTProto — FLOOD_WAIT_X. SDK приводит оба случая к RateLimitError; если время ожидания известно, оно в retry_after, иначе делайте резервную паузу.

rate_limit.py
import asyncio
from socialift import RateLimitError

async def send_with_backoff(client, chat, text: str):
    """client — Telegram или TelegramAccount."""
    try:
        return await client.send_message(chat, text)
    except RateLimitError as exc:
        await asyncio.sleep(exc.retry_after or 5)
        return await client.send_message(chat, text)

Когда бота недостаточно

  • Нужно читать сообщения до добавления бота или те, что бот не получает.
  • Нужен список участников группы или канала, а не только их число или админы.
  • Нужна статистика канала или отложенные посты, которые отправит сам Telegram.
  • Нужны файлы больше 50 МБ, а поднять локальный сервер Bot API нет возможности.
  • Нужны пользовательские действия: создать группу или канал, вступить в чат по ссылке.

← Назад в блог

Частые вопросы

Telethon или Bot API — что лучше?

Они для разных задач. Bot API удобнее и безопаснее для публичных сервисов, уведомлений и модерации. Telethon (MTProto) нужен для работы от имени аккаунта, истории, списков участников и больших файлов, но требует серьёзного внимания к FLOOD_WAIT и правилам ToS.

Что такое юзербот в Telegram и запрещён ли он?

Юзербот — обычный аккаунт, автоматизированный через MTProto. Сам по себе он не запрещён, но действуют Telegram API Terms of Service: запрещены действия без согласия пользователя, спам, флуд и накрутка. Аккаунты неофициальных клиентов автоматически находятся под наблюдением.

Может ли бот прочитать историю группы?

Нет. В Bot API нет метода для чтения истории чата: бот получает только новые обновления, а в группах из-за privacy mode — лишь их часть. Если нужна история, используйте MTProto через аккаунт, состоящий в группе.

Какой лимит на размер файла в MTProto?

Обычный аккаунт загружает файлы до 2 ГБ, аккаунт с Telegram Premium — до 4 ГБ. На официальном сервере Bot API лимит отправки — 50 МБ, скачивания — 20 МБ.

Можно ли использовать бота через MTProto?

Да: auth.importBotAuthorization авторизует бота по токену и api_id, после чего работает большинство методов MTProto. Ограничения ботов при этом сохраняются. В Socialift для бота есть клиент Telegram (Bot API), для пользовательского аккаунта — TelegramAccount.

Можно ли использовать оба API в одном проекте?

Да, это распространённая схема: бот общается с клиентами и модерирует, а аккаунт получает закрытые для бота данные — историю, список участников или статистику. В SDK у обоих клиентов единая модель ошибок.

Источники

  1. Telegram Bots: чем боты отличаются от пользователей
  2. Telegram Bot API
  3. Telegram Bots FAQ: лимиты
  4. Telegram: Creating your Telegram Application
  5. Telegram: Working with bots (MTProto)
  6. Telegram FAQ: размер файлов

Связанные страницы