Как можно отправить сообщение вместе с inline-клавиатурой и обновить основную клавиатуру после нажатия кнопки на клавиатуре?
1. Для отправки двух разных сообщений с клавиатурами одновременно в Telegram API можно воспользоваться методом sendMessage дважды, указав разные тексты для каждого сообщения и разные клавиатуры для каждого сообщения. Примерно так:
```python
import requests
token = 'YOUR_BOT_TOKEN'
url = f'https://api.telegram.org/bot{token}/sendMessage'
# Отправка первого сообщения с клавиатурой
data1 = {
'chat_id': 'CHAT_ID',
'text': 'Первое сообщение',
'reply_markup': {
'keyboard': [['Кнопка 1'], ['Кнопка 2']]
}
}
response1 = requests.post(url, json=data1).json()
# Отправка второго сообщения с другой клавиатурой
data2 = {
'chat_id': 'CHAT_ID',
'text': 'Второе сообщение',
'reply_markup': {
'keyboard': [['Кнопка 3'], ['Кнопка 4']]
}
}
response2 = requests.post(url, json=data2).json()
```
2. Для отправки сообщения вместе с inline-клавиатурой и обновления основной клавиатуры после нажатия кнопки на клавиатуре в Telegram API, можно использовать метод editMessageReplyMarkup. Примерно так:
```python
import requests
token = 'YOUR_BOT_TOKEN'
message_id = 'MESSAGE_ID'
url = f'https://api.telegram.org/bot{token}/editMessageReplyMarkup'
# Отправка сообщения с inline-клавиатурой
data = {
'chat_id': 'CHAT_ID',
'message_id': message_id,
'text': 'Сообщение с inline-клавиатурой',
'reply_markup': {
'inline_keyboard': [[{'text': 'Кнопка', 'callback_data': 'button_pressed'}]]
}
}
response = requests.post(url, json=data).json()
# Обновление основной клавиатуры после нажатия кнопки
if response['ok'] == True:
new_data = {
'chat_id': 'CHAT_ID',
'message_id': message_id,
'reply_markup': {
'keyboard': [['Новая кнопка 1'], ['Новая кнопка 2']]
}
}
requests.post(url, json=new_data)
```
При обновлении клавиатуры после нажатия в Callback Query обработка происходит в вашем обработчике CallBack функции.
Увы, в Telegram нет метода чтобы обновить ReplyKeyboardMarkup без текста. Есть только метод editMessageReplyMarkup для обновления InlineKeyboardMarkup.
Я думал, что может получиться отправить сообщение с keyboard, а потом вызвать метод editmessagereplymarkup, чтобы в предыдущее сообщение подставить inline_keyboard, но нет. API выдал ошибку "Bad Request: message can't be edited". Листинг запросов:
1. Отправка keyboard + text
curl --location --request GET 'https://api.telegram.org/bot###/sendMessage' \ --header 'Content-Type: application/json' \ --data '{ "chat_id": "###", "text": "Some text", "reply_markup": { "keyboard": [ [ { "text": "Button 1", "request_contact": true } ] ], "resize_keyboard": true } }'
2. Попытка отредактировать предыдущее сообщение и вставить inline_keyboard
curl --location --request GET 'https://api.telegram.org/bot###/editMessageReplyMarkup' \ --header 'Content-Type: application/json' \ --data '{ "chat_id": "###", "message_id": 1332, "reply_markup": { "inline_keyboard": [ [ { "text": "Button 2", "callback_data": "foo" } ] ], } }'