Files
MAX/docs/max-api/03-objects.md
root 7cd3ccf21c MAX bot + n8n: webhook, нормализация, меню, доки, схемы БД
- 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>
2026-02-16 09:23:51 +03:00

132 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Объекты 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), только в диалогах |
Для событий из группового чата или канала бот должен быть назначен администратором.
**Пример:**
```json
{
"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" | Формат текста |
**Пример:**
```json
{
"text": "Текст сообщения",
"attachments": [{ "type": "inline_keyboard", "payload": { "buttons": [...] } }],
"notify": true,
"format": "markdown"
}
```
---
## Message
Объект сообщения (приходит в Update и в ответах API). Полное описание: [dev.max.ru/docs-api/objects/Message](https://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](https://dev.max.ru/docs-api/objects/Message), [POST /uploads](https://dev.max.ru/docs-api/methods/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).
Пример (фото с подписью):
```json
{
"update_type": "message_created",
"message": {
"sender": { ... },
"recipient": { ... },
"timestamp": 1234567890,
"body": {
"text": "Вот документ по делу",
"attachments": [
{ "type": "image", "payload": { "token": "..." } }
]
}
}
}
```
Точную структуру `payload` для каждого типа смотри в ответах API (например, отправить боту сообщение и посмотреть тело Webhook в n8n) или в [официальной документации](https://dev.max.ru/docs-api).
---
## User, Chat
- **User:** [dev.max.ru/docs-api/objects/User](https://dev.max.ru/docs-api/objects/User)
- **Chat:** [dev.max.ru/docs-api/objects/Chat](https://dev.max.ru/docs-api/objects/Chat)
Полный список методов и объектов — в [официальной документации](https://dev.max.ru/docs-api).