Кейс о том, как мы внедрили чат‑бота в МАКС на Go с интеграцией в Bitrix и запуском на CentOS в формате отказоустойчивого сервиса
Зачем нужна разработка бота для МАКС (MAX)
Блокировка или замедление мессенджеров на территории России стало основной причиной перехода бизнеса на мессенджер МАКС, аудитория которого уже более 120 миллионов пользователей. Соответственно вполне логичный шаг создать бота в данном мессенджере и начать собирать лиды и выстраивать коммуникации с его помощью.
Рост аудитории мессенджера является самым высоким среди отечественных цифровых платформ, отчасти потому что данный рост подстегивает и государство и крупные компании, которые уже активно внедряют использование мессенджера.
Основные задачи разработки бота
- Предоставить пользователям быстрый способ связи с оператором через МАКС.
- Собрать контактные данные (телефон, e‑mail, ФИО) в удобном сценарии диалога.
- Автоматически передавать данные в Битрикс для дальнейшей обработки менеджерами.
Какой стек для разработки бота выбрать?
Бот МАКС можно разработать на основе JavaScript в окружении Node.js или Golang, так как для них уже есть готовые библиотеки и методы API, которые упрощают разработку, а так же systemd-unit сервис для сервера. Мы для решения данного кейса выбрали разработку на Golang, так как он независим от окружения. Сайт клиента расположен на CentOS 7, куда достаточно трудно установить актуальный Node.js, поэтому выбор Golang был максимально правильным.
Соответственно что у нас есть для разработки:
- Сайт на 1С-Битрикс: Управление сайтом
- Сервер на CentOS 7, доступ к systemd, root пользователь
- Бот мессенджера МАКС, который работает в режиме Long Polling по выданному токену через Developer Console.
- Нельзя жестко зашивать токены в код (используем переменные окружения).
- Все пользовательские данные должны уходить в Bitrix‑событие (почтовое событие \CEvent::Send) для стандартной обработки и логирования.
- Бот должен работать 24/7 без ручного перезапуска (systemd‑unit).
Реализованный сценарий бота
Логика диалога реализована на Go с использованием официального клиента MAX Bot API для Golang.
Сценарий:
- Пользователь открывает диалог с ботом в MAX Messenger.
- Бот отправляет приветственное сообщение с inline‑клавиатурой и кнопкой «Связь с оператором».
- При нажатии кнопки бот включает сценарий «оператор» и просит ввести номер телефона.
- Номер телефона проходит валидацию (регулярное выражение, фильтрация символов).
- После валидного номера бот запрашивает e‑mail, затем ФИО.
- После завершения ввода бот отправляет данные на PHP‑скрипт Bitrix и сообщает пользователю, что оператор свяжется с ним.
- В конце диалога бот снова показывает клавиатуру с предложением «Чем еще помочь?», чтобы пользователь мог повторно обратиться.

Пример диалога с ботом МАКС компании ВНИИМК
Техническая реализация Go‑бота
Бэкенд бота написан на Go с использованием библиотеки max-bot-api-client-go, рекомендованной в документации MAX.
Ключевые моменты реализации:
- Загрузка BOT_TOKEN из переменной окружения, что соответствует рекомендациям по безопасности токена.
- Инициализация клиента:
maxbot.New(token)и вызовapi.Bots.GetBot(ctx)для проверки доступности и корректности токена. - Чтение апдейтов:
for upd := range api.GetUpdates(ctx)с обработкой разных типов событий (MessageCreatedUpdate,MessageCallbackUpdate).
Логика хранения состояния:
- Структура UserState (step, phone, email, fio) и карта
map[int64]UserStateпо chatId. - Шаги сценария:
phone → email → fio → завершение. - При
Step == ""или отсутствии состояния — выдача приветственного меню или запуск сценария при фразе «Связь с оператором».
Валидация данных:
- Телефон: очистка от пробелов/скобок/тире, проверка регуляркой
^\+?[0-9]{10,15}$. - Email: базовая регулярка
^[a-zA-Z0-9._%+-]+@....
При ошибках — повторный запрос поля с подсказкой по формату.

Структура бота МАКС
Интеграция с Bitrix (PHP‑скрипт)
На стороне Bitrix реализован HTTP‑эндпоинт endpoint-max.php, который принимает данные из Go‑бота через POST.
Основные элементы:
- Подключение ядра Bitrix (
prolog_before.php) и получение контекста черезApplication::getInstance()->getContext(). - Чтение POST‑параметров и формирование массива
$fields. - Вызов
\CEvent::Send()— стандартный механизм почтовых событий Bitrix для отправки уведомлений и/или создания сущностей (лидов, заявок) через обработчики. - Логирование в отдельный инфоблок для хранения заявок.
Результат:
Ответ возвращается в JSON‑формате (CUtil::PhpToJSObject($result)), что позволяет Go‑боту логировать статус обработки, а Bitrix — централизованно обрабатывать заявки из мессенджера.
Инфраструктура и запуск (CentOS + systemd)
Чтобы обеспечить стабильную работу, бот завернут в systemd‑unit, который запускается под пользователем bitrix.

systemd-unit файл бота МАКС
Особенности unit‑файла:
WorkingDirectory=/home/bitrix/www/...— каталог с бинарем Go‑бота.ExecStart=/home/bitrix/www/.../mybot— скомпилированный бинарник.Environment=BOT_TOKEN=...— установка токена как переменной окружения (не вшивается в код).-
Restart=on-failureиRestartSec=5— автоматический перезапуск при сбоях, важный для 24/7 работы.
Это решение соответствует типовой практике деплоя микросервисов и ботов на CentOS через systemd и упрощает сопровождение (journalctl, systemctl status, перезапуск).
Результат для клиента

Виджет на сайте клиента
После внедрения бота компания получает:
- Централизованный канал входящих обращений в МАКС, связанный с сайтом и Bitrix.
- Автоматизацию первичного сбора контактов без участия оператора.
- Возможность масштабировать обращение клиентов без увеличения штата (операторы подключаются только к «теплым» лидам с уже собранными данными).
На примерах аналогичных кейсов чат‑ботов для поддержки и call‑центров видно, что загрузка операторов снижается на 50–70%, а доля обращений, полностью закрываемых ботом, достигает 70%.
