«Чат бот в максе как создать» — так формулирует вопрос сама подсказка Яндекса. Ответ короче, чем кажется: бот в MAX не выдаётся через отдельный кабинет разработчика с формами и подтверждениями — весь процесс идёт внутри самого мессенджера.
Токен вместо кабинета разработчика
Пишете системному боту @MasterBot, называете своего — получаете токен строкой в ответ. Ни формы регистрации, ни отдельного портала для разработчиков, ни подтверждения по почте.
Токен проверяется одним запросом к API MAX: он возвращает имя бота и код 200, если всё верно. Публиковать бота может только верифицированное юридическое лицо России — эту процедуру мы прошли на боте нашей школы бега RunStart.
Официальное API MAX документировано на dev.max.ru, лимит: 30 запросов в секунду. Для клиники или магазина этого хватает с большим запасом: столько сообщений подряд не пишет ни один живой чат.
Один бот — одна система
10 июля мы уже держали бота с активной вебхук-подпиской на другой сервис в парке — и подключить его вторым каналом к единому окну не получилось: сообщения просто не доходили. Тишина, и никакой ошибки в логах. У MAX подписка на вебхук и режим long-poll работают по очереди, а не одновременно: включишь одно, выключится другое, в отличие от ВКонтакте, где Callback API и long-poll друг от друга не зависят.
Мы сняли вебхук-подписку у занятого бота, дождались, пока коннектор на long-poll подхватит сообщения — и только тогда второй сервис снова заработал. Свободного запасного бота под задачу не оказалось, пришлось на время пожертвовать автоответом в другом канале, пока разбирались, откуда тишина.
Один бот. Одна система.
Почему бот на зарубежном сервере молчит
У одного из наших ботов запросы к MAX однажды стали возвращать 401 Invalid access_token, хотя токен не менялся ни разу. Причина была не в токене: MAX режет запросы с зарубежных адресов, а показывает при этом ту же ошибку, что при неверном ключе.
Звучит как баг на стороне бота, но на деле это сетевой фильтр — со стороны разработчика выглядит так, будто сервис отвечает, а на деле не пускает. Из-за этого боты MAX у нас работают с российского хостинга, а не с той инфраструктуры, что обслуживает Telegram: у телеграм-бота выход в интернет через зарубежный узел, у MAX-бота — сервер внутри страны. Правило простое: сначала проверить токен с российского сервера, и только потом делать выводы о поломке.
Один мозг на MAX, ВКонтакте и сайте
У одного из клиентов в единое окно ConOmni сходятся четыре канала сразу — группа ВКонтакте, бот в MAX, виджет на сайте и личный MAX для тех, кто пишет напрямую. Шесть диалогов одновременно. Одна лента. Один оператор. Технически бот отвечает в MAX через отдельный коннектор, а с ВКонтакте и сайтом говорит тем же кодом ядра: логика одна, различаются только адаптеры под протокол канала.
Событие прочтения в MAX показывает настоящее время, когда клиент увидел сообщение; у ВКонтакте похожий сигнал от сообщества не означает то же самое, это выяснилось только на живом логе. Менеджеру эта разница не видна — он открывает диалог и не обязан помнить, что MAX и ВКонтакте разговаривают с ботом по-разному.
Если бот не справляется, диалог переходит оператору: статус меняется с pending на open, и дальше отвечает уже человек. Не ответил за несколько минут: колокольчик в кабинете, пуш, письмо на почту или сообщение от собственного бота платформы в MAX либо Telegram, а если тишина продолжается, эскалация старшему; неважно, писал клиент в MAX, ВКонтакте или через виджет на сайте.
Подключение нового канала не требует отдельной разработки: источник MAX добавляется в настройках ConOmni, и туда же вставляется токен, полученный от @MasterBot.
Одно ограничение стоит держать в уме: сообщение в MAX не может быть длиннее 4 000 символов, длинный текст бот режет на несколько сообщений подряд и отправляет их одно за другим, без пауз.