Для разработчиков — создание ботов MAX | Документация API
Открыть в MAX

Для разработчиков

Привет! Меня зовут Алексей Чуркин, я разработал бота «Мои друзья» для мессенджера MAX. Если ты тоже хочешь создать своего бота — ты попал по адресу.

Когда я начинал, мне пришлось перелопатить кучу документации, набить шишки на реальных ошибках и провести не одну бессонную ночь за отладкой. В этом разделе я собрал всё, что реально пригодилось мне — от первого «Hello, World!» до продакшен-бота с тысячами пользователей.

Здесь ты найдёшь не сухие спецификации, а живые примеры из моей практики. Я расскажу, как устроен API MAX, как обрабатывать колбэки, строить клавиатуры, работать с чатами и файлами. И главное — как не наступить на грабли, на которые наступал я.

💡 Совет: Не пытайся прочитать всё сразу. Начни с раздела «Быстрый старт» — через 15 минут у тебя уже будет работающий бот. А к остальному вернёшься, когда понадобится.

Быстрый старт

Вот минимальный код, чтобы запустить бота в MAX. Я использую Node.js, потому что на нём написан мой бот — но API вызывается обычными HTTP-запросами, так что подойдёт любой язык.

1. Получи токен

Зайди в настройки своего бота в личном кабинете MAX для бизнеса и скопируй токен. Он выглядит примерно так:

токен
abc123def456ghi789jkl012mno345pqr678stu901vwx234

2. Отправь первое сообщение

Базовый запрос к API MAX — проще некуда:

sendMessage.js
const TOKEN = 'твой_токен_бота';
const CHAT_ID = 'id_чата_или_пользователя';

await fetch(`https://api.max.ru/bot/${TOKEN}/sendMessage`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        chat_id: CHAT_ID,
        text: 'Привет! Я твой первый бот в MAX 🚀'
    })
});

3. Настрой вебхук

Чтобы бот реагировал на сообщения, нужно принимать входящие запросы. Я использую вебхук — MAX будет отправлять POST-запросы на твой сервер при каждом событии:

webhook.js
// Пример обработчика на Express
app.post('/webhook', express.json(), async (req, res) => {
    const { user_id, payload, text } = req.body;

    if (text === '/start') {
        await sendMessage(user_id, 'Добро пожаловать! 👋');
    }

    res.sendStatus(200); // обязательно ответь 200!
});
⚠️ Важно: Всегда отвечай 200 OK на вебхук в течение 3 секунд. Если не ответил — MAX будет повторять запрос, и ты получишь дубликаты сообщений.
✅ Готово! Твой бот уже отвечает на /start. Дальше — добавь клавиатуру, обработку колбэков и базу данных. Всё это разобрано в следующих разделах.

Как устроен мой бот

Чтобы ты понимал архитектуру реального бота, вот упрощённая схема «Мои друзья»:

структура проекта
мой-сервер/
├── bot.js          ← точка входа, вебхук, роутинг колбэков
├── keyboard.js     ← все клавиатуры (inline + reply)
├── database.js     ← SQLite: пользователи, мэтчи, жалобы
├── matching.js     ← алгоритм подбора по интересам
├── safety.js       ← фильтр мата, модерация, жалобы
├── tasks.js        ← система заданий и бонусов
└── virtual-friend.js ← нейросетевой друг с памятью

Каждый модуль — отдельный файл. bot.js — диспетчер: получает событие, определяет тип (команда, колбэк, сообщение) и передаёт нужному обработчику.

Почему SQLite, а не PostgreSQL?

Когда я начинал, мне нужно было быстро прототипировать без поднятия отдельной базы. SQLite работает прямо в процессе Node.js, не требует настройки и справляется с тысячами пользователей. Для старта — идеально. Если пользователей станет сильно больше — мигрируешь на PostgreSQL, заменив одну строчку подключения.

Работа с клавиатурами

Клавиатуры — это то, с чем ты будешь работать чаще всего. В MAX есть два типа:

Inline-клавиатура (под сообщением)

Кнопки прикрепляются к конкретному сообщению. При нажатии бот получает колбэк с данными — не новое текстовое сообщение, а структурированный payload:

keyboard.js
const keyboard = {
    inline: [
        [{ text: '🔍 Найти друзей', callback: 'find_match' }],
        [
            { text: '👤 Анкета', callback: 'my_profile' },
            { text: '👥 Друзья', callback: 'my_matches' }
        ],
        [{ text: '⚙️ Настройки', callback: 'settings' }]
    ]
};
💡 Мой лайфхак: Всегда передавай в callback структурированные данные вроде like:123|target:456 — разделяй по | и парси на сервере. Так ты не привязываешься к длине payload и можешь передавать сколько угодно параметров.

Разделы документации

👋

Хочешь посмотреть, что я уже разработал?

Эта документация поможет тебе создать собственного бота. А если интересно, как выглядит результат — загляни в моего бота «Мои друзья». Он бесплатный и работает 24/7 прямо в MAX.

Открыть бота «Мои друзья»