Что нужно до начала
Личного аккаунта MAX мало. Бота заводит только подтверждённый профиль на платформе «MAX для партнёров» (business.max.ru). Это правило MAX, обойти его не получится ни через один сервис.
- Кто может. Юрлица, ИП и самозанятые, резиденты РФ. Физлицам и нерезидентам верификация пока недоступна. От организации её проходит руководитель или представитель с правом первой подписи.
- Чем подтвердить. Организации и ИП через Госуслуги или банк (T-Business ID, Alfa ID; через банк только в веб-версии платформы). Самозанятые только через Госуслуги.
- Сколько ботов. До 5 на профиль организации или ИП, до 2 на профиль самозанятого.
Модерация бота занимает до 48 часов по рабочим дням, плюс время на подтверждение профиля. Если реклама стартует в понедельник, бота лучше подать на проверку заранее.
Шаг 1. Создайте бота
В кабинете откройте «Чат-боты» и нажмите «Создать». Заполните карточку:
- логотип: квадрат 500×500 px, до 5 МБ, jpg или png;
- название: до 59 символов, без эмодзи;
- описание: до 200 символов.
Никнейм выбрать нельзя. MAX создаёт его сам: у ИП и юрлиц это id<ИНН>_bot, у самозанятых se<номер профиля на платформе>_bot. Он же попадёт в ссылку на бота, и поменять его пока нельзя. То есть ИНН будет виден в ссылке, которую вы раздаёте в рекламу. Лучше знать об этом заранее.
После создания бот сразу уходит на модерацию. Статус приходит сообщением от бота «MAX для бизнеса». Если нужны правки, бот получит статус «Нужны исправления», а причина появится в его карточке.
Ловушка. Изменение настроек опубликованного бота снова отправляет его на модерацию, и пока она идёт, менять ничего нельзя. Не правьте карточку за день до запуска.
Шаг 2. Заберите токен
Токен появляется только у бота, прошедшего модерацию. Путь: «Чат-боты», выберите бота, меню «⋮», «Настройки». Его же можно получить в мини-приложении «MAX для бизнеса» или командой «Получить токен» в одноимённом боте.
Токен даёт полный контроль над ботом. Не кладите его в чаты и в код, который уходит в публичный репозиторий.
Шаг 3. Выберите, чем бот будет работать
| Способ | Кому подходит | Чем платите |
|---|---|---|
| Свой код на API | Есть разработчик, логика нестандартная | Сервер, время, поддержка |
| Конструктор | Нужны воронки и рассылки без кода | Абонплата от базы или сообщений |
| Платформа с CRM | Менеджеры ведут переписку в том же окне | Абонплата |
Дальше по каждому.
Свой код
У MAX открытое API на platform-api2.max.ru. Официальные библиотеки есть для JavaScript/TypeScript и Go, спецификация OpenAPI лежит в репозитории max-messenger/api-schema. Токен передаётся заголовком Authorization, в адресе запроса его больше не принимают.
Проверьте токен:
curl -H "Authorization: $MAX_TOKEN" https://platform-api2.max.ru/me
Если вместо ответа получили ошибку сертификата, это не поломка. API подписан корневым сертификатом Минцифры, которого нет в стандартных наборах. Скачайте его с Госуслуг и добавьте в доверенные. Отключать проверку TLS не надо: токен ходит в каждом запросе.
Подпишите бота на события. Секрет: от 5 до 256 символов, латиница, цифры и дефис.
curl -X POST https://platform-api2.max.ru/subscriptions \
-H "Authorization: $MAX_TOKEN" -H "Content-Type: application/json" \
-d '{"url":"https://your-domain.ru/webhook",
"update_types":["message_created","bot_started"],
"secret":"zamenite-na-dlinnuyu-sluchaynuyu-stroku"}'
Вот минимальный бот на Python без сторонних библиотек. Он встречает человека, просит телефон кнопкой и записывает метку из ссылки:
import hmac, json, os, re, ssl, urllib.parse, urllib.request
from http.server import BaseHTTPRequestHandler, HTTPServer
API = "https://platform-api2.max.ru"
TOKEN = os.environ["MAX_TOKEN"]
SECRET = os.environ["MAX_SECRET"]
# API MAX подписан корневым сертификатом Минцифры, файл в формате PEM лежит рядом
TLS = ssl.create_default_context(cafile="russian_trusted_ca.pem")
def call(path, params=None, body=None):
url = f"{API}{path}?{urllib.parse.urlencode(params or {})}"
req = urllib.request.Request(
url, data=json.dumps(body or {}).encode(), method="POST",
headers={"Authorization": TOKEN, "Content-Type": "application/json"})
with urllib.request.urlopen(req, context=TLS, timeout=20) as resp:
return json.load(resp)
def send(user_id, text, buttons=None):
body = {"text": text}
if buttons:
body["attachments"] = [{"type": "inline_keyboard",
"payload": {"buttons": buttons}}]
call("/messages", {"user_id": user_id}, body)
def handle(update):
kind = update.get("update_type")
if kind == "bot_started":
# payload: часть после ?start= в ссылке, по ней видно источник
print("старт", update["user"]["user_id"], update.get("payload"))
send(update["user"]["user_id"], "Привет! Оставьте телефон, и я пришлю материал.",
[[{"type": "request_contact", "text": "Отправить телефон"}]])
elif kind == "message_created":
sender = update["message"]["sender"]
if sender.get("is_bot"):
return
for att in update["message"]["body"].get("attachments") or []:
if att.get("type") == "contact":
vcf = att["payload"].get("vcf_info") or ""
phone = re.search(r"^TEL[^:]*:(.+)$", vcf.replace("\\r\\n", "\n"), re.M)
print("телефон", sender["user_id"], phone and phone.group(1).strip())
send(sender["user_id"], "Спасибо! Вот материал: https://example.com/guide")
class Webhook(BaseHTTPRequestHandler):
def do_POST(self):
got = self.headers.get("X-Max-Bot-Api-Secret", "")
if not hmac.compare_digest(got, SECRET):
self.send_response(403)
self.end_headers()
return
size = int(self.headers.get("Content-Length", 0))
handle(json.loads(self.rfile.read(size)))
self.send_response(200)
self.end_headers()
HTTPServer(("127.0.0.1", 8080), Webhook).serve_forever()
Это учебный пример. Перед ним нужен nginx или другой прокси с HTTPS, а для настоящей работы ещё база и очередь отправки. Вот что MAX требует от вашего адреса:
- HTTPS только на порту 443, сертификат от доверенного центра или Минцифры с полной цепочкой, домен должен совпадать с сертификатом. Самоподписанный и простой HTTP не подойдут;
- ответ 200 в течение 30 секунд, иначе MAX считает доставку неудачной и повторяет до 10 раз с растущей паузой. Одно и то же событие может прийти дважды, учитывайте это;
- если адрес не отвечает 8 часов, MAX сам отпишет от него бота. После долгого простоя проверяйте подписку. Я для этого раз в 10 минут сверяю её автоматически;
- Long Polling (
GET /updates) MAX рекомендует только для разработки и тестов, и пока у бота есть подписка на вебхук, он не работает.
Конструктор
Сервисов-конструкторов с поддержкой MAX уже около десятка. У большинства платный вход, у некоторых есть бесплатный вариант с ограничениями. Цены меняются и часто зависят от размера базы, так что сверяйте на сайте сервиса.
Подключение почти везде одинаковое: вставляете токен в настройках канала. Перед оплатой я бы проверил на пробном периоде пять вещей:
- Работает ли кнопка «Отправить телефон» и куда ложится номер.
- Доходит ли метка из ссылки
?start=до карточки клиента. - Как считается цена: по подписчикам или по сообщениям.
- Можно ли выгрузить подписчиков, если решите уйти.
- Что будет с ботом, который уже подключён к другому сервису: не начнёт ли человек получать два ответа.
TERVIO
Это мой продукт, поэтому читайте с поправкой. Он подойдёт, если кроме бота вам нужно окно, где менеджеры переписываются с клиентами из MAX, Telegram, ВКонтакте, WhatsApp и Авито.
- В разделе «Боты», в карточке «Подключить бота», выберите MAX, вставьте токен и нажмите «Подключить».
- Соберите воронку в «Сценариях»: сообщения, кнопки, вопросы, паузы, теги. Код не нужен, а один сценарий можно запускать и в MAX, и в Telegram.
- Раздайте ссылку вида
max.ru/имя_бота?start=метка. Метка попадёт в карточку клиента.
Если бот работал в другом сервисе, соберите воронки заранее: при подключении TERVIO забирает бота себе, и в старом сервисе он замолчит. Воронки Salebot импортируются файлом выгрузки, отчёт показывает, что не перенеслось.
Ограничения тоже назову. Человек, написавший и в Telegram, и в MAX, для TERVIO остаётся двумя карточками. Блок с мини-приложением в MAX не покажется. Здесь я описываю только воронки, рассылки, переписку и модерацию чатов: про остальные модули в MAX спросите отдельно, прежде чем на них рассчитывать.
Шаг 4. Соберите первую воронку
Для первого запуска хватит четырёх экранов. Вот рабочая схема на регистрацию:
- Человек открывает
max.ru/имя_бота?start=post_12. Бот получает событиеbot_startedс меткойpost_12. - Бот коротко говорит, что человек получит, и задаёт один вопрос кнопками.
- Бот просит телефон кнопкой
request_contactи выдаёт обещанное. - Тем, кто замолчал, бот напоминает через час и через сутки. Ответил человек, и напоминания отменяются.
Что отличается от Telegram:
- Клавиатуры под полем ввода в MAX нет, все кнопки живут под сообщением.
- В сообщении до 30 рядов кнопок и до 7 кнопок в ряду. Если в ряду есть кнопка-ссылка, запрос телефона, геолокации или мини-приложения, то не больше 3.
- Подпись кнопки может быть длинной, но MAX советует до 20 символов при одной кнопке в ряду и до 10 при двух.
- Метка в ссылке: до 128 символов. Длиннее бот не получит. Личных данных в неё не кладите.
Заведите отдельную метку на каждый пост и объявление. Иначе через месяц не узнаете, откуда пришёл покупатель.
Шаг 5. Рассылка в MAX
Бот пишет только тем, кто сам его запустил. Купить или загрузить чужую базу и написать по ней нельзя. База собирается ссылками на бота, поэтому начинать надо до того, как рассылка понадобится.
Технические пределы MAX: 4 000 символов текста, 12 вложений в сообщении, 2 сообщения в секунду в один чат, до 30 запросов в секунду на бота. Длинные тексты придётся делить, а массовую отправку ставить в очередь. Хороший конструктор делает это сам.
Рассылка с рекламным содержанием требует согласия получателя по закону о рекламе. Как именно его собирать в вашем случае, уточните у юриста.
Если переезжаете с базой
Самая неприятная находка за время работы с MAX. В выгрузке Salebot для MAX в колонке id лежит номер диалога, а не id человека. По виду их не отличить, диапазоны совпадают. Загрузите такой файл как есть, и бот будет писать не туда или получать отказ.
Перевести номер в человека можно запросом GET /chats/{chat_id} от имени бота: id лежит в поле dialog_with_user.user_id. Если загружаете базу через сервис, спросите, умеет ли он это. Проверьте на двух-трёх своих номерах до массовой отправки.
Коротко: где теряют время
- Подают бота на модерацию в день запуска. Закладывайте 48 рабочих часов.
- Правят карточку опубликованного бота и снова попадают на проверку.
- Отключают проверку сертификата вместо установки корневого сертификата Минцифры.
- Не замечают, что вебхук отписался после простоя.
- Раздают одну ссылку без меток во все каналы.
- Начинают собирать базу, когда рассылка нужна уже завтра.
Собрать бота в MAX без кода
Подключите бота токеном, соберите воронку на свежий пост и посмотрите, сколько людей дойдёт до заявки. Не подойдёт — не оплачивайте: кабинет встанет на паузу сам.
Источники: документация MAX для разработчиков (dev.max.ru), раздел о платформе «MAX для партнёров» и справочник методов API. Правила MAX меняются, проверено 4 ноября 2026.