Мы сравнили Max Bot API и Telegram Bot API метод за методом. Вот что ждёт разработчиков при миграции
У нас в студии есть Telegram-бот, который работает в клиентских группах: сохраняет историю переписки, анализирует обсуждения и создаёт задачи в CRM. После новостей о замедлении Telegram мы решили разобраться, насколько реально перенести бота на мессенджер Max. Не «в теории похоже», а конкретно: какие методы API совпадают, где придётся переписывать, и на каких моментах можно споткнуться.
Я изучил документацию Max Bot API на dev.max.ru, сравнил каждую группу методов с Telegram Bot API и собрал результаты. Спойлер: API действительно похожи, но дьявол в деталях, и этих деталей хватит на неделю работы.
Первое впечатление: похоже, но не копия
Max Bot API построен по тем же принципам, что и Telegram: бот получает токен, слушает обновления через webhook или long polling, отправляет сообщения через HTTPS-запросы, получает JSON-ответы. Концепция один в один.
Но реализация различается почти везде. Если вы надеялись поменять домен с api.telegram.org на platform-api.max.ru и всё заработает — не заработает. Вот почему.
Аутентификация: первое, что сломается
В Telegram токен передаётся прямо в URL: api.telegram.org/bot{TOKEN}/sendMessage. В Max токен передаётся в HTTP-заголовке Authorization. Передача через query-параметры больше не поддерживается.
Это значит: весь HTTP-клиент, через который бот общается с API, нужно переделывать. Каждый запрос. Если у вас обёртка над fetch или axios — меняете одну строку конфигурации. Если запросы разбросаны по коду — удачи.
Получение обновлений: webhook работает, long polling - только для разработки
В Telegram оба режима полноценные. Хочешь webhook — ставь webhook. Хочешь long polling — getUpdates работает в продакшне без проблем.
В Max long polling официально рекомендуется только для разработки и тестирования. В продакшне — только webhook. Причём есть два ограничения, которых нет в Telegram.
Первое: самоподписанные SSL-сертификаты не поддерживаются. В Telegram можно было поднять webhook с self-signed сертификатом за 5 минут. В Max нужен сертификат от доверенного центра (Let's Encrypt подойдёт, но это дополнительный шаг). И только порт 443 — в Telegram можно было использовать 80, 88, 8443.
Второе: если ваш сервер не отвечает 200 OK в течение 8 часов, Max автоматически отписывает бота от webhook. В Telegram такого нет. Если ваш бот периодически уходит в даунтайм, придётся добавить логику переподписки.
Формат обновлений тоже отличается. В Telegram тип события определяется наличием поля в объекте Update (есть поле message — значит новое сообщение, есть callback_query — нажата кнопка). В Max тип указан явно в поле update_type: message_created, message_callback, bot_started. Набор событий в Max заметно меньше: нет отдельных событий для редактирования сообщений, реакций, вступления в чат. По крайней мере, в текущей документации.
Отправка сообщений: похоже, но всё в другом месте
Telegram: POST /sendMessage, chat_id и text в теле запроса. Max: POST /messages, chat_id в query-параметрах URL, текст — в теле в объекте NewMessageBody. Мелочь, но при миграции ломает каждый вызов.
Лимит текста: 4 000 символов в Max против 4 096 в Telegram. Если ваш бот генерирует длинные ответы, 96 символов разницы могут неожиданно обрезать сообщение.
Форматирование текста поддерживается в обоих: HTML и Markdown. Но синтаксис Markdown различается. Подчёркнутый текст в Max — ++текст++, в Telegram (MarkdownV2) — __текст__. Упоминания пользователей: в Max — max://user/id, в Telegram — tg://user?id=. Спойлеры, блочные цитаты и кастомные эмодзи, которые есть в Telegram, в Max не поддерживаются.
Inline-клавиатура: щедрее, но по-другому
В Telegram клавиатура передаётся через reply_markup. В Max — через массив attachments с типом inline_keyboard. Другая структура JSON.
Зато лимиты в Max щедрее: 210 кнопок, 30 рядов, до 7 кнопок в ряду. В Telegram практический лимит — около 100 кнопок.
Есть интересные отличия в типах кнопок. В Max есть кнопка типа message, которая отправляет текстовое сообщение боту — в Telegram такое есть только в Reply Keyboard, но не в inline. Зато в Max нет кнопок оплаты (pay), авторизации (login_url) и inline-переключения (switch_inline_query) — всё это есть в Telegram.
Ответ на нажатие callback-кнопки — тоже с нюансом. В Telegram нужно два отдельных вызова: answerCallbackQuery (показать уведомление) + editMessageText (обновить сообщение). В Max через один POST /answers можно и обновить сообщение, и показать уведомление одновременно. Это удобнее.
Редактирование и удаление: лимит в 24 часа
Критичное ограничение, о котором нужно знать заранее. В Max редактировать и удалять можно только сообщения, отправленные менее 24 часов назад. В Telegram для своих сообщений такого лимита нет.
Если ваш бот отправляет напоминание, а через сутки нужно его обновить — в Max это невозможно. HTTP-методы тоже различаются: в Telegram всё через POST, в Max — RESTful: PUT для редактирования, DELETE для удаления.
Что есть в Max, чего нет в Telegram
Не всё в пользу Telegram. У Max Bot API есть две возможности, которые разработчики ботов ждали годами.
Получение истории сообщений. GET /messages с фильтрацией по chat_id и временным рамкам. В Telegram Bot API получить историю чата невозможно — бот видит только те сообщения, которые пришли через webhook или getUpdates. Для нашего бота, который анализирует обсуждения в группах, это было бы идеально — не пришлось бы писать каждое сообщение в Redis вручную.
Список всех чатов бота. GET /chats возвращает все групповые чаты, в которых участвует бот. В Telegram Bot API такого метода нет: бот узнаёт о чатах только через входящие обновления.
Ещё из приятного: файлы до 4 ГБ (в Telegram — 50 МБ стандартно), resumable upload (возобновляемая загрузка), и mark_seen — действие «пометить прочитанным», которого нет в Telegram.
Чего нет в Max, что есть в Telegram
Список внушительный. Inline-режим (когда бот отвечает через @mention в любом чате) — нет. Платежи — нет. Стикеры — нет. Реакции — нет. Опросы — нет. Форум-топики — нет. Видеосообщения (кружки) — нет. Reply Keyboard (клавиатура замены стандартной) — не документирована.
Для простого бота, который отвечает на команды и отправляет сообщения, это не критично. Для бота с богатым интерфейсом (стикеры, реакции, опросы, inline-режим) — миграция означает потерю функциональности.
Мини-приложения (Web Apps): можно перенести, но с оговорками
Если у вас есть мини-приложение (Web App) в Telegram, перенос на Max реален, но потребует переработки. Основные изменения: другая JS-библиотека (st.max.ru/js/max-web-app.js вместо telegram.org/js/telegram-web-app.js), другой глобальный объект (window.WebApp вместо window.Telegram.WebApp), другие диплинки (max.ru/?startapp= вместо t.me//app?startapp=).
Алгоритм валидации initData идентичен — HMAC-SHA256 с ключом на основе токена бота. Это упрощает серверную часть.
Но есть потери. В Max нет MainButton (кнопка внизу экрана мини-приложения), нет themeParams (цвета темы клиента), а CloudStorage (серверное хранилище) заменён на DeviceStorage, который не работает в веб-версии. Если ваши пользователи ходят через Max Web — данные не сохранятся.
Зато Max добавил уникальные фичи: нативный шеринг контента (shareContent), запрет скриншотов (ScreenCapture), управление яркостью экрана и скачивание файлов. Этого нет в Telegram.
Важное ограничение: вся платформа Max для разработчиков (боты, мини-приложения, каналы) доступна только для юрлиц и ИП — резидентов РФ. Самозанятые, физлица и нерезиденты пока не могут пройти верификацию. Лимит — 5 ботов на организацию. В Telegram таких ограничений нет — бота может создать кто угодно.
Сводное сравнение для тех, кто принимает решение
Где Max выигрывает у Telegram:
- История сообщений чата через API (GET /messages) - в Telegram этого просто нет
- Список всех чатов бота (GET /chats) - в Telegram бот не знает, где он состоит
- Загрузка файлов до 4 ГБ с возобновлением (в Telegram - 50 МБ)
- Inline-кнопки: 210 штук в 30 рядах (в Telegram около 100)
- Ответ на callback одним запросом обновляет и сообщение, и показывает уведомление (в Telegram - два вызова)
- Официальные SDK для JavaScript и Go (у Telegram - только community-библиотеки)
Где Telegram выигрывает у Max:
- Webhook принимает self-signed сертификаты и работает на портах 443, 80, 88, 8443 (Max - только CA-сертификат, только 443)
- Long polling полноценно работает в продакшне (Max - только для разработки)
- Нет лимита по времени на редактирование своих сообщений (Max - 24 часа)
- Лимит текста 4 096 символов (Max - 4 000)
- Inline-режим, платежи, стикеры, реакции, опросы, форум-топики, видеосообщения - всего этого в Max нет
- Мини-приложения с полным функционалом: MainButton, themeParams, CloudStorage (в Max - с ограничениями)
- Создание ботов доступно любому человеку без верификации (в Max — только юрлица и ИП, до 5 ботов на организацию)
Где примерно одинаково:
- Концепция: токен, webhook/polling, JSON API
- Форматирование: HTML и Markdown (синтаксис различается)
- Работа с участниками: добавление, удаление, список
- Закреплённые сообщения, действия в чате (typing)
- Мини-приложения: базовая концепция, валидация initData, биометрия
- Rate limit: 30 запросов в секунду (у Telegram гранулярнее - отдельные лимиты на чат)
Сколько стоит миграция
По нашей оценке для типичного бота (webhook, отправка/получение сообщений, inline-кнопки, работа с группами):
Простой бот (команды + текст + кнопки) — 2-3 дня разработчика. Основное время уйдёт на переделку HTTP-клиента, формата запросов и обработки обновлений.
Средний бот (файлы, клавиатуры, callback, работа с участниками) — 5-7 дней. Двухшаговая загрузка файлов в Max, другой формат клавиатур, обработка attachment.not.ready.
Сложный бот с мини-приложением — 2-3 недели. Перенос Web App, замена JS-библиотеки, адаптация под отсутствие MainButton и CloudStorage, тестирование на всех платформах.
Стоит ли переносить прямо сейчас
Если ваш бот — критичный бизнес-инструмент и Telegram работает нестабильно для ваших пользователей — да, стоит. Max Bot API достаточно зрелый для продакшна, а уникальные фичи (история сообщений, список чатов) в некоторых сценариях даже лучше Telegram.
Если бот — вспомогательный инструмент и Telegram у вашей аудитории работает нормально — не торопитесь. API Max продолжает развиваться, документация местами неполная, экосистема SDK и библиотек только формируется.
Оптимальная стратегия — сделать бота кроссплатформенным: вынести бизнес-логику в отдельный слой, а API-адаптеры для Telegram и Max подключать как модули. Тогда переключение между платформами — вопрос конфигурации, а не переписывания кода.
Мы именно так и планируем сделать для своего CRM-бота. API Max достаточно близок к Telegram, чтобы абстракция работала без костылей. А возможность читать историю чата через GET /messages — бонус, ради которого стоит попробовать.