Описание
Используйте этот метод для отправки группы фотографий, видео, документов или аудиофайлов в виде альбома. Документы и аудиофайлы могут быть сгруппированы в альбом только с сообщениями того же типа. При успешном выполнении возвращается массив отправленных объектов Message.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| business_connection_id | String | Необязательный | Уникальный идентификатор бизнес-подключения, от имени которого будет отправлено сообщение |
| chat_id | Integer или String | Да | Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername) |
| message_thread_id | Integer | Необязательный | Уникальный идентификатор целевой ветки сообщений (темы) форума; только для супергрупп-форумов |
| direct_messages_topic_id | Integer | Необязательный | Идентификатор темы прямых сообщений, в которую будут отправлены сообщения; требуется, если сообщения отправляются в чат прямых сообщений |
| media | Массив InputMediaAudio, InputMediaDocument, InputMediaPhoto и InputMediaVideo | Да | JSON-сериализованный массив, описывающий сообщения для отправки, должен содержать 2-10 элементов |
| disable_notification | Boolean | Необязательный | Отправляет сообщения бесшумно. Пользователи получат уведомление без звука. |
| protect_content | Boolean | Необязательный | Защищает содержимое отправленных сообщений от пересылки и сохранения |
| allow_paid_broadcast | Boolean | Необязательный | Передайте True, чтобы разрешить до 1000 сообщений в секунду, игнорируя ограничения рассылки за плату 0.1 Telegram Stars за сообщение. Соответствующие Stars будут списаны с баланса бота |
| message_effect_id | String | Необязательный | Уникальный идентификатор эффекта сообщения, который будет добавлен к сообщению; только для приватных чатов |
| reply_parameters | ReplyParameters | Необязательный | Описание сообщения, на которое нужно ответить |
Примеры
php
<?php
// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/sendMediaGroup";
// Параметры запроса
$data = [
'chat_id' => 123456789, // Замените на реальный chat_id
'media' => json_encode([
[
'type' => 'photo',
'media' => 'https://example.com/photo1.jpg',
'caption' => 'Первое фото',
'parse_mode' => 'HTML'
],
[
'type' => 'photo',
'media' => 'https://example.com/photo2.jpg',
'caption' => 'Второе фото',
'parse_mode' => 'HTML'
],
[
'type' => 'video',
'media' => 'https://example.com/video.mp4',
'caption' => 'Видео в альбоме',
'thumb' => 'https://example.com/thumbnail.jpg',
'width' => 640,
'height' => 480,
'duration' => 60
]
]),
'disable_notification' => false,
'protect_content' => false,
'reply_parameters' => json_encode([
'message_id' => 123, // ID сообщения для ответа
'chat_id' => 123456789
])
];
// Отправка запроса через cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
// Обработка ответа
$result = json_decode($response, true);
if ($result['ok']) {
echo "Альбом успешно отправлен!\n";
foreach ($result['result'] as $message) {
echo "ID сообщения: {$message['message_id']}\n";
}
} else {
echo "Ошибка: {$result['description']}\n";
}
// Альтернативный пример с локальными файлами
$dataWithFiles = [
'chat_id' => 123456789,
'media' => json_encode([
[
'type' => 'photo',
'media' => 'attach://photo1',
'caption' => 'Локальное фото 1'
],
[
'type' => 'photo',
'media' => 'attach://photo2',
'caption' => 'Локальное фото 2'
]
])
];
// Для локальных файлов используем CURLFile
$files = [
'photo1' => new CURLFile('/path/to/photo1.jpg'),
'photo2' => new CURLFile('/path/to/photo2.jpg')
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array_merge($dataWithFiles, $files));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
// Пример с аудиофайлами (только один тип медиа в альбоме)
$audioAlbum = [
'chat_id' => 123456789,
'media' => json_encode([
[
'type' => 'audio',
'media' => 'https://example.com/audio1.mp3',
'caption' => 'Первая аудиодорожка',
'duration' => 180,
'performer' => 'Исполнитель',
'title' => 'Название трека'
],
[
'type' => 'audio',
'media' => 'https://example.com/audio2.mp3',
'caption' => 'Вторая аудиодорожка'
]
])
];
?>
python
import asyncio
from telegram import Bot, InputMediaPhoto, InputMediaVideo, InputMediaDocument, InputMediaAudio
async def send_media_group_example():
bot = Bot(token="YOUR_BOT_TOKEN")
# Пример отправки группы фото
media = [
InputMediaPhoto(media=open('photo1.jpg', 'rb'), caption="Первое фото"),
InputMediaPhoto(media=open('photo2.jpg', 'rb'), caption="Второе фото"),
InputMediaPhoto(media='https://example.com/photo3.jpg') # Можно использовать URL
]
# Пример отправки группы видео
# media = [
# InputMediaVideo(media=open('video1.mp4', 'rb'), caption="Первое видео"),
# InputMediaVideo(media=open('video2.mp4', 'rb'), caption="Второе видео")
# ]
# Пример отправки группы документов
# media = [
# InputMediaDocument(media=open('doc1.pdf', 'rb'), caption="Первый документ"),
# InputMediaDocument(media=open('doc2.pdf', 'rb'), caption="Второй документ")
# ]
# Пример отправки группы аудио
# media = [
# InputMediaAudio(media=open('audio1.mp3', 'rb'), caption="Первое аудио"),
# InputMediaAudio(media=open('audio2.mp3', 'rb'), caption="Второе аудио")
# ]
try:
result = await bot.send_media_group(
chat_id=123456789, # ID чата или @username
media=media,
disable_notification=True, # Без звука
protect_content=True, # Защита от пересылки
# message_thread_id=123, # Для топиков форума
# business_connection_id="business_123", # Для бизнес-аккаунтов
# reply_parameters={"message_id": 123} # Ответ на сообщение
)
print(f"Отправлено {len(result)} сообщений")
except Exception as e:
print(f"Ошибка: {e}")
finally:
# Закрываем файлы если использовали open()
for item in media:
if hasattr(item.media, 'close'):
item.media.close()
# Запуск асинхронной функции
if __name__ == "__main__":
asyncio.run(send_media_group_example())
История изменений
- API 3.5. Добавлен метод sendMediaGroup
- API 5.0. Обновлен метод sendMediaGroup: Добавлена поддержка отправки и получения аудио и документ альбомов
- API 5.6. Обновлен метод sendMediaGroup: Добавлено поле protect_content
- API 6.3. Обновлен метод sendMediaGroup: Добавлен параметр message_thread_id
- API 7.0. Обновлен метод sendMediaGroup: Заменены параметры reply_to_message_id и allow_sending_without_reply на reply_parameters
- API 7.4. Обновлен метод sendMediaGroup: Добавлен параметр message_effect_id
- API 7.11. Обновлен метод sendMediaGroup: Добавлен параметр allow_paid_broadcast
- API 9.2. Обновлен метод sendMediaGroup: Добавлен параметр direct_messages_topic_id
- API 9.3. Обновлен метод sendMediaGroup: Поддержан параметр message_thread_id в личных чатах с темами для отправки сообщения в конкретную тему.
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- InputMediaAudio - Объект для отправки аудиофайла как музыки с поддержкой подписи, миниатюры и метаданных.
- InputMediaDocument - Объект для отправки документа через Telegram Bot API с поддержкой подписей, миниатюр и форматирования.
- InputMediaPhoto - Объект для отправки фотографии через Telegram Bot API с поддержкой подписей, форматирования и спойлеров.
- InputMediaVideo - Объект для отправки видеофайла с дополнительными параметрами, такими как подпись, миниатюра, обложка и настройки отображения.
- ReplyParameters - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.