Старт

Bot API vs MTProto

Bot API против MTProto: чем отличаются, какие у каждого ограничения и почему для ботов почти всегда достаточно HTTPS-JSON Bot API без низкоуровневого протокола.

Telegram даёт разработчикам два стека для работы с мессенджером: Bot API поверх обычного HTTPS и MTProto — низкоуровневый протокол, на котором сам Telegram работает «изнутри». Для ботов нужен почти всегда первый.

Bot API — что это

Это набор HTTPS-эндпоинтов вида https://api.telegram.org/bot<TOKEN>/method. Вы шлёте JSON, получаете JSON. Серверы Telegram сами держат долгие соединения, сами разбирают бинарный протокол, вам отдают удобные объекты: Message, Update, CallbackQuery, InlineKeyboardMarkup.

Из ограничений, которые важно знать заранее:

  • нет доступа к секретным чатам и E2E-историям;
  • нет чтения чужих сообщений в группах, кроме команд и упоминаний бота;
  • файлы ограничены по размеру (скачивание — до 20 MB, отправка — до 50 MB через Bot API);
  • long polling можно делать, но только через getUpdates (нельзя «сырое» MTProto).

Этих ограничений хватает для 95% ботов: магазинов, CRM-интеграций, Mini Apps, рассылок, автоответчиков.

MTProto — когда это нужно

MTProto — то, на чём написан Telegram-клиент. Через него можно:

  • читать любые сообщения в чатах, где залогинен ваш аккаунт-«юзербот»;
  • работать без BotFather и токена (используется user-сессия);
  • получать события быстрее, ниже задержки;
  • делать вещи, которых нет в Bot API: типизация «прочёл/печатает», реакции, детальные статусы.

Цена — вы пишете клиент Telegram: сессии, ключи, salt, реконнекты, обновления схем. На PHP нормальных библиотек почти нет, на Python — Telethon/Pyrogram, на Node — gramjs. И любое обновление протокола ломает ваш код.

Сравнение в одной таблице

  • Протокол: Bot API — HTTPS/JSON, MTProto — бинарный TCP.
  • Идентификация: Bot API — токен от BotFather, MTProto — user session (api_id/api_hash + файл сессии).
  • Задержка: Bot API — десятки–сотни мс, MTProto — единицы–десятки мс.
  • Доступ к данным: Bot API — только то, что боту положено, MTProto — всё, что видит ваш аккаунт.
  • Риск бана: Bot API — низкий при штатной работе, MTProto — высокий за массовые активности и юзерботов.
  • Стек: Bot API — любой HTTP-клиент на любом языке, MTProto — нужна спец-библиотека.

Что выбрать для этого гайда

Дальше — только Bot API и HTTPS-запросы. PHP cURL, getenv('TELEGRAM_BOT_TOKEN'), JSON наружу, JSON обратно. Это самый предсказуемый и поддерживаемый путь: апдейты протокола делает Telegram, ваш код переживает их без изменений.

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

Дальше: BotFather и токен — как получить токен и где его хранить.