Метод editMessageMedia

Метод для редактирования медиа-содержимого сообщений или добавления медиа к текстовым сообщениям в Telegram.

Описание

Используйте этот метод для редактирования анимации, аудио, документа, фото или видео сообщений, или для добавления медиа к текстовым сообщениям. Если сообщение является частью альбома сообщений, то его можно редактировать только в аудио для аудиоальбомов, только в документ для альбомов документов и в фото или видео в остальных случаях. При редактировании инлайн-сообщения нельзя загружать новый файл; используйте ранее загруженный файл через его file_id или укажите URL. При успешном выполнении, если отредактированное сообщение не является инлайн-сообщением, возвращается отредактированное Message, в противном случае возвращается True. Обратите внимание, что бизнес-сообщения, которые не были отправлены ботом и не содержат инлайн-клавиатуру, можно редактировать только в течение 48 часов с момента отправки.

Параметр Тип Обязательный Описание
business_connection_id String Опционально Уникальный идентификатор бизнес-подключения, от имени которого было отправлено редактируемое сообщение
chat_id Integer или String Опционально Обязателен, если не указан inline_message_id. Уникальный идентификатор целевого чата или имя пользователя целевого канала (в формате @channelusername)
message_id Integer Опционально Обязателен, если не указан inline_message_id. Идентификатор редактируемого сообщения
inline_message_id String Опционально Обязателен, если не указаны chat_id и message_id. Идентификатор инлайн-сообщения
media InputMedia Да JSON-сериализованный объект для нового медиа-содержимого сообщения
reply_markup InlineKeyboardMarkup Опционально JSON-сериализованный объект для новой инлайн-клавиатуры.

Примеры

php

<?php

$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/";

// Пример 1: Редактирование медиа в сообщении в чате
function editMessageMediaInChat($chatId, $messageId, $newPhotoUrl, $caption = null) {
    global $apiUrl;
    
    $media = [
        'type' => 'photo',
        'media' => $newPhotoUrl, // URL или file_id
        'caption' => $caption,
        'parse_mode' => 'HTML'
    ];
    
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'media' => json_encode($media),
        'reply_markup' => json_encode([
            'inline_keyboard' => [
                [
                    ['text' => 'Новая кнопка', 'callback_data' => 'updated']
                ]
            ]
        ])
    ];
    
    $ch = curl_init($apiUrl . 'editMessageMedia');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример 2: Редактирование инлайн-сообщения
function editInlineMessageMedia($inlineMessageId, $newVideoFileId) {
    global $apiUrl;
    
    $media = [
        'type' => 'video',
        'media' => $newVideoFileId, // Только file_id для инлайн-сообщений
        'caption' => 'Обновленное видео',
        'parse_mode' => 'Markdown'
    ];
    
    $data = [
        'inline_message_id' => $inlineMessageId,
        'media' => json_encode($media)
    ];
    
    $ch = curl_init($apiUrl . 'editMessageMedia');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример 3: Редактирование документа с бизнес-соединением
function editBusinessMessageMedia($businessConnectionId, $chatId, $messageId, $newDocumentUrl) {
    global $apiUrl;
    
    $media = [
        'type' => 'document',
        'media' => $newDocumentUrl,
        'caption' => 'Обновленный документ',
        'parse_mode' => 'HTML'
    ];
    
    $data = [
        'business_connection_id' => $businessConnectionId,
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'media' => json_encode($media)
    ];
    
    $ch = curl_init($apiUrl . 'editMessageMedia');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример 4: Редактирование аудио
function editAudioMessage($chatId, $messageId, $audioFileId) {
    global $apiUrl;
    
    $media = [
        'type' => 'audio',
        'media' => $audioFileId,
        'caption' => 'Новое аудио',
        'performer' => 'Исполнитель',
        'title' => 'Название трека',
        'parse_mode' => 'HTML'
    ];
    
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'media' => json_encode($media)
    ];
    
    $ch = curl_init($apiUrl . 'editMessageMedia');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Пример 5: Редактирование анимации (GIF)
function editAnimationMessage($chatId, $messageId, $animationFileId) {
    global $apiUrl;
    
    $media = [
        'type' => 'animation',
        'media' => $animationFileId,
        'caption' => 'Новая анимация',
        'parse_mode' => 'HTML'
    ];
    
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'media' => json_encode($media),
        'reply_markup' => json_encode([
            'inline_keyboard' => [
                [
                    ['text' => 'Смотреть', 'url' => 'https://example.com']
                ]
            ]
        ])
    ];
    
    $ch = curl_init($apiUrl . 'editMessageMedia');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);
    curl_close($ch);
    
    return json_decode($response, true);
}

// Использование:
// $result = editMessageMediaInChat(123456, 789, 'https://example.com/new-photo.jpg', 'Новое фото');
// $result = editInlineMessageMedia('inline_msg_123', 'AgACAgQAAxkBAAMRZg');
// $result = editBusinessMessageMedia('business_123', 123456, 789, 'https://example.com/doc.pdf');
// $result = editAudioMessage(123456, 789, 'CQACAgQAAxkBAAMRZg');
// $result = editAnimationMessage(123456, 789, 'DQACAgQAAxkBAAMRZg');

