Метод sendMediaGroup

Метод для отправки группы медиафайлов в виде альбома.

Описание

Используйте этот метод для отправки группы фотографий, видео, документов или аудиофайлов в виде альбома. Документы и аудиофайлы могут быть сгруппированы в альбом только с сообщениями того же типа. При успешном выполнении возвращается массив отправленных объектов 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 - Объект, описывающий параметры для ответа на сообщение, включая идентификатор сообщения, чат, цитирование и дополнительные настройки.
Комментарии