Метод editMessageText

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

Описание

Используйте этот метод для редактирования текстовых сообщений и сообщений с играми. В случае успеха, если отредактированное сообщение не является инлайн-сообщением, возвращается отредактированное 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. Идентификатор инлайн-сообщения
text String Да Новый текст сообщения, 1-4096 символов после обработки сущностей
parse_mode String Опционально Режим обработки сущностей в тексте сообщения. Подробнее см. параметры форматирования.
entities Массив MessageEntity Опционально Список специальных сущностей в тексте сообщения в формате JSON, который может быть указан вместо parse_mode
link_preview_options LinkPreviewOptions Опционально Параметры генерации превью ссылок для сообщения
reply_markup InlineKeyboardMarkup Опционально Объект в формате JSON для инлайн-клавиатуры.

Примеры

php

<?php

// Токен вашего бота
$botToken = 'ВАШ_ТОКЕН_БОТА';

// Пример 1: Редактирование сообщения в чате
function editMessageInChat($chatId, $messageId, $newText) {
    global $botToken;
    
    $url = "https://api.telegram.org/bot{$botToken}/editMessageText";
    
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'text' => $newText,
        'parse_mode' => 'HTML',
        'link_preview_options' => json_encode(['is_disabled' => 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 editInlineMessage($inlineMessageId, $newText) {
    global $botToken;
    
    $url = "https://api.telegram.org/bot{$botToken}/editMessageText";
    
    $data = [
        'inline_message_id' => $inlineMessageId,
        'text' => $newText,
        'parse_mode' => 'MarkdownV2',
        'entities' => json_encode([
            [
                'type' => 'bold',
                'offset' => 0,
                'length' => 10
            ]
        ])
    ];
    
    $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: Редактирование с клавиатурой и бизнес-соединением
function editMessageWithKeyboard($chatId, $messageId, $newText) {
    global $botToken;
    
    $url = "https://api.telegram.org/bot{$botToken}/editMessageText";
    
    $keyboard = [
        'inline_keyboard' => [
            [
                ['text' => 'Кнопка 1', 'callback_data' => 'btn1'],
                ['text' => 'Кнопка 2', 'callback_data' => 'btn2']
            ]
        ]
    ];
    
    $data = [
        'chat_id' => $chatId,
        'message_id' => $messageId,
        'text' => $newText,
        'parse_mode' => 'HTML',
        'reply_markup' => json_encode($keyboard),
        // 'business_connection_id' => 'ВАШ_BUSINESS_CONNECTION_ID' // опционально
    ];
    
    $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 = editMessageInChat(123456, 789, 'Новый текст сообщения');
// $result = editInlineMessage('inline_msg_123', 'Новый текст inline');
// $result = editMessageWithKeyboard(123456, 789, 'Текст с клавиатурой');

?>

python

import requests

def edit_message_text(token, text, chat_id=None, message_id=None, inline_message_id=None, 
                      parse_mode=None, entities=None, link_preview_options=None, 
                      reply_markup=None, business_connection_id=None):
    """
    Редактирует текст сообщения в Telegram.
    
    Args:
        token (str): Токен бота
        text (str): Новый текст сообщения (1-4096 символов)
        chat_id (int/str, optional): ID чата или username канала
        message_id (int, optional): ID сообщения для редактирования
        inline_message_id (str, optional): ID inline-сообщения
        parse_mode (str, optional): Режим парсинга ('HTML' или 'Markdown')
        entities (list, optional): Список объектов MessageEntity
        link_preview_options (dict, optional): Настройки предпросмотра ссылок
        reply_markup (dict, optional): Inline-клавиатура
        business_connection_id (str, optional): ID бизнес-соединения
    
    Returns:
        dict: Ответ от Telegram API
    """
    
    url = f"https://api.telegram.org/bot{token}/editMessageText"
    
    # Основные обязательные параметры
    params = {'text': text}
    
    # Добавляем параметры в зависимости от типа сообщения
    if inline_message_id:
        params['inline_message_id'] = inline_message_id
    elif chat_id and message_id:
        params['chat_id'] = chat_id
        params['message_id'] = message_id
    else:
        raise ValueError("Необходимо указать либо inline_message_id, либо chat_id и message_id")
    
    # Опциональные параметры
    if parse_mode:
        params['parse_mode'] = parse_mode
    if entities:
        params['entities'] = entities
    if link_preview_options:
        params['link_preview_options'] = link_preview_options
    if reply_markup:
        params['reply_markup'] = reply_markup
    if business_connection_id:
        params['business_connection_id'] = business_connection_id
    
    response = requests.post(url, json=params)
    return response.json()

# Пример 1: Редактирование обычного сообщения
def example_edit_regular_message():
    token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    message_id = 42
    
    result = edit_message_text(
        token=token,
        chat_id=chat_id,
        message_id=message_id,
        text="Обновленный текст сообщения",
        parse_mode="HTML"
    )
    
    if result.get('ok'):
        print("Сообщение успешно отредактировано")
        print(f"Новый текст: {result['result']['text']}")
    else:
        print(f"Ошибка: {result.get('description')}")

# Пример 2: Редактирование inline-сообщения
def example_edit_inline_message():
    token = "YOUR_BOT_TOKEN"
    inline_message_id = "1234567890abcdef"
    
    # Создаем inline-клавиатуру
    inline_keyboard = {
        "inline_keyboard": [[
            {"text": "Кнопка 1", "callback_data": "btn1"},
            {"text": "Кнопка 2", "callback_data": "btn2"}
        ]]
    }
    
    result = edit_message_text(
        token=token,
        inline_message_id=inline_message_id,
        text="<b>Обновленный inline-сообщение</b>",
        parse_mode="HTML",
        reply_markup=inline_keyboard
    )
    
    if result.get('ok'):
        print("Inline-сообщение успешно отредактировано")
    else:
        print(f"Ошибка: {result.get('description')}")

# Пример 3: Редактирование с бизнес-соединением
def example_edit_business_message():
    token = "YOUR_BOT_TOKEN"
    business_connection_id = "business_connection_123"
    chat_id = 123456789
    message_id = 42
    
    result = edit_message_text(
        token=token,
        business_connection_id=business_connection_id,
        chat_id=chat_id,
        message_id=message_id,
        text="Обновленный текст бизнес-сообщения",
        parse_mode="Markdown"
    )
    
    if result.get('ok'):
        print("Бизнес-сообщение успешно отредактировано")
    else:
        print(f"Ошибка: {result.get('description')}")

# Пример 4: Редактирование с отключением предпросмотра ссылок
def example_edit_with_link_preview():
    token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    message_id = 42
    
    link_preview_options = {
        "is_disabled": True,
        "url": "https://example.com",
        "prefer_small_media": False,
        "prefer_large_media": False,
        "show_above_text": False
    }
    
    result = edit_message_text(
        token=token,
        chat_id=chat_id,
        message_id=message_id,
        text="Сообщение с отключенным предпросмотром ссылок: https://example.com",
        link_preview_options=link_preview_options
    )
    
    if result.get('ok'):
        print("Сообщение отредактировано с настройками предпросмотра")
    else:
        print(f"Ошибка: {result.get('description')}")

# Пример 5: Редактирование с сущностями (entities)
def example_edit_with_entities():
    token = "YOUR_BOT_TOKEN"
    chat_id = 123456789
    message_id = 42
    
    entities = [
        {
            "type": "bold",
            "offset": 0,
            "length": 10
        },
        {
            "type": "italic",
            "offset": 12,
            "length": 8
        }
    ]
    
    result = edit_message_text(
        token=token,
        chat_id=chat_id,
        message_id=message_id,
        text="Жирный текст и курсивный текст",
        entities=entities
    )
    
    if result.get('ok'):
        print("Сообщение отредактировано с сущностями")
    else:
        print(f"Ошибка: {result.get('description')}")

# Запуск примеров (раскомментируйте нужный)
if __name__ == "__main__":
    # example_edit_regular_message()
    # example_edit_inline_message()
    # example_edit_business_message()
    # example_edit_with_link_preview()
    # example_edit_with_entities()
    pass

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

  • API 2.0. Добавлен метод editMessageText
  • API 5.0. Обновлен метод editMessageText: Добавлена возможность ручного указания текстовых сущностей
  • API 7.0. Обновлен метод editMessageText: Заменен параметр disable_web_page_preview на link_preview_options
  • API 7.5. Обновлен метод editMessageText: Добавлен параметр business_connection_id

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

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