Описание
Используйте этот метод для редактирования только разметки ответа сообщений. При успешном выполнении, если редактируемое сообщение не является инлайн-сообщением, возвращается отредактированное 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. Идентификатор инлайн-сообщения |
| reply_markup | InlineKeyboardMarkup | Опционально | JSON-сериализуемый объект для инлайн-клавиатуры. |
Примеры
php
<?php
$botToken = 'YOUR_BOT_TOKEN';
$apiUrl = "https://api.telegram.org/bot{$botToken}/editMessageReplyMarkup";
// Пример 1: Изменение reply markup обычного сообщения
$data1 = [
'chat_id' => 123456789, // ID чата
'message_id' => 42, // ID сообщения
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Новая кнопка 1', 'callback_data' => 'action_1'],
['text' => 'Новая кнопка 2', 'callback_data' => 'action_2']
],
[
['text' => 'Кнопка 3', 'callback_data' => 'action_3']
]
]
])
];
// Пример 2: Изменение reply markup inline сообщения
$data2 = [
'inline_message_id' => '1234567890abcdef', // ID inline сообщения
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Обновленная inline кнопка', 'callback_data' => 'updated_action']
]
]
])
];
// Пример 3: С бизнес-соединением
$data3 = [
'business_connection_id' => 'business_conn_123',
'chat_id' => 123456789,
'message_id' => 42,
'reply_markup' => json_encode([
'inline_keyboard' => [
[
['text' => 'Бизнес кнопка', 'callback_data' => 'business_action']
]
]
])
];
// Функция для отправки запроса
function editMessageReplyMarkup($data) {
global $apiUrl;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Использование примеров
// $result1 = editMessageReplyMarkup($data1);
// $result2 = editMessageReplyMarkup($data2);
// $result3 = editMessageReplyMarkup($data3);
// Альтернативный вариант с использованием file_get_contents
function editMessageReplyMarkupAlt($data) {
global $apiUrl;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$context = stream_context_create($options);
$response = file_get_contents($apiUrl, false, $context);
return json_decode($response, true);
}
// Пример с удалением клавиатуры (пустой reply_markup)
$dataRemove = [
'chat_id' => 123456789,
'message_id' => 42,
'reply_markup' => json_encode(['inline_keyboard' => []]) // Пустой массив удаляет клавиатуру
];
?>
python
import requests
def edit_message_reply_markup(
token: str,
chat_id: int = None,
message_id: int = None,
inline_message_id: str = 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)
reply_markup: Новая inline-клавиатура в формате InlineKeyboardMarkup
business_connection_id: ID бизнес-соединения (для бизнес-сообщений)
Returns:
Объект Message или True в зависимости от типа сообщения
"""
url = f"https://api.telegram.org/bot{token}/editMessageReplyMarkup"
params = {}
if business_connection_id:
params['business_connection_id'] = business_connection_id
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 reply_markup:
params['reply_markup'] = reply_markup
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
# Новая inline-клавиатура
new_keyboard = {
"inline_keyboard": [
[
{"text": "Новая кнопка 1", "callback_data": "new_button_1"},
{"text": "Новая кнопка 2", "callback_data": "new_button_2"}
],
[
{"text": "Удалить клавиатуру", "callback_data": "remove_keyboard"}
]
]
}
result = edit_message_reply_markup(
token=TOKEN,
chat_id=CHAT_ID,
message_id=MESSAGE_ID,
reply_markup=new_keyboard
)
print(f"Результат: {result}")
# Пример использования 2: Редактирование клавиатуры inline-сообщения
def example_edit_inline_message():
TOKEN = "YOUR_BOT_TOKEN"
INLINE_MESSAGE_ID = "1234567890abcdef"
# Удаление клавиатуры (пустая клавиатура)
empty_keyboard = {
"inline_keyboard": []
}
result = edit_message_reply_markup(
token=TOKEN,
inline_message_id=INLINE_MESSAGE_ID,
reply_markup=empty_keyboard
)
print(f"Результат: {result}")
# Пример использования 3: Редактирование бизнес-сообщения
def example_edit_business_message():
TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = 123456789
MESSAGE_ID = 42
BUSINESS_CONNECTION_ID = "business_connection_123"
# Новая клавиатура с одной кнопкой
simple_keyboard = {
"inline_keyboard": [
[
{"text": "Подтвердить", "callback_data": "confirm"}
]
]
}
result = edit_message_reply_markup(
token=TOKEN,
chat_id=CHAT_ID,
message_id=MESSAGE_ID,
business_connection_id=BUSINESS_CONNECTION_ID,
reply_markup=simple_keyboard
)
print(f"Результат: {result}")
# Пример использования с библиотекой python-telegram-bot
def example_with_ptb():
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import Application
async def edit_reply_markup_example(update: Update, context):
# Получаем ID сообщения для редактирования
message = update.effective_message
# Создаем новую клавиатуру
keyboard = [
[InlineKeyboardButton("Обновленная кнопка 1", callback_data="updated_1")],
[InlineKeyboardButton("Обновленная кнопка 2", callback_data="updated_2")]
]
reply_markup = InlineKeyboardMarkup(keyboard)
# Редактируем клавиатуру сообщения
await context.bot.edit_message_reply_markup(
chat_id=message.chat_id,
message_id=message.message_id,
reply_markup=reply_markup
)
# Инициализация бота
application = Application.builder().token("YOUR_BOT_TOKEN").build()
# ... добавление обработчиков и запуск бота
История изменений
- API 2.0. Добавлен метод editMessageReplyMarkup
- API 4.3. Обновлен метод editMessageReplyMarkup: Боты с правом can_edit_messages могут редактировать сообщения других администраторов без ограничения в 48 часов
- API 7.5. Обновлен метод editMessageReplyMarkup: Добавлен параметр business_connection_id
Дополнительно
- Message - Это основной объект, представляющий сообщение в Telegram, который содержит информацию об отправителе, чате, контенте (текст, медиа, служебные данные) и различные метаданные.
- InlineKeyboardMarkup - Объект для создания встроенной клавиатуры, которая отображается непосредственно в сообщении.