
MAX в России постепенно превращается не просто в «ещё один мессенджер», а в канал, который всё чаще рассматривают как рабочую точку контакта с пользователем: для уведомлений, сервисных сообщений, внутренних ботов и групповых сценариев. И как только компания доходит до реальной интеграции, почти всегда начинается знакомая история: сначала один скрипт на отправку уведомлений, потом второй на обработку входящих сообщений, потом отдельная логика для групп, потом ещё пара «временных» костылей. Через месяц это уже не интеграция, а набор хрупких связок, которые страшно трогать.
Именно эту проблему и решает max.botservice: один сервис, который закрывает сразу несколько задач. Он принимает события из MAX, умеет работать как бот в личных сообщениях и группах, хранит контакты, отдает HTTP API для внешних систем и позволяет использовать MAX как полноценный канал уведомлений без необходимости плодить десяток вспомогательных утилит.
Исходный код:https://github.com/DmitryBoyko/max-bot/tree/main
Что это такое
Если коротко, max.botservice — это HTTP-сервис на Go, который стоит между API MAX и вашими внутренними системами.
С одной стороны, он принимает события от MAX: сообщения пользователей, действия в чатах, обновления по группам. С другой — отдает наружу собственные HTTP-эндпоинты, через которые ваши backend-сервисы, CRM, ERP, мониторинг или внутренние панели могут отправлять сообщения пользователям и в групповые чаты.
То есть это не просто «бот», который отвечает на команды. Это скорее инфраструктурный слой для интеграции с MAX: один процесс, один конфиг, одна точка входа.
Как это выглядит для пользователя
В личке бот работает как понятный сервисный интерфейс. Пользователь пишет ему и получает меню с кнопками: можно посмотреть ID чата, открыть список групп, настроить уведомления, привязать телефон или отвязать его.
Это важно в прикладных сценариях: если вы хотите слать уведомления не просто в абстрактный чат, а конкретному человеку из корпоративной или клиентской системы, привязка номера телефона дает нормальный мост между вашим учетом пользователей и аккаунтом в MAX.
В группах логика аккуратнее. Бот не шумит там, где он просто присутствует «для галочки». Он показывает меню и кнопку «ID этого чата» только в том случае, если у него есть права администратора. Такой подход особенно полезен для рабочих чатов, где лишние сервисные сообщения быстро начинают раздражать.
Как сервис получает события из MAX
Здесь поддерживаются оба базовых сценария, и это удобно, потому что у команд на разных стадиях внедрения обычно разные условия.
Первый вариант — webhook. MAX сам отправляет события на ваш внешний URL, например на POST /webhook. Это хороший продакшн-режим: события приходят сразу, без постоянного опроса. Но для него нужен доступный снаружи HTTPS-адрес, а значит, придется подумать о публикации сервиса и базовой защите входящей точки.
Второй вариант — long polling. Если WEBHOOK_URL в конфиге не задан, сервис сам ходит в MAX за обновлениями через GET /updates. Такой режим особенно хорош на старте проекта, в тестовой среде или там, где пока не хочется поднимать внешний HTTPS-контур. При этом сервис сам снимает старые webhook-подписки, чтобы не получить дубли событий.
Практически это означает простую вещь: один и тот же код можно использовать и для локальной разработки, и для полноценного продакшна. Меняется только конфигурация.
Где хранятся данные
Чтобы не усложнять внедрение, сервис использует SQLite. В базе лежат две основные сущности:
контакты — привязка номера телефона к пользователю MAX;
групповые чаты — идентификаторы, названия и служебные признаки вроде отметки, что приветственное меню уже отправлялось.
Для многих команд это сильный плюс: не нужно ради запуска поднимать отдельный PostgreSQL или тащить еще один инфраструктурный компонент. Достаточно каталога ./data, а в Docker — обычного volume.
Отдельно полезно, что список групп сервис обновляет сам: при старте и затем периодически по таймеру. Если бота добавили в новый чат, изменили его роль или выдали админские права, сервис это подхватит без ручного вмешательства. При этом приветствие и кнопка с ID отправляются один раз, без навязчивого повторения.
Что можно делать через внешнее API
Для интеграции с остальными системами сервис отдает обычный HTTP API, без экзотики и сложных SDK.
Основные сценарии такие:
POST /send-message— отправка сообщения в личный чат или по chat ID; при необходимости можно использовать режимprivate: true, чтобы искать получателя по контакту.POST /send-by-phone— отправка сообщения по номеру телефона; сервис находит пользователя в локальной таблице контактов и доставляет текст в MAX.POST /send-to-group-by-chatid— отправка сообщения в конкретную группу по еёchat_id.
Плюс есть служебные методы:
POST /refresh-group-chats— принудительно обновить кеш групп;GET /group-chats— получить список известных групп;GET /metrics— забрать простой JSON со счетчиками запросов, ошибок и срабатываний rate limit;GET /— редирект на страницу бота в MAX.
На практике это позволяет быстро подключить MAX к существующему ландшафту. Например, backend системы заказов может слать пользователю уведомление о статусе заявки, а система мониторинга — писать в рабочую группу о сбоях или инцидентах.
Безопасность без перегруза
У таких сервисов всегда есть риск впасть в две крайности: либо оставить всё «как есть» и получить дыру, либо обвесить интеграцию сложной защитой так, что поддерживать её станет тяжелее, чем сам бот. В max.botservice сделан разумный баланс.
Если задан WEBHOOK_SECRET, то POST /webhook ожидает заголовок X-Webhook-Secret. Если значение не совпадает, сервис возвращает 401. Это простой и рабочий способ отсечь лишние входящие запросы.
Если задан API_KEY, то административные методы вроде /refresh-group-chats и /group-chats принимают запросы только с заголовком X-API-Key. Это позволяет не выносить служебное API в отдельный контур, но и не оставлять его полностью открытым.
Для методов отправки сообщений предусмотрен rate limit: по умолчанию задан лимит запросов в минуту, который можно настроить или отключить. Если лимит превышен, сервис вернет 429. Это защита не только от злоумышленников, но и от обычных внутренних ошибок — например, когда сбойный скрипт начинает слать сообщения по кругу.
Весь этот набор включается переменными окружения, без переписывания приложения.
Развертывание
Запуск предельно прямолинейный. Нужен Go версии 1.251.25 и выше. Дальше:
Клонируете репозиторий.
Копируете
.env.exampleв.env.Заполняете минимум
BOT_TOKEN.Запускаете через
go run ./cmdили собираете Docker-образ.При необходимости поднимаете через
docker-compose.
Порт по умолчанию — 8080, но его можно изменить через PORT.
Логи можно переключить в JSON через LOG_FORMAT=json, а детализацию — через LOG_LEVEL. Внутри используется стандартный slog, так что стек остается легким и предсказуемым, без лишних зависимостей.
Почему это особенно актуально сейчас
На фоне курса на расширение использования MAX в России выигрывают решения, которые можно встроить быстро и без тяжелой инфраструктурной реформы. Бизнесу и внутренним IT-командам редко нужен «идеальный платформенный комбайн» на первом этапе. Обычно нужен понятный, поднимаемый за вечер сервис, который уже завтра сможет:
принимать входящие сообщения от пользователей;
отправлять уведомления из внутренних систем;
работать с групповыми чатами;
давать минимальную управляемость и наблюдаемость;
не требовать отдельной команды на сопровождение.
Именно в таком сценарии max.botservice выглядит особенно уместно. Он не пытается стать всем сразу. Он решает конкретную задачу: превращает MAX из просто мессенджера в рабочий транспорт для сервисных коммуникаций.
Кому это подойдет
В первую очередь — командам, которые уже смотрят в сторону MAX как канала взаимодействия с пользователями или сотрудниками и не хотят строить интеграцию из разрозненных кусков.
Это хороший вариант, если вам нужен:
бот с внятным пользовательским меню;
канал уведомлений из backend-сервисов;
отправка сообщений в личные и групповые чаты;
простое локальное хранение контактов и чатов;
минимальный порог входа для запуска и сопровождения.
Итог здесь довольно практичный: один бинарник, одна база, один конфиг и предсказуемое поведение в работе. А это в интеграционных историях обычно ценится куда выше, чем «гибкость на будущее», которая потом превращается в бесконечный зоопарк скриптов.
Комментарии (49)

