БэкендPython

Как сделать бота в MAX на Python: первая команда и ответ пользователю

Создаём первого бота в MAX на Python: получаем события через long polling, отвечаем на команду /start и правильно храним токен доступа.

Кодик

Автор

6 мин чтения

MAX Bot API можно освоить на одном небольшом проекте, если сразу видеть вход, действие и результат. MAX Bot API принимает обычные HTTP-запросы, поэтому первого бота можно собрать на Python без тяжёлого фреймворка. Ниже вы соберёте работающий пример и проверите обычный и граничный сценарии.

Токен легко случайно положить в код, marker легко потерять, а long polling ошибочно принять за готовую production-архитектуру. Поэтому отделим настройку, входные данные, основное действие и проверку. В этой статье вы соберёте бота, который получает новые события, узнаёт команду /start и отправляет ответ в тот же чат. Проверка: сообщение /start даёт один ответ, marker обновляется, а пустая очередь не вызывает ошибку.

1Соберите минимум

прочитать MAX_TOKEN из окружения. Не расширяйте проект до первого успешного запуска.

2Увидьте данные

ответ содержит updates и новый marker. Проверяйте значение, а не отсутствие ошибки.

3Измените правило

После успеха добавьте /help и ответ для неизвестной команды. Так копирование станет практикой.

Как устроен учебный проект MAX Bot API

MAX Bot API получает входные данные, проверяет их, выполняет одно внешнее действие и сохраняет наблюдаемый результат. Держите ввод, логику и отображение раздельно: тогда каждый этап можно проверить отдельно.

ЭтапДействиеПроверяемый результат
Токенпрочитать MAX_TOKEN из окружениясекрет отсутствует в файле и выводе
Событиявызвать GET /updates с timeout и markerответ содержит updates и новый marker
Командаизвлечь текст и chat_id из событияобрабатывается только ожидаемый тип сообщения
Ответотправить POST /messages для найденного чатапользователь видит приветствие один раз

Контрольные точки: токен, события, команда и ответ. Следующий шаг начинается после совпадения с ожидаемым результатом.

Путь данных в проекте MAX Bot API
От входных данных до видимого результата. Сначала проверяется вход, затем действие и только потом интерфейс.

Зафиксируйте первый успех Сделайте один GET-запрос к https://platform-api2.max.ru/updates и убедитесь, что сервер возвращает JSON, а не HTML. Сохраните команду запуска и ожидаемый вывод.

Собираем рабочий пример шаг за шагом

Материал сверялся с официальной документацией сервиса 21 октября 2026 года. Создайте окружение, установите httpx и задайте MAX_TOKEN. Для разработки используйте long polling, а для production планируйте webhook. Проверьте текущую папку через pwd или Get-Location. Вставьте пример целиком, выполните один раз, затем разбирайте по частям.

import os
import time
import httpx

BASE = "https://platform-api2.max.ru"
TOKEN = os.environ["MAX_TOKEN"]
HEADERS = {"Authorization": TOKEN}

def send(chat_id: int, text: str) -> None:
    response = httpx.post(
        f"{BASE}/messages",
        params={"chat_id": chat_id},
        headers=HEADERS,
        json={"text": text},
        timeout=20,
    )
    response.raise_for_status()

def run() -> None:
    marker = None
    while True:
        response = httpx.get(
            f"{BASE}/updates",
            params={"timeout": 30, "marker": marker},
            headers=HEADERS,
            timeout=40,
        )
        response.raise_for_status()
        payload = response.json()
        marker = payload.get("marker", marker)
        for update in payload.get("updates", []):
            message = update.get("message", {})
            if message.get("body", {}).get("text") == "/start":
                send(message["recipient"]["chat_id"], "Привет! Я бот Кодика.")
        time.sleep(0.2)

if __name__ == "__main__":
    run()
Что должно произойти после запуска
  • Терминал получает список обновлений и запоминает marker следующей страницы.
  • Команда /start приводит к POST-запросу и новому сообщению в чате.
  • Повторный запуск даёт тот же предсказуемый результат.
  • Пустой ввод получает понятное сообщение вместо падения.

Главная функция принимает явные аргументы и возвращает данные, которые можно проверить отдельно от интерфейса. Найдите в примере вход, проверку и место формирования результата.

Хрупкий и проверяемый вариант MAX Bot API
Что отличает устойчивый проект от случайного запуска. Явные границы делают ошибку локальной и понятной.

Что происходит внутри и почему это работает

