132 lines
6.2 KiB
Markdown
132 lines
6.2 KiB
Markdown
|
|
# Объекты 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).
|