NineInchNail
22.03.2026 05:59Старый анекдот про "занять очередь с вечера пятницы, чтобы в субботу освободиться пораньше" многие не знают или уже забыли.

Konstantin-2
22.03.2026 05:59Вы не упомянули в статье важный момент о том, что использовать ботов под Макс могут лишь особая категория людей. Точнее, люди не могут, только юридические организации.

tuxi
22.03.2026 05:59Я вот тоже не понимаю, как это все собираются развивать со старта вводя "белый список" кому это доступно. Какая-то стрельба самим себе в ногу и с радостным выражением на лице.

WLMike
22.03.2026 05:59Да, уж. Телега очень удобна чтобы первый содержательный проект сделать для начинающего программиста, прикрутить минимальный мониторинг к маленькому пет проекту или просто личный ботик для чего-то сделать. Все похерили

vmkazakoff
22.03.2026 05:591) некоторые сервисы "выстреливали" как раз из-за ограничений на вход. Их всплмнившегося - клабхаус. Правда это точно не сценарий маха, так что мимо ))
2) они делают это умышленно - создать бота для геолокация закладок - не получится без привязки к реальному паспорту. Это уже не просто симку купить, ИП открыть это сильно больше проверок. Аналогично со всякими шлюхоботами. В телеге с ними приходилось бороться сложными фильтрами сообщений, тут фильтр сделали на входе.

