MAX Bot API: Бот без сервера: long polling для разработки

Сценарий из mcp-everything. Актуально на 2026-10-24.

Получать события в цикле — удобно для отладки и ботов без публичного HTTPS-адреса.

  1. В цикле вызывай GET /updates с timeout (до 90 секунд ожидания) и types — нужными типами событий.
  2. В ответе updates и marker. В следующий запрос передай этот marker: всё до него считается прочитанным. Без marker вернётся только последнее обновление.
  3. На каждое сообщение отвечай через POST /messages.
  4. Для событий из групповых чатов и каналов бот должен быть администратором.
import requests

API = "https://platform-api2.max.ru"
H = {"Authorization": "<токен бота>"}
marker = None
while True:
    params = {"timeout": 30, "types": "message_created"}
    if marker:
        params["marker"] = marker
    r = requests.get(f"{API}/updates", headers=H, params=params, timeout=40).json()
    marker = r.get("marker", marker)
    for upd in r.get("updates", []):
        msg = upd.get("message", {})
        chat_id = msg.get("recipient", {}).get("chat_id")
        text = msg.get("body", {}).get("text")
        if chat_id and text:
            requests.post(f"{API}/messages", headers=H, params={"chat_id": chat_id}, json={"text": f"Вы написали: {text}"})

Базовые URL

Авторизация

Тип: API-ключ

Токен бота передаётся в заголовке Authorization: <access_token> (без префикса). Передача токена в query-параметре access_token больше не поддерживается.

curl -X GET "https://platform-api2.max.ru/me" \
  -H "Authorization: {access_token}"

Методы сценария

POST /messages — Отправка сообщения

Адресат задаётся user_id или chat_id. В ответе — объект message созданного сообщения или поста.

Параметр Где Тип Обяз. Описание
user_id query integer нет ID пользователя-получателя
chat_id query integer нет ID чата или канала
disable_link_preview query boolean нет Не генерировать превью ссылок
text body string нет Текст, до 4000 символов
attachments body array нет Вложения: файлы (payload.token из /uploads), inline_keyboard и др.
link body object нет Ссылка на сообщение в чате или пост в канале (ответ или пересылка)
notify body boolean нет Push-уведомления участникам, по умолчанию true
format body string нет Форматирование текста: markdown или html

Пример запроса:

curl -X POST "https://platform-api2.max.ru/messages?user_id={user_id}" \
  -H "Authorization: {access_token}" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "Это сообщение с кнопкой-ссылкой",
  "attachments": [
    {
      "type": "inline_keyboard",
      "payload": {
        "buttons": [
          [
            {
              "type": "link",
              "text": "Откройте сайт",
              "url": "https://example.com"
            }
          ]
        ]
      }
    }
  ]
}'

GET /updates — Получение событий (long polling)

Для событий из групповых чатов и каналов бот должен быть администратором.

В ответе: updates[] и marker — указатель на следующую страницу; всё до него считается прочитанным.

Параметр Где Тип Обяз. Описание
limit query integer нет 1–1000, по умолчанию 100
timeout query integer нет Ожидание в секундах, 0–90, по умолчанию 30
marker query integer нет marker из предыдущего ответа; без него вернётся только последнее обновление
types query array нет Типы событий, например message_created,message_callback

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://dev.max.ru/docs-api Вся интеграция одним документом: https://mcp-everything.ru/integrations/max-bot-api.md