Как можно отправить сообщение вместе с 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 без текста. Есть только метод <a href="https://core.telegram.org/bots/api#editmessagereplymarkup" rel="nofollow">editMessageReplyMarkup</a> для обновления InlineKeyboardMarkup. <br/> <br/> Я думал, что может получиться отправить сообщение с keyboard, а потом вызвать метод editmessagereplymarkup, чтобы в предыдущее сообщение подставить inline_keyboard, но нет. API выдал ошибку "Bad Request: message can't be edited". Листинг запросов: <br/> <br/> 1. Отправка keyboard + text <br/> <pre><code>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
}
}'</code></pre> <br/> <br/> 2. Попытка отредактировать предыдущее сообщение и вставить inline_keyboard <br/> <pre><code>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"
}
]
],
}
}'</code></pre>