MAX — российская цифровая платформа, предоставляющая инструменты для создания чат-ботов и мини-приложений. В 2026 году платформа активно развивается, предлагая разработчикам удобный API и конструкторы без необходимости программирования. В этом руководстве вы узнаете, как создать собственного бота с нуля.
Что такое бот в MAX и зачем он нужен
Чат-бот в MAX — это автоматизированный помощник, способный взаимодействовать с пользователями через текстовые сообщения, кнопки и команды. Боты выполняют рутинные задачи без участия человека: отвечают на вопросы, отправляют уведомления, принимают заказы и интегрируются с внешними сервисами.
Автоматизация процессов
Обрабатывайте типовые запросы клиентов автоматически, освобождая время сотрудников для сложных задач.
Круглосуточная работа
Бот доступен пользователям 24/7, мгновенно реагируя на запросы в любое время суток.
Масштабируемость
Один бот обслуживает неограниченное количество пользователей одновременно без потери качества.
Требования для создания бота
Прежде чем приступить к созданию бота, убедитесь, что выполнены следующие условия. Платформа MAX для партнёров имеет определённые ограничения доступа.
Подключение к платформе MAX для партнёров доступно ограниченному списку юридических лиц и ИП, которые разместили приложение в RuStore или зарегистрировались на МСП.РФ.
- Верифицированный профиль организации на платформе MAX для партнёров
- Регистрация на МСП.РФ или наличие приложения в RuStore
- Лимит: до 5 ботов на одну организацию
Пользователи получат доступ к вашему боту только после успешной модерации. Статус проверки отображается рядом с названием бота в панели управления.
Пошаговое создание бота
Этап 1: Регистрация и настройка профиля
Первым делом необходимо подготовить аккаунт на платформе MAX для партнёров и пройти верификацию организации.
Регистрация на платформе
Перейдите на портал MAX для партнёров и создайте учётную запись организации. Потребуются данные юридического лица: ИНН, ОГРН, контактная информация.
Верификация профиля
Подтвердите принадлежность к организации через МСП.РФ или предоставьте ссылку на приложение в RuStore. Процесс верификации занимает от 1 до 5 рабочих дней.
Создание нового бота
В личном кабинете найдите раздел создания ботов и нажмите кнопку добавления. Заполните обязательные поля: название, описание, загрузите логотип.
Этап 2: Настройка параметров бота
Каждый бот в MAX имеет набор параметров, определяющих его внешний вид и поведение. Рассмотрим основные настройки.
| Параметр | Описание | Примечание |
|---|---|---|
Название |
Имя бота, отображаемое в чате | До 64 символов |
Аватар |
Логотип бота в формате изображения | Рекомендуется 512x512 px |
Ник |
Уникальный идентификатор в URL | Генерируется автоматически |
Описание |
Информация о функциях бота | До 512 символов |
Настройки бота изменяются только через платформу MAX для партнёров. Редактирование непосредственно в мессенджере недоступно. Ник бота после создания изменить нельзя.
Получение токена бота
После успешной модерации бота в разделе Интеграция появится возможность получить токен — уникальный ключ для взаимодействия с API MAX.
Токен предоставляет полный доступ к управлению ботом. Никогда не публикуйте его в открытых репозиториях, чатах или документации. При подозрении на утечку немедленно обновите токен в настройках.
Структура проекта бота
При разработке бота с использованием кода рекомендуется придерживаться чёткой структуры проекта. Ниже представлена типовая организация файлов для бота на Node.js.
max-bot/
-- Корневая директория проекта
|
+-- src/ -- Исходный код бота
| +-- index.js -- Точка входа приложения
| +-- bot.js -- Основная логика бота
| +-- config.js -- Конфигурация и переменные
| |
| +-- handlers/ -- Обработчики событий
| | +-- message.js -- Обработка сообщений
| | +-- callback.js -- Обработка нажатий кнопок
| | +-- command.js -- Обработка команд
| |
| +-- keyboards/ -- Шаблоны клавиатур
| | +-- main.js -- Главное меню
| | +-- inline.js -- Inline-клавиатуры
| |
| +-- services/ -- Внешние сервисы
| | +-- api.js -- Запросы к API MAX
| | +-- database.js -- Работа с базой данных
| |
| +-- utils/ -- Вспомогательные функции
| +-- helpers.js -- Утилиты и хелперы
| +-- logger.js -- Логирование
|
+-- .env -- Переменные окружения (токен)
+-- .gitignore -- Исключения для Git
+-- package.json -- Зависимости проекта
+-- README.md -- Документация
Работа с API MAX
API MAX позволяет боту взаимодействовать с платформой через HTTPS-запросы. Базовый URL для всех запросов: https://platform-api.max.ru
HTTP-методы API
В зависимости от типа операции используются различные HTTP-методы:
| Метод | Назначение | Пример |
|---|---|---|
| GET | Получение данных | /messages/{id} |
| POST | Создание ресурсов | /messages |
| PUT | Полное обновление | /chats/{id} |
| PATCH | Частичное обновление | /chats/{id} |
| DELETE | Удаление ресурсов | /messages/{id} |
Авторизация запросов
Для авторизации используйте заголовок Authorization с токеном бота. Передача токена через query-параметры больше не поддерживается.
// Пример GET-запроса к API MAX
const response = await fetch('https://platform-api.max.ru/me', {
method: 'GET',
headers: {
// Токен передаётся в заголовке Authorization
'Authorization': process.env.BOT_TOKEN,
'Content-Type': 'application/json'
}
});
const botInfo = await response.json();
Пример ответа API
Сервер возвращает данные в формате JSON. Ниже пример ответа на запрос информации о боте:
{
"user_id": 1, // Уникальный ID бота
"name": "My Bot", // Отображаемое имя
"username": "my_bot", // Ник бота
"is_bot": true, // Флаг: это бот
"last_activity_time": 1737500130100
}
Коды ответов HTTP
При работе с API важно корректно обрабатывать различные статусы ответов сервера:
| Код | Статус | Описание |
|---|---|---|
| 200 | OK | Запрос выполнен успешно |
| 400 | Bad Request | Некорректный формат запроса |
| 401 | Unauthorized | Ошибка авторизации, проверьте токен |
| 404 | Not Found | Запрашиваемый ресурс не найден |
| 429 | Too Many Requests | Превышен лимит запросов (30 rps) |
| 503 | Service Unavailable | Сервис временно недоступен |
Максимальное количество запросов к API — 30 в секунду. При превышении лимита сервер вернёт код 429. Реализуйте механизм повторных попыток с экспоненциальной задержкой.
Создание клавиатур и кнопок
Клавиатура позволяет пользователям взаимодействовать с ботом через кнопки вместо текстовых сообщений. MAX поддерживает inline-клавиатуры, которые размещаются непосредственно под сообщением бота.
Ограничения inline-клавиатуры
До 210 кнопок
Максимальное количество кнопок в одной клавиатуре. Распределяются по рядам для удобной навигации.
До 30 рядов
Кнопки группируются в ряды. В каждом ряду до 7 обычных кнопок или до 3 специальных.
Ссылки до 2048 символов
Максимальная длина URL для кнопок типа link. Текст на кнопке выравнивается по центру.
Типы кнопок
Платформа MAX предоставляет несколько типов кнопок для различных сценариев взаимодействия:
| Тип | Назначение | Особенности |
|---|---|---|
callback |
Отправка события на сервер | Сервер получает message_callback |
link |
Открытие внешней ссылки | Открывается в новой вкладке |
message |
Отправка текста боту | Имитирует ввод пользователя |
request_contact |
Запрос контакта | Получение номера телефона |
request_geo_location |
Запрос геолокации | Получение координат |
open_app |
Открытие мини-приложения | Запуск встроенного приложения |
Пример создания клавиатуры
Для добавления кнопок отправьте сообщение с вложением типа inline_keyboard:
// Формирование сообщения с inline-клавиатурой
const messageWithKeyboard = {
text: "Выберите действие:",
attachments: [
{
type: "inline_keyboard",
payload: {
// Двумерный массив: ряды и кнопки
buttons: [
[
// Первый ряд — две callback-кнопки
{
type: "callback",
text: "Информация",
payload: "action_info"
},
{
type: "callback",
text: "Настройки",
payload: "action_settings"
}
],
[
// Второй ряд — кнопка-ссылка
{
type: "link",
text: "Открыть сайт",
url: "https://max.ru"
}
]
]
}
}
]
};
Обработка нажатий кнопок
При нажатии на callback-кнопку сервер MAX отправляет событие message_callback. Обработайте его в соответствующем хендлере:
// Обработчик callback-событий от кнопок
export function handleCallback(event) {
const { payload, user, chat_id } = event;
// Определяем действие по payload кнопки
switch (payload) {
case 'action_info':
sendInfoMessage(chat_id);
break;
case 'action_settings':
showSettings(chat_id, user);
break;
default:
sendDefaultResponse(chat_id);
}
}
Получение обновлений
Бот должен получать информацию о новых сообщениях и событиях. MAX поддерживает два способа: Long Polling и Webhook.
Long Polling
Бот периодически опрашивает сервер на наличие новых событий. Подходит для разработки и тестирования.
Webhook
Сервер MAX отправляет события на ваш URL. Обязателен для production. Только HTTPS!
Для отправки вебхуков поддерживается только протокол HTTPS, включая самоподписанные сертификаты. Обычный HTTP не поддерживается платформой.
Реализация Long Polling
const API_URL = 'https://platform-api.max.ru';
const TOKEN = process.env.BOT_TOKEN;
// Функция получения обновлений через Long Polling
async function getUpdates(offset = 0) {
const response = await fetch(
`${API_URL}/updates?offset=${offset}&timeout=30`,
{
headers: { 'Authorization': TOKEN }
}
);
return response.json();
}
// Основной цикл опроса сервера
async function startPolling() {
let offset = 0;
while (true) {
const updates = await getUpdates(offset);
for (const update of updates) {
processUpdate(update);
offset = update.update_id + 1;
}
}
}
Настройка Webhook
import express from 'express';
const app = express();
app.use(express.json());
// Эндпоинт для приёма webhook-событий
app.post('/webhook', (req, res) => {
const update = req.body;
// Обрабатываем входящее событие
processUpdate(update);
// Отвечаем серверу MAX статусом 200
res.sendStatus(200);
});
// Запуск HTTPS-сервера на порту 443
app.listen(443);
Форматирование сообщений
MAX позволяет улучшить внешний вид сообщений с помощью разметки Markdown или HTML. Для активации установите свойство format в теле сообщения.
Поддерживаемая разметка Markdown
| Элемент | Синтаксис | Результат |
|---|---|---|
| Курсив | *текст* или _текст_ |
текст |
| Жирный | **текст** или __текст__ |
текст |
| Зачёркнутый | ~~текст~~ |
|
| Подчёркнутый | ++текст++ |
текст |
| Моноширинный | `код` |
код |
| Ссылка | [текст](url) |
текст |
Пример отправки форматированного сообщения
// Отправка сообщения с Markdown-разметкой
const formattedMessage = {
text: `**Добро пожаловать!**
Это _ваш персональный_ бот-помощник.
Доступные команды:
• \`/start\` — начать работу
• \`/help\` — справка
• \`/settings\` — настройки
[Подробнее на сайте](https://max.ru)`,
// Указываем формат разметки
format: "markdown"
};
Упоминание пользователя
Для создания кликабельного упоминания используйте специальный формат ссылки:
// Markdown: упоминание пользователя
const mentionMd = {
text: "[Иван Иванов](max://user/123456)",
format: "markdown"
};
// HTML: упоминание пользователя
const mentionHtml = {
text: '<a href="max://user/123456">Иван Иванов</a>',
format: "html"
};
При упоминании указывайте полное имя пользователя из профиля MAX, включая фамилию. Если фамилия отсутствует — используйте только имя.
Создание бота без программирования
Если у вас нет навыков разработки, воспользуйтесь конструкторами ботов от официальных партнёров MAX. Они предоставляют визуальный интерфейс для создания сценариев.
Преимущества конструкторов
Готовые шаблоны
Библиотека готовых сценариев для различных бизнес-задач: продажи, поддержка, рассылки.
Визуальный редактор
Drag-and-drop интерфейс для построения логики бота без написания кода.
AI-интеграции
Подключение искусственного интеллекта для автоматизации ответов и обработки запросов.
Подключение конструктора к боту
Выберите конструктор
Перейдите на сайт одного из официальных партнёров MAX и зарегистрируйтесь. Работайте с компьютера — мобильные версии могут иметь ограниченный функционал.
Создайте сценарий
Используйте визуальный редактор для настройки блоков, кнопок и ответов бота. Добавьте сбор данных для аналитики.
Подключите бота
В настройках конструктора найдите раздел MAX, вставьте токен бота и активируйте интеграцию. Бот готов к работе!
Конструкторы позволяют быстро запустить бота без технических знаний. Начните с простого сценария приветствия и постепенно добавляйте новые функции.
Библиотека MAX UI для мини-приложений
Если вы планируете создать мини-приложение внутри бота, используйте библиотеку MAX UI — набор готовых React-компонентов, разработанных на основе дизайн-системы MAX.
Возможности MAX UI
Кроссплатформенность
Компоненты адаптируются под iOS, Android и различные размеры экранов автоматически.
Темы оформления
Автоматическая поддержка светлой и тёмной темы. Определение происходит в провайдере.
TypeScript и React 18+
Современный стек с полной типизацией, полиморфными компонентами и подробной документацией.
Установка MAX UI
# Установка через npm
npm i @maxhub/max-ui
# Или через yarn
yarn add @maxhub/max-ui
# Или через pnpm
pnpm add @maxhub/max-ui
Базовая настройка
import { createRoot } from 'react-dom/client';
// Импортируем провайдер MAX UI
import { MaxUI } from '@maxhub/max-ui';
// Подключаем стили библиотеки
import '@maxhub/max-ui/dist/styles.css';
import App from './App.jsx';
// Оборачиваем приложение в провайдер
const Root = () => (
<MaxUI>
<App />
</MaxUI>
);
createRoot(document.getElementById('root')).render(<Root />);
Пример компонента
import {
Panel,
Grid,
Container,
Flex,
Avatar,
Typography
} from '@maxhub/max-ui';
const App = () => (
// Panel — контейнер с фоном
<Panel mode="secondary">
// Grid — сетка для размещения
<Grid gap={12} cols={1}>
<Container>
// Flex — гибкий контейнер
<Flex direction="column" align="center">
// Avatar — аватар пользователя
<Avatar.Container size={72} form="squircle">
<Avatar.Image src="avatar.jpg" />
</Avatar.Container>
<Typography.Title>Иван Иванов</Typography.Title>
</Flex>
</Container>
</Grid>
</Panel>
);
export default App;
По умолчанию тема и платформа определяются автоматически. Для принудительной установки используйте свойства platform (ios | android) и colorScheme (light | dark) в провайдере MaxUI.
Полиморфные компоненты MAX UI
Полиморфность в MAX UI реализована через паттерн asChild. Это позволяет компонентам отображаться как различные HTML-элементы без потери стилизации и функциональности.
Принцип работы asChild
При использовании свойства asChild компонент передаёт свои стили и поведение дочернему элементу:
| React-компонент | Результат в DOM |
|---|---|
<Button>Кнопка</Button> |
<button class="...">Кнопка</button> |
<Button asChild><a href="#">Ссылка</a></Button> |
<a class="..." href="#">Ссылка</a> |
Пример с React Router
import { Link } from 'react-router-dom';
import { Button } from '@maxhub/max-ui';
// Кнопка, которая работает как ссылка роутера
const NavigationButton = () => (
<Button asChild>
// Link получит все стили Button
<Link to="/dashboard">
Перейти в панель управления
</Link>
</Button>
);
Если одинаковые свойства родительского и дочернего компонентов имеют разные значения, приоритет остаётся у родителя. Исключения: className, style и обработчики событий — они объединяются.
Кастомизация компонентов
MAX UI предоставляет два способа изменения внешнего вида компонентов: переопределение CSS-переменных и использование свойства innerClassNames.
Переопределение CSS-переменных
Все токены дизайн-системы заданы через CSS-переменные. Измените их для конкретного компонента или всей темы:
/* Глобальное переопределение цветов */
:root {
--max-ui-primary: #6366f1;
--max-ui-background: #f8fafc;
}
/* Переопределение для конкретного компонента */
.custom-button {
--button-bg: #10b981;
--button-text: #ffffff;
}
Свойство innerClassNames
Многосоставные компоненты имеют внутренние элементы, которые можно стилизовать отдельно:
import { Button } from '@maxhub/max-ui';
import { IconSettings } from './icons';
// Кастомизация внутренних элементов кнопки
const CustomButton = () => (
<Button
iconBefore={<IconSettings />}
// Добавляем классы внутренним элементам
innerClassNames={{
iconBefore: 'custom-icon-style',
content: 'custom-text-style'
}}
>
Настройки
</Button>
);
Библиотека предоставляет API для кастомизации, но не гарантирует сохранение совместимости в следующих мажорных версиях. Любые изменения компонентов — зона ответственности разработчика мини-приложения.
Отладка и тестирование бота
Перед запуском бота в production необходимо тщательно протестировать его работу. Рассмотрим основные подходы к отладке.
Рекомендации по тестированию
Long Polling для разработки
Используйте Long Polling на этапе разработки — он проще в настройке и не требует HTTPS-сертификата.
Логирование событий
Записывайте все входящие события и ответы бота в лог для анализа поведения и поиска ошибок.
Обработка ошибок
Реализуйте глобальный обработчик ошибок и отправляйте уведомления при критических сбоях.
Пример логирования
// Простой логгер для отладки бота
const LOG_LEVELS = {
INFO: 'INFO',
WARN: 'WARN',
ERROR: 'ERROR'
};
export function log(level, message, data = {}) {
const timestamp = new Date().toISOString();
console.log(JSON.stringify({
timestamp,
level,
message,
...data
}));
}
// Использование в обработчике
export function processUpdate(update) {
log(LOG_LEVELS.INFO, 'Получено обновление', {
update_id: update.update_id
});
}
Частые ошибки и их решения
При разработке ботов для MAX начинающие разработчики часто сталкиваются с типичными проблемами. Разберём наиболее распространённые из них.
| Ошибка | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Неверный или отсутствующий токен | Проверьте токен в заголовке Authorization |
| 429 Too Many Requests | Превышен лимит 30 запросов в секунду | Добавьте задержку между запросами |
| Webhook не работает | Используется HTTP вместо HTTPS | Настройте SSL-сертификат на сервере |
| Кнопки не отображаются | Неверная структура inline_keyboard | Проверьте вложенность массива buttons |
| Форматирование не применяется | Не указан параметр format | Добавьте format: "markdown" или "html" |
Обработка ошибок API
// Обёртка для запросов с обработкой ошибок
async function apiRequest(endpoint, options = {}) {
const url = `https://platform-api.max.ru${endpoint}`;
try {
const response = await fetch(url, {
...options,
headers: {
'Authorization': process.env.BOT_TOKEN,
'Content-Type': 'application/json',
...options.headers
}
});
// Проверяем статус ответа
if (!response.ok) {
const error = await response.json();
throw new Error(`API Error: ${error.message}`);
}
return response.json();
} catch (err) {
log('ERROR', err.message);
throw err;
}
}
При возникновении ошибки 429 реализуйте механизм повторных попыток с экспоненциальной задержкой: первая попытка через 1 секунду, вторая через 2, третья через 4 и так далее.
Чеклист запуска бота
Перед выпуском бота в production убедитесь, что выполнены все пункты:
Верификация организации
Профиль организации на платформе MAX для партнёров верифицирован и активен.
Модерация бота
Бот успешно прошёл модерацию. Статус отображается в панели управления.
Безопасность токена
Токен хранится в переменных окружения, не публикуется в репозиториях.
Настройка Webhook
Для production используется Webhook с HTTPS-сертификатом.
Обработка ошибок
Реализовано логирование и уведомления о критических сбоях.
Тестирование
Все сценарии протестированы, кнопки и команды работают корректно.
Заключение
Создание бота в MAX — доступная задача как для опытных разработчиков, так и для новичков. Платформа предоставляет гибкий API для программной реализации и визуальные конструкторы для работы без кода.
Документация API
Изучите полную документацию API MAX для реализации расширенных функций бота.
MAX UI на GitHub
Исходный код библиотеки открыт. Создавайте issue и pull request для улучшений.
Сообщество разработчиков
Присоединяйтесь к сообществу MAX для обмена опытом и получения помощи.
Выберите подходящий способ создания бота: конструктор для быстрого запуска или API для полного контроля. Зарегистрируйтесь на платформе MAX для партнёров и создайте своего первого бота уже сегодня!
