Конструктор базового адаптера платформы.
OptionalplatformToken: stringТокен платформы (опционально)
OptionaladditionalPlatformOptions: IAdapterOptionsДополнительные опции платформы (опционально)
Protected_initTTSProtectedИнициализирует TTS (Text-to-Speech) в контроллере. Обрабатывает звуки и стандартные звуковые эффекты
Контроллер приложения
Protected_timeLimitLogПри превышении допустимого времени обработки запроса логирует информацию.
Вызывается вручную в конце getContent() голосовых адаптеров (Alisa, Marusia, SmartApp);
адаптеры чат-платформ его не вызывают.
>= WARNING_TIME_REQUEST (по умолчанию 2000 мс) — warning в лог.>= MAX_TIME_REQUEST (по умолчанию 2900 мс) — текст ошибки пишется
в controller.platformOptions.error (не в лог).Пороги вынесены в protected поля — при необходимости переопределите в потомке.
API-фасад MAX для controller.api (медиа через POST /uploads,
ответ на callback). Подключается ядром через контракт IPlatformAdapter.
Контроллер текущего запроса
Метод, который вызывается при уничтожении плагина. В данном методе можно добавить отписку, либо выполнить другие действия.
Основной класс приложения
Формирует и отправляет ответ MAX: текст, клавиатуру, карточки и звуки
(с учётом лимитов MAX на частоту сообщений в диалоге). Нажатие callback-кнопки
подтверждается POST /answers, а ответ уходит новым сообщением; с опцией
max_callback_edit_message: true ответ заменяет сообщение с кнопкой.
Контроллер приложения
Тело ответа для webhook ('ok')
ID доставки для дедупликации повторов вебхука. Отдельного ID у обновления MAX нет,
поэтому ключ собирается из типа, времени и объекта события: одно сообщение (mid)
приходит и как message_created, и как message_edited.
Входящее обновление
Ключ доставки или null, если в обновлении нет времени
Получает данные из локального хранилища платформы.
контроллер приложения
данные, сохранённые ранее
Получает время выполнения запроса в миллисекундах
Время выполнения запроса
Формирует пример webhook-запроса MAX (update_type='message_created') для локального тестирования (BotTest).
Текст команды пользователя
Идентификатор пользователя (sender.user_id)
Номер сообщения (seq)
Заготовка запроса в формате webhook MAX
Формирует ответ на запрос оценки (по умолчанию — обычный ответ getContent; спец-формат — например, SmartApp).
контроллер приложения
Сколько платформа ждёт ответа на запрос, мс. По умолчанию null — срока нет
(мессенджеры). Голосовые адаптеры возвращают MAX_TIME_REQUEST: по нему ядро
ограничивает ожидание в очереди запросов пользователя.
Срок ответа в мс или null, если срока нет
Long polling: запрашивает новые обновления методом GET /updates.
MAX держит запрос до 30 секунд, если обновлений нет; marker из ответа
передаётся в следующий запрос. MAX рекомендует long polling для разработки
и тестов, а в продакшене — вебхук (POST /subscriptions).
Сигнал остановки polling
Обновления, null — polling невозможен (нет токена или токен неверный)
Инициализирует адаптер: вызывает базовую инициализацию, переносит токен
и webhook-secret (опция secret либо конфигурация) в настройки платформы.
Контекст приложения (конфиги, токены, логгер)
Проверяет webhook-secret MAX. MAX передаёт исходное значение секрета в заголовке, а не HMAC от тела.
Тело запроса (не используется: секрет приходит заголовком)
Optionalheaders: Record<string, unknown>HTTP-заголовки запроса
true, если секрет совпадает (или проверка не настроена), иначе false
Указывает, поддерживает ли платформа локальное хранилище.
контроллер приложения
true, если локальное хранилище доступно
Проверяет, что входящий webhook-запрос принадлежит MAX.
Опознаёт запрос по известным значениям update_type либо по связке
update_type + timestamp.
Входящий webhook-запрос
Optionalheaders: Record<string, unknown>Заголовки HTTP-запроса (не используются при опознании)
true, если запрос относится к платформе MAX
MAX проверяет именно webhookSecret (options.secret / tokens.max_app.webhookSecret),
а не токен API из конструктора.
Умеет ли платформа подписывать вебхук. По умолчанию — да, если задан
signatureName (подпись в заголовке) или переопределён isSignatureCheckEnabled
(подпись в теле, как у VK). Ядро по этому признаку решает, предупреждать ли
при старте о вебхуке без проверки подписи.
true, если у платформы есть механизм подписи вебхука
Отправка текста пользователю
Этот метод используется для активных рассылок — когда голосовой навык или чат-бот инициирует диалог первым (например, уведомление).
В методе реализована механика преобразования текстового значения controllerOrText в контроллер, а также базовый механизм для отправки ответа.
Переопределять данный метод не рекомендуется. Переопределить стоит только в том случае, если по каким-то технических условиям текущая реализация метода вам не подходит.
Если платформа не поддерживает возможность начать диалог самостоятельно, то можно оставить метод пустым, либо вывести любую заглушку.
Ид пользователя, которому нужно отправить сообщение
Контроллер приложения или текст. Если необходимо отправить просто текст, можно передать строку, в случае, если необходимо передать картинку звук и тд, то необходимо корректно заполнить контроллер.
Результат getContent() — ответ в формате платформы (TContent), либо boolean для платформ без рассылки
Сохраняет данные в локальное хранилище платформы.
данные для сохранения
контроллер приложения
Разбирает update MAX (сообщение, callback-кнопка, служебное событие) и наполняет контроллер данными; служебные события помечаются skipAutoReply.
Входящий webhook-запрос (update)
Контроллер приложения
true, если запрос успешно разобран
Дополнительная обработка для звуков. В данном методе стоит реализовать логику, с помощью которой будут наложены дополнительные эффекты для озвучивания текста пользователю
Контроллер бота
Публичная точка входа для сброса времени начала обработки запроса. Вызывайте перед началом бизнес-логики, чтобы метрики (см. getProcessingTime) считались отсюда.
StaticisVoiceМетод-флаг: указывает, что платформа голосовая (например, Алиса, Маруся).
Protected Optional_platformOptionsОпции из второго аргумента конструктора (new TelegramAdapter(token, { telegram_parse_mode })).
Protected Optional_tokenТокен из конструктора адаптера (new MyAdapter(token)). Во время работы берите токен из
appContext.appConfig.tokens: туда он попадает при bot.use() и может быть перезаписан из .env.
OptionalappContextКонтекст приложения
MAX — чат-платформа (не голосовая).
Лимит запросов/сек для входящего rateLimiter (лимит MAX Bot API).
ProtectedMAX_TIME_REQUESTМаксимальное время обработки запроса в миллисекундах: при его превышении в лог записывается ошибка (ответ платформе при этом не модифицируется)
Идентификатор платформы MAX.
OptionalsignatureNameИмя поля в заголовке запроса, по которому можно проверить корректность полученного запроса от платформы.
Универсальные события MAX (для валидации addEvent).
ProtectedWARNING_TIME_REQUESTПорог предупреждения в миллисекундах: при его превышении в лог записывается warning
Адаптер, обеспечивающий поддержку платформы MAX. Позволяет разрабатывать чат-ботов для мессенджера MAX на TypeScript с использованием кросс-платформенного функционала: обработка текстовых запросов, работа с карточками и кнопками.
Подключение адаптера не требует изменения существующей бизнес-логики: после интеграции все команды и обработчики, написанные для umbot, автоматически становятся доступны для MAX. Единый интерфейс позволяет одновременно использовать одну бизнес-логику для нескольких платформ (MAX, VK, Алиса и др.) без дублирования кода.
Этот адаптер автоматически обрабатывает входящие вебхуки от мессенджера MAX, преобразует их в унифицированный формат фреймворка и формирует ответ, совместимый с требованиями платформы. Подключается одной строкой и не мешает работе других адаптеров (например, для Алисы или Маруси).
Поддерживает:
Подключается как любой другой адаптер:
bot.use(new MaxAdapter(token)). Несколько адаптеров могут работать одновременно — система сама выберет подходящий на основе заголовков и структуры входящего запроса.Example
See