- register_max_webhook.py, fetch_schema.py - n8n-code-node-max-normalize.js (max_id, callback из callback.user, contact из vcf_info) - n8n-code-add-menu-buttons.js (меню с callback, request_contact, Главное меню) - docs: max-webhook, max-curl-http-request, max-api (форматы, кнопки, контакт), clpr vs sprf - README, SITUATION, схемы sprf_ и clpr_, .gitignore Co-authored-by: Cursor <cursoragent@cursor.com>
6.2 KiB
Объекты Max Bot API
Update
Событие, приходящее в Long Polling или на Webhook.
| Поле | Тип | Описание |
|---|---|---|
| update_type | string | Тип события, например message_created, message_callback |
| timestamp | int64 | Unix-время события |
| message | Message | Сообщение (для message_created и др.) |
| user_locale | string | Язык пользователя (IETF BCP 47), только в диалогах |
Для событий из группового чата или канала бот должен быть назначен администратором.
Пример:
{
"update_type": "message_created",
"timestamp": 0,
"message": { ... },
"user_locale": "ru"
}
При нажатии кнопки приходит тип message_callback; в объекте есть данные callback (в т.ч. callback_id для POST /answers).
NewMessageBody
Тело сообщения при отправке (POST /messages) или обновлении (POST /answers и т.п.).
| Поле | Тип | Описание |
|---|---|---|
| text | string | Текст до 4000 символов |
| attachments | AttachmentRequest[] | Вложения (inline_keyboard и др.) |
| link | NewMessageLink | Ссылка на сообщение |
| notify | bool | Уведомлять участников (по умолчанию true) |
| format | "markdown" | "html" | Формат текста |
Пример:
{
"text": "Текст сообщения",
"attachments": [{ "type": "inline_keyboard", "payload": { "buttons": [...] } }],
"notify": true,
"format": "markdown"
}
Message
Объект сообщения (приходит в Update и в ответах API). Полное описание: dev.max.ru/docs-api/objects/Message.
| Поле | Тип | Описание |
|---|---|---|
| sender | User | Отправитель (опц.) |
| recipient | Recipient | Получатель |
| timestamp | int64 | Unix-время |
| link | LinkedMessage | Пересланное/ответное сообщение (опц.) |
| body | MessageBody | Содержимое: текст + вложения. Может быть null, если только пересланное |
| stat | MessageStat | Статистика (опц.) |
| url | string | Публичная ссылка на пост в канале (опц.) |
MessageBody (входящее сообщение)
Содержимое сообщения при получении по Webhook или GET /updates. Источник: Message, POST /uploads.
| Поле | Тип | Описание |
|---|---|---|
| text | string | Текст сообщения или подпись к медиа. До 4000 символов. Может отсутствовать (только вложение). |
| attachments | array | Вложения. Каждый элемент: { "type": "<тип>", "payload": { ... } }. |
Типы вложений (attachments[].type)
По документации загрузки файлов (POST /uploads) поддерживаются типы: image, video, audio, file. Значение photo больше не используется — приходит как image.
| Тип | Описание | Форматы (при загрузке) |
|---|---|---|
| image | Фото/картинка | JPG, JPEG, PNG, GIF, TIFF, BMP, HEIC |
| video | Видео | MP4, MOV, MKV, WEBM, MATROSKA |
| audio | Голос/аудио | MP3, WAV, M4A и др. |
| file | Документ или любой файл | Любые типы |
У видео и аудио в payload приходит token (используется в т.ч. для GET /videos/{videoToken}). У image/file — в payload приходят данные файла (токен или URL после обработки сервером).
Как приходят сообщения в Webhook
- Только текст:
message.body.text— строка,message.body.attachments— пустой или отсутствует. - Только голос/аудио:
message.body.attachments— один элементtype: "audio",payloadс токеном;message.body.textможет быть пустым. - Только видео:
message.body.attachments— один элементtype: "video",payloadс токеном;message.body.text— по желанию. - Документ/файл:
message.body.attachments— элементtype: "file", вpayload— данные файла;message.body.text— опционально. - Фото (image):
message.body.attachments— элементtype: "image"(неphoto), вpayload— данные изображения. - Фото с подписью: то же, что фото, плюс
message.body.text— подпись (caption).
Пример (фото с подписью):
{
"update_type": "message_created",
"message": {
"sender": { ... },
"recipient": { ... },
"timestamp": 1234567890,
"body": {
"text": "Вот документ по делу",
"attachments": [
{ "type": "image", "payload": { "token": "..." } }
]
}
}
}
Точную структуру payload для каждого типа смотри в ответах API (например, отправить боту сообщение и посмотреть тело Webhook в n8n) или в официальной документации.
User, Chat
Полный список методов и объектов — в официальной документации.