Метод editMessageCaption

Метод для редактирования подписей сообщений в Telegram, включая бизнес-сообщения и inline-сообщения.

Описание

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