Перейти к содержанию

MAX из Runtime SDK

Отправляйте сообщения и управляйте ботом MAX из backend-кода через сохранённое подключение.

Сохраните подключение бота MAX в нужном окружении проекта. Это же подключение можно использовать в автоматизациях и backend-коде. Пользовательские события обрабатываются автоматизацией; SDK выполняет операции по запросу вашего backend.

При публикации сервиса разработчик явно указывает необходимые права в runtimeMaxCapabilities: messaging.max.read, messaging.max.send, messaging.max.moderate, messaging.max.files или messaging.max.commands. Выдавайте только нужные права. По умолчанию опубликованный сервис не получает доступ к MAX; после изменения прав опубликуйте новую версию.

const max = agnostic.messaging.max('support-bot');
await max.messages.send(
  {
    recipient: { userId: '9007199254740993' },
    text: 'Заказ принят',
  },
  { idempotencyKey: 'order-42-confirmed' },
);

Используйте строковые идентификаторы MAX, даже если они состоят только из цифр. Для повторного запроса одной бизнес-операции передавайте тот же idempotencyKey. Если результат доставки неизвестен, сначала проверьте историю операции: отправка с новым ключом может создать второе сообщение.

В TypeScript доступны messages, callbacks, media, chats, members, comments и bot. Для остальных разрешённых вызовов используйте типизированный execute. Создание подключений и подписок выполняется средствами платформы. Для медиа сначала загрузите файл в проект и передайте его идентификатор в media.upload; произвольная ссылка на внешний файл не заменяет загрузку.

SDK 2.0 нужен для этого сценария. В данных App Auth поле email может быть null для пользователя MAX, поэтому проверяйте его перед отправкой письма. Вход по email и паролю по-прежнему требует email.

Runtime SDK выполняется на сервере. Для мини-приложения используйте браузерный @nsp-labs/agnostic-app-kit/max и отправляйте пользовательские запросы своему backend. Токены бота и Runtime SDK не должны попадать в браузер.

В Python используйте agnostic.messaging.max('support-bot') и MaxRequestOptions для ключа повторного запроса. В Go — client.Messaging.Max("support-bot") и MaxRequestOptions. Названия методов следуют правилам языка; поля запроса и права операций совпадают. Списки возвращают отдельную страницу: сохраняйте указатель следующей страницы или границы выборки и запрашивайте продолжение явно.

Для комментариев before и after — числовое время Unix в миллисекундах; commentIds — строковые ID комментариев. У списка сообщений доступны before/after и прежние from/to: используйте одну пару в запросе. В обновлении чата можно передать pin, а в редактировании комментария — ссылку link с типом reply. Чтобы отправить одну пересылку сообщения, достаточно получателя и link с типом forward. Параметр disableLinkPreview доступен при отправке сообщения и ответе на кнопку; редактирование сообщения его не поддерживает.

При отказе в доступе проверьте выбранное окружение, активность подключения и выданные права сервиса. При ошибке MAX проверьте права бота в конкретном чате. Ограничение частоты и отказ пользователя поделиться контактом — обычные состояния, которые приложение должно понятно показать.

Восстановить исходное событие и действие

В новых исходниках SDK подготовлены getConnection, getEvent, resolveUser и recoverAction. Они читают подтверждённое подключение, уже принятое событие, существующего пользователя приложения и квитанцию прежнего действия. Права и окружение проверяются заново; имя или телефон из сообщения не создаёт доступ. После неизвестной отправки читайте прежнюю квитанцию, а не отправляйте с новым ключом. Старый отказ без сохранённого разрешения на повтор не перезапускается. Эти методы ещё ожидают публикации SDK и проверки настоящего бота.

Диалог и входящие файлы

В исходниках бота подготовлен общий диалог для MAX: вопросы, кнопки, исправление ответа, проверка анкеты и явная отправка. Агент выбирает компоненты и пишет итоговый сценарий. Ответ связывается с исходным сообщением; успешный запуск автоматизации сам по себе ещё не означает созданную заявку.

Для вложений подготовлены importFile и recoverFileImport: выбирается точное вложение принятого события, а готовый приватный файл подтверждается через Files. Текущие права проверяются отдельно. Если результат неизвестен, прежний ключ и история остаются на сверке. Изменение шага или отмена не удаляет файл автоматически и не переносит его в другую заявку.

Новые исходники ещё ожидают публикации SDK, проверки настоящего бота и скачивания файлов MAX. Неподтверждённый адрес скачивания не используется.