?>

python

import requests

# Конфигурация бота
BOT_TOKEN = "YOUR_BOT_TOKEN"
API_URL = f"https://api.telegram.org/bot{BOT_TOKEN}/"

def edit_message_media(chat_id=None, message_id=None, inline_message_id=None, media=None, reply_markup=None, business_connection_id=None):
    """
    Редактирует медиа в сообщении
    
    Параметры:
    - chat_id: ID чата (обязателен, если не указан inline_message_id)
    - message_id: ID сообщения (обязателен, если не указан inline_message_id)
    - inline_message_id: ID inline-сообщения (обязателен, если не указаны chat_id и message_id)
    - media: объект InputMedia (обязательный)
    - reply_markup: клавиатура InlineKeyboardMarkup (опционально)
    - business_connection_id: ID бизнес-соединения (опционально)
    """
    
    # Подготовка параметров
    params = {}
    
    if business_connection_id:
        params['business_connection_id'] = business_connection_id
    
    if inline_message_id:
        params['inline_message_id'] = inline_message_id
    else:
        if chat_id:
            params['chat_id'] = chat_id
        if message_id:
            params['message_id'] = message_id
    
    if media:
        # Если media - это словарь, сериализуем в JSON
        if isinstance(media, dict):
            import json
            params['media'] = json.dumps(media)
        else:
            params['media'] = media
    
    if reply_markup:
        # Если reply_markup - это словарь, сериализуем в JSON
        if isinstance(reply_markup, dict):
            import json
            params['reply_markup'] = json.dumps(reply_markup)
        else:
            params['reply_markup'] = reply_markup
    
    # Отправка запроса
    response = requests.post(API_URL + "editMessageMedia", json=params)
    return response.json()

# Пример 1: Редактирование фото в обычном сообщении
def example_edit_photo():
    # Создаем объект InputMediaPhoto
    media = {
        "type": "photo",
        "media": "https://example.com/new_image.jpg",  # или file_id существующего файла
        "caption": "Обновленное фото с описанием",
        "parse_mode": "HTML"
    }
    
    # Создаем inline-клавиатуру
    keyboard = {
        "inline_keyboard": [[
            {"text": "Кнопка 1", "callback_data": "btn1"},
            {"text": "Кнопка 2", "callback_data": "btn2"}
        ]]
    }
    
    result = edit_message_media(
        chat_id=123456789,
        message_id=100,
        media=media,
        reply_markup=keyboard
    )
    print(result)

# Пример 2: Редактирование видео в inline-сообщении
def example_edit_inline_video():
    # Создаем объект InputMediaVideo
    media = {
        "type": "video",
        "media": "AgACAgIAAxkBAAMpZgAB",  # file_id ранее загруженного видео
        "caption": "Обновленное видео",
        "width": 640,
        "height": 480,
        "duration": 60
    }
    
    result = edit_message_media(
        inline_message_id="1234567890abcdef",
        media=media
    )
    print(result)

# Пример 3: Редактирование документа с бизнес-соединением
def example_edit_document_business():
    # Создаем объект InputMediaDocument
    media = {
        "type": "document",
        "media": "BQACAgIAAxkBAAMrZgAB",  # file_id документа
        "caption": "Обновленный документ",
        "parse_mode": "Markdown"
    }
    
    result = edit_message_media(
        chat_id=123456789,
        message_id=101,
        media=media,
        business_connection_id="business_connection_id_123"
    )
    print(result)

# Пример 4: Редактирование аудио
def example_edit_audio():
    # Создаем объект InputMediaAudio
    media = {
        "type": "audio",
        "media": "CQACAgIAAxkBAAMtZgAB",  # file_id аудио
        "caption": "Новое аудио",
        "duration": 180,
        "performer": "Исполнитель",
        "title": "Название трека"
    }
    
    result = edit_message_media(
        chat_id=123456789,
        message_id=102,
        media=media
    )
    print(result)

# Пример 5: Редактирование анимации (GIF)
def example_edit_animation():
    # Создаем объект InputMediaAnimation
    media = {
        "type": "animation",
        "media": "DQACAgIAAxkBAAMvZgAB",  # file_id анимации
        "caption": "Новая анимация",
        "width": 320,
        "height": 240,
        "duration": 5
    }
    
    result = edit_message_media(
        chat_id=123456789,
        message_id=103,
        media=media
    )
    print(result)

# Запуск примера
if __name__ == "__main__":
    # Раскомментируйте нужный пример:
    # example_edit_photo()
    # example_edit_inline_video()
    # example_edit_document_business()
    # example_edit_audio()
    # example_edit_animation()
    pass

История изменений

  • API 4.0. Добавлен метод editMessageMedia
  • API 7.5. Обновлен метод editMessageMedia: Добавлен параметр business_connection_id
  • API 7.11. Обновлен метод editMessageMedia: Добавлена возможность добавлять медиа к существующим текстовым сообщениям

Дополнительно

  • Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
  • InputMedia - Объект, описывающий содержимое медиафайла для отправки в Telegram-боте.
  • InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.
Комментарии