Long polling удерживает запрос до появления события или тайм-аута. Поле marker не даёт повторно читать уже обработанную часть очереди. Логику держите отдельно от вывода: функция получает аргумент и возвращает значение, а интерфейс показывает его. Документация MAX прямо относит GET /updates к разработке и тестированию. Для production нужен webhook и проверяемый HTTPS-адрес.

ЧастьЗа что отвечаетЧто проверить
GET /updatesполучает события и markerAuthorization передан заголовком
Разбор событиянаходит текст и chat_idнеожиданный тип не роняет цикл
POST /messagesотправляет ответ в чатошибка HTTP не маскируется

Marker следует сохранять после успешной обработки пачки. Если процесс упал между чтением и ответом, возможен повтор. Для важных действий добавьте журнал идентификаторов событий и идемпотентность. Не прячьте поток в одном обработчике: сохраните вход, проверьте его, вызовите операцию и только затем обновите интерфейс.

Проверьте границу Отправьте обычный текст вместо /start, затем два раза /start. Бот должен игнорировать первый случай и не терять marker. Меняйте одно условие за прогон, чтобы видеть причину.

Проверяем проект и добавляем свою функцию

Добавьте команды /help и /about, вынесите выбор ответа в чистую функцию и протестируйте её без сети. До правки запишите ожидаемое поведение одним предложением. После граничного теста повторите обычный сценарий.

Проверка своими руками
  1. Сохраните ожидаемый результат: сообщение /start даёт один ответ, marker обновляется, а пустая очередь не вызывает ошибку.
  2. Измените правило: добавьте /help и ответ для неизвестной команды. Сначала предскажите итог.
  3. Передайте граничное значение и убедитесь, что приложение не падает.
  4. Верните корректные данные и объясните роли трёх основных частей.
Готово, если выполняются все пункты
  • секрет отсутствует в файле и выводе
  • ответ содержит updates и новый marker
  • обрабатывается только ожидаемый тип сообщения
  • пользователь видит приветствие один раз

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

Четыре контрольные точки MAX Bot API
Четыре проверки перед следующим шагом. Каждый следующий этап начинается после наблюдаемого результата.

Что запомнить и куда двигаться дальше

После учебного запуска замените бесконечный цикл на webhook, добавьте журнал ошибок и ограничьте команды понятным набором. Для закрепления откройте в статье про Discord webhook, в первом API на FastAPI и в Telegram-боте на Python.

Как изучить тему в Кодике

Сначала разберите формат данных и одну функцию, затем подключайте сеть, интерфейс или внешний сервис. Сначала восстановите главную функцию и проверьте её на трёх значениях.

ШагЧто разобратьМини-проверка
1. ОсноваФункции, словари, циклы и переменные окружения PythonОбъясните вход и выход функции.
2. ИнструментHTTP GET/POST, JSON, тайм-ауты и raise_for_statusПовторите команду по памяти.
3. ПроектРазбор одного события и отправку ответаПроверьте два сценария.
4. РефакторингWebhook, идемпотентность и журналированиеРазделите ввод, логику и вывод.

Закрепите проект, переписав ключевую функцию по памяти и добавив собственный граничный случай. Базовый синтаксис закрепите через курс Python.

Токен в файле

Секрет попадает в Git. Читайте его из MAX_TOKEN и отзывайте при утечке.

Старый домен API

Используйте актуальный platform-api2.max.ru из документации.

Marker не обновляется

Бот повторно читает события и дублирует ответы.

Long polling в production

Документация рекомендует webhook для рабочего окружения.

Сверяйтесь с первичной документацией. Команды и ограничения примера проверены по официальному источнику 1. Если версия инструмента изменилась, официальный источник важнее старого скриншота.

Что получится в итоге

Готовый результат проекта: Как сделать бота в MAX на Python: первая команда и ответ пользователю
Финальный экран показывает результат, состояние запроса и понятное сообщение об ошибке без раскрытия секретов.

Короткие ответы
Зачем нужен marker?

Он указывает, с какого места читать следующую порцию обновлений.

Почему токен передаётся заголовком?

Query-параметр больше не поддерживается и чаще попадает в журналы.

Что проверять первым, если MAX Bot API не запускается?

Версию среды, текущую папку, команду запуска и первую строку ошибки.

Как понять, что проект MAX Bot API работает?

Проверьте основной сценарий, неверный ввод, повторный запуск и один граничный случай.

Можно ли начать с готового кода?

Да. Добейтесь результата, измените одно правило и восстановите ключевую функцию без копирования.

Сделайте один осознанный шаг дальше

Выберите одно улучшение и проведите его от ввода до результата.

Если не хватает основы, перейдите курс Python, затем восстановите ключевую функцию без подсказки.