Как можно отправить сообщение вместе с 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" } ] ], } }'