Krasovsky
22.03.2026 05:59Это не сервис что бы выстреливать. Ему плевать на выстреливаемость потому что это навязанное решение, для которго зачистили поляну и которое финансируется из налогов тех, кому навязывается.
Фактически у людей просто отобрали функциональность чат ботов

DmitriyColeman
22.03.2026 05:59Возможно, это сделано для того, чтобы не начали появляться боты, пересылающие сообщения из чатов в нормальные мессенджеры и обратно

RoasterToaster
22.03.2026 05:59попробовал жене канал настроить- а там комментариев нет "встроенной функции комментариев в каналах МАХ действительно нет, и это не ошибка с вашей стороны. Мессенджер пока не имеет такой нативной возможности, как Telegram" -ого нежданчик
-
через ваше решение комментарии прикрутить не получится?

vmkazakoff
22.03.2026 05:59Это же не "решение". Это прослойка.
Комментарии делаются так:
Есть чат и канал
Бот читает и то и то
Бот постит (форвард) сообщения из канала в чат
Бот считает все реплаи (включая ответы на ответы) в чате
Бот добавляет кнопку под пост в канал и обновляет счётчик на ней
Но вообще есть и готовые решения. Которые прикручиваются в пару кликов. Правда все кривые и работают по сути как отдельный сайт. Буэээ

RoasterToaster
22.03.2026 05:59Получается что все дублируется, вместо 5 каналов будет 10

vmkazakoff
22.03.2026 05:59Так в телеге же то же самое. Комментарии в ней это просто чат. Только в него не обязательно заходить, чтобы оставить коммент, когда вы проваливаетесь в комментарии вы просто видите срез сообщений. В махе в чистом виде без нормального захода в чат не получится.

Dhwtj
22.03.2026 05:59Интернет почините, хотя бы проводной. А то он заблокирован с обоих сторон.
И тогда возможно я посмотрю на Макс без брезгливости

Furriest
22.03.2026 05:59Неожиданный хабрасуицид, это ж надо настолько не думать о последствиях.

RoasterToaster
22.03.2026 05:59Может он думал что тут какое-то не политизированное общество технических специалистов ))

duronus
22.03.2026 05:59Дык политика уже влезла к технарям, поэтому теперь приходиться быть еще и юристом. Вот сделаешь ты иконку для канала "не кошерную" так тебе штраф нарисуют))

Nyase
22.03.2026 05:59MAX в России постепенно превращается не просто в «ещё один мессенджер»
Но есть нюанс.

badkun
22.03.2026 05:59А зачем, да еще и не юрикам нельзя, буд то только им нужны боты.
Жаль не хватает кармы минуснуть(

koleso_O
22.03.2026 05:59Судя по комментам, всем интересно просто еще разок перетереть за Макс, но не обсудить предложенный в этой статье сервис.
Я все-таки накину немного накинусь на кодовую базу…
1) Не понял прикола с моками - почему не использовать уже готовые от uber, текущие мок-файлы идут в финальную сборку (а этого быть не должно), автор же в курсе?
2) какие-то странные метрики - почему нет зависимостей на всеми используемый прометей?

