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