Старт
Bot API vs MTProto
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 и токен — как получить токен и где его хранить.