winkyBrain
22.03.2026 05:59автор в ридонли и вряд ли вам ответит в ближайшее время)

mmMike
22.03.2026 05:59автор еще и неприкасаемый (карму слить недоступно).
А судя по статьям станочник широкого профиля. на любые темы.В общем заказуха...

itstranger
22.03.2026 05:59Я пробежался по комитам и есть ощущение, что проект полностью навайбкожен. Ничего против использования в программировании нейронок не имею, но такое ощущение, что автор в целом плохо разбирается в программировании. Отсюда и вск вышеописанные проблемы. Хотя, могу ошибаться.

progrocket3
22.03.2026 05:59Как быстро встроить MAX в свои системы
Достаточно его установить, дальше он сам

bagrintsev
22.03.2026 05:59Целый день возился с этим максом, не могу его заставить из микротика отправлять сообщения Dude. С телеграмм все просто было - обычный Get запрос, id группы, пароль, все в одной строке.
У Макса нужен Post запрос, который микротиком отправляется через пень колоду, куча json параметров и в результате ошибка 404, хотя все пингуется.
В результате так и не настроил. Из техподдержки один бесполезный бот и никаких примеров/мануалов.
Думаю, проще алерты будет настроить на вк или другой более вменяемый мессенджер на белых списках, яндекс там или какой еще поищу.

bagrintsev
22.03.2026 05:59Ну в общем настроил я отправку сообщений в MAX.
Кому надо ловите заветную строку:
/tool fetch url="https://platform-api.max.ru/messages?chat_id=-12345678901234" http-method=post http-header-field="Content-Type:application/json,Authorization:f9**************gm" http-data="{"text": "[Time] - [Device.Name] is [Service.Status]"}" keep-result=no;

bagrintsev
22.03.2026 05:59Примечание: сервер не дает вставить правильную строку. Замените в этой строке знак плюса на левый слеш для экранирования (хабр не дает вставить этот символ):
/tool fetch url="https://platform-api.max.ru/messages+?chat_id=-12345678901234" http-method=post http-header-field="Content-Type:application/json,Authorization:f9**************gm" http-data="{+"text+": +" MikroTik+"}" keep-result=no;Естественно, чат ид и строку авторизации вставьте свою.

itstranger
22.03.2026 05:59В то время, как tg давно создал mini app и полноценную экосистему внутри своего приложения, мах завёз ботов без какой-либо тех. поддержки, доступных не всем, так ещё и работающих криво судя по комментариям.
Имхо, но если уж быть турбопатриотом, то даже вк выглядит намного лучше в этом плане, потому что он имеет свою устоявшуюся годами экосистему с ботами и аналогом mini app, а так же нормальным саппортом и документацией и главное даже в нём создание ботов доступно всем.
Если что, не пиарю вк (потому что его современные владельцы создали макс), просто говорю какое же говно вам пытаются скормить взамен тг и других мессенджеров. Честно, учитывая какое отношение к максу у народа, я бы просто его уже закрыл и не мучил. Но учитывая, что макс принадлежит, вроде как сынку Кириенко и что на нём наверное пилят огромные бабки, никто ничего сворачивать не собирается.

qwe101
Как бы ни относиться к МАХ, нам с этим жить.(Сам ставить это на рабочий телефон не собираюсь).
KSA_GT
Вот сами и живите с MAX :) А остальные будут искать любые способы этого не делать.
shornikov
Ну давайте, убедите всех бухгалтеров/etc коммуникация с которыми вам необходима - бороться с махом вместе с вами...
Я с автором согласен. Он есть, и идет первым номером по умолчанию, как почта РФ или Автоваз. Вы же идете на почту за пришедшими посылками и садитесь в такси на базе Лады?
Мне макс не нравится, но я не хочу гадать - В удаленном городе у коллег все хорошо или они не могут мне в телегу достучаться, потому что она у них не работает.
Sigarr
Бухгалтеров не надо убеждать. Они Электронной почтой пользуются всю дорогу
error911
С ним жить точно, если относиться как ты