Описание
Используйте этот метод для редактирования подписей сообщений. При успешном выполнении, если отредактированное сообщение не является inline-сообщением, возвращается отредактированное Message, в противном случае возвращается True. Обратите внимание, что бизнес-сообщения, которые не были отправлены ботом и не содержат inline-клавиатуру, могут быть отредактированы только в течение 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. Идентификатор inline-сообщения |
| caption | String | Опционально | Новая подпись сообщения, 0-1024 символа после обработки сущностей |
| parse_mode | String | Опционально | Режим обработки сущностей в подписи сообщения. Подробнее см. параметры форматирования. |
| caption_entities | Массив MessageEntity | Опционально | Список специальных сущностей в подписи в формате JSON, который можно указать вместо parse_mode |
| show_caption_above_media | Boolean | Опционально | Передайте True, если подпись должна отображаться над медиафайлом сообщения. Поддерживается только для анимаций, фото и видео. |
| reply_markup | InlineKeyboardMarkup | Опционально | Объект inline-клавиатуры в формате JSON. |
Примеры
php
<?php
// Токен вашего бота
$botToken = 'YOUR_BOT_TOKEN';
// Пример 1: Редактирование подписи сообщения в чате/канале
function editMessageCaptionInChat($chatId, $messageId, $newCaption) {
global $botToken;
$url = "https://api.telegram.org/bot{$botToken}/editMessageCaption";
$data = [
'chat_id' => $chatId,
'message_id' => $messageId,
'caption' => $newCaption,
'parse_mode' => 'HTML', // или 'MarkdownV2', 'Markdown'
'show_caption_above_media' => true,
];
$ch = curl_init($url);
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: Редактирование подписи inline-сообщения
function editInlineMessageCaption($inlineMessageId, $newCaption) {
global $botToken;
$url = "https://api.telegram.org/bot{$botToken}/editMessageCaption";
$data = [
'inline_message_id' => $inlineMessageId,
'caption' => $newCaption,
'parse_mode' => 'MarkdownV2',
];
$ch = curl_init($url);
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: Редактирование с caption_entities вместо parse_mode
function editCaptionWithEntities($chatId, $messageId) {
global $botToken;
$url = "https://api.telegram.org/bot{$botToken}/editMessageCaption";
$data = [
'chat_id' => $chatId,
'message_id' => $messageId,
'caption' => 'Hello *world* and [Google](https://google.com)',
'caption_entities' => json_encode([
[
'type' => 'bold',
'offset' => 6,
'length' => 5
],
[
'type' => 'text_link',
'offset' => 16,
'length' => 6,
'url' => 'https://google.com'
]
])
];
$ch = curl_init($url);
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 editCaptionWithKeyboard($chatId, $messageId, $newCaption) {
global $botToken;
$url = "https://api.telegram.org/bot{$botToken}/editMessageCaption";
$keyboard = [
'inline_keyboard' => [
[
['text' => 'Новая кнопка 1', 'callback_data' => 'btn1'],
['text' => 'Новая кнопка 2', 'callback_data' => 'btn2']
]
]
];
$data = [
'chat_id' => $chatId,
'message_id' => $messageId,
'caption' => $newCaption,
'reply_markup' => json_encode($keyboard)
];
$ch = curl_init($url);
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: Редактирование бизнес-сообщения
function editBusinessMessageCaption($businessConnectionId, $chatId, $messageId, $newCaption) {
global $botToken;
$url = "https://api.telegram.org/bot{$botToken}/editMessageCaption";
$data = [
'business_connection_id' => $businessConnectionId,
'chat_id' => $chatId,
'message_id' => $messageId,
'caption' => $newCaption,
];
$ch = curl_init($url);
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 = editMessageCaptionInChat(123456789, 42, 'Новая подпись с <b>HTML</b> разметкой');
// if ($result['ok']) {
// echo 'Подпись успешно изменена!';
// } else {
// echo 'Ошибка: ' . $result['description'];
// }
?>
python
import requests
def edit_message_caption(
token: str,
chat_id: int = None,
message_id: int = None,
inline_message_id: str = None,
caption: str = None,
parse_mode: str = None,
caption_entities: list = None,
show_caption_above_media: bool = None,
reply_markup: dict = None,
business_connection_id: str = None
):
"""
Редактирует подпись сообщения.
Args:
token: Токен бота
chat_id: ID чата (обязателен, если не указан inline_message_id)
message_id: ID сообщения (обязателен, если не указан inline_message_id)
inline_message_id: ID inline-сообщения (обязателен, если не указаны chat_id и message_id)
caption: Новая подпись (0-1024 символа)
parse_mode: Режим парсинга ('HTML' или 'Markdown')
caption_entities: Список сущностей сообщения
show_caption_above_media: Показывать подпись над медиа
reply_markup: Inline-клавиатура
business_connection_id: ID бизнес-подключения
Returns:
dict: Ответ от Telegram API
"""
url = f"https://api.telegram.org/bot{token}/editMessageCaption"
payload = {}
# Обязательные параметры
if inline_message_id:
payload['inline_message_id'] = inline_message_id
else:
if chat_id is None or message_id is None:
raise ValueError("Необходимо указать либо inline_message_id, либо chat_id и message_id")
payload['chat_id'] = chat_id
payload['message_id'] = message_id
# Опциональные параметры
if caption is not None:
payload['caption'] = caption
if parse_mode is not None:
payload['parse_mode'] = parse_mode
if caption_entities is not None:
payload['caption_entities'] = caption_entities
if show_caption_above_media is not None:
payload['show_caption_above_media'] = show_caption_above_media
if reply_markup is not None:
payload['reply_markup'] = reply_markup
if business_connection_id is not None:
payload['business_connection_id'] = business_connection_id
response = requests.post(url, json=payload)
return response.json()
# Пример использования 1: Редактирование подписи обычного сообщения
token = "YOUR_BOT_TOKEN"
chat_id = 123456789
message_id = 42
result = edit_message_caption(
token=token,
chat_id=chat_id,
message_id=message_id,
caption="Новая подпись для сообщения!",
parse_mode="HTML"
)
# Пример использования 2: Редактирование inline-сообщения
result = edit_message_caption(
token=token,
inline_message_id="1234567890abcdef",
caption="Обновленная подпись для inline-сообщения",
parse_mode="Markdown"
)
# Пример использования 3: Сложный пример с клавиатурой и сущностями
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
keyboard = InlineKeyboardMarkup([
[InlineKeyboardButton("Кнопка 1", callback_data="btn1")],
[InlineKeyboardButton("Кнопка 2", callback_data="btn2")]
])
caption_entities = [
{
"type": "bold",
"offset": 0,
"length": 10
}
]
result = edit_message_caption(
token=token,
chat_id=chat_id,
message_id=message_id,
caption="<b>Жирный текст</b> и обычный текст",
parse_mode="HTML",
show_caption_above_media=True,
reply_markup=keyboard.to_dict()
)
# Пример использования 4: С бизнес-подключением
result = edit_message_caption(
token=token,
chat_id=chat_id,
message_id=message_id,
caption="Подпись для бизнес-сообщения",
business_connection_id="business_connection_123"
)
История изменений
- API 2.0. Добавлен метод editMessageCaption
- API 5.0. Обновлен метод editMessageCaption: Добавлена возможность ручного указания текстовых сущностей
- API 7.4. Обновлен метод editMessageCaption: Добавлен параметр show_caption_above_media
- API 7.5. Обновлен метод editMessageCaption: Добавлен параметр business_connection_id
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- MessageEntity - Объект MessageEntity представляет специальную форматированную сущность в тексте сообщения, такую как упоминания, хэштеги, ссылки или стилизованный текст.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.