Мы сравнили Max Bot API и Telegram Bot API метод за методом. Вот что ждёт разработчиков при миграции

У нас в студии есть Telegram-бот, который работает в клиентских группах: сохраняет историю переписки, анализирует обсуждения и создаёт задачи в CRM. После новостей о замедлении Telegram мы решили разобраться, насколько реально перенести бота на мессенджер Max. Не «в теории похоже», а конкретно: какие методы API совпадают, где придётся переписывать, и на каких моментах можно споткнуться.

Мы сравнили Max Bot API и Telegram Bot 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 — бонус, ради которого стоит попробовать.

4
5 комментариев