Используйте меню бота, чтобы помочь пользователям найти нужную информацию в вашем боте. Создавайте команды, которые запускают определенные цепочки. Открыть меню можно кликнув по иконке со знаком «/» в поле ввода сообщений .
Чтобы создать меню бота, на странице чат-бота откройте вкладку «Меню» и нажмите «Добавить элемент».
Введите название команды. Можно использовать до 30 символов в поле: латинские буквы, цифры и знак «_».
Введите описание — то, для чего можно использовать данную команду. В этом поле можно ввести до 200 различных символов, а также добавить эмодзи.
Выберите цепочку, которая запустится после выбора команды из списка.
Команды меню в чат-боте Telegram
Нажмите “Добавить”, чтобы добавить команду в меню.
Расширяйте меню дополнительными командами с помощью кнопки «Добавить элемент». После создания команд нажмите «Сохранить», чтобы сохранить созданные элементы.
Меню с командами готово к работе.
Вы также можете создать клавиатурное меню для пользователя из кнопок «Быстрые ответы». Вы можете добавить до 10 таких кнопок и добавить в них эмодзи.
Они отображаются у пользователя под полем ввода текста, скрываются при нажатии на соответствующий значок и пропадают после отправки следующего сообщения.
Источник: sendpulse.com
Правильный способ создания меню с помощью python-telegram-bot
Этот код работает, но у меня такое чувство, что строить длинное дерево elif нерационально.
Более того, я не могу понять, как дать пользователю возможность вернуться в главное меню из меню второго уровня (поскольку главное меню находится в другом обработчике, и я не могу поймать его с помощью обратного вызова из >).
Итак, вопрос в том, как лучше всего создавать такие системы меню?
DemX86 1 Июл 2018 в 20:12
2 ответа
Лучший ответ
Вы должны использовать аргумент pattern в CallbackQueryHandler . Также хорошо использовать классы или функции для клавиатуры и сообщений.
Чтобы вернуться в главное меню, добавьте кнопку возврата в подменю с определенным шаблоном обратного вызова.
Обратите внимание : вы используете edit_message_text в меню. Это означает, что ничего не произойдет, если вы вызовете функцию start с методом reply_text из любого меню.
Полный рабочий пример с функциями:
#!/usr/bin/env python3.8 from telegram.ext import Updater from telegram.ext import CommandHandler, CallbackQueryHandler from telegram import InlineKeyboardButton, InlineKeyboardMarkup ############################### Bot ############################################ def start(bot, update): bot.message.reply_text(main_menu_message(), reply_markup=main_menu_keyboard()) def main_menu(bot, update): bot.callback_query.message.edit_text(main_menu_message(), reply_markup=main_menu_keyboard()) def first_menu(bot, update): bot.callback_query.message.edit_text(first_menu_message(), reply_markup=first_menu_keyboard()) def second_menu(bot, update): bot.callback_query.message.edit_text(second_menu_message(), reply_markup=second_menu_keyboard()) def first_submenu(bot, update): pass def second_submenu(bot, update): pass def error(update, context): print(f’Update caused error ‘) ############################ Keyboards ######################################### def main_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Menu 1′, callback_data=’m1’)], [InlineKeyboardButton(‘Menu 2′, callback_data=’m2’)], [InlineKeyboardButton(‘Menu 3′, callback_data=’m3’)]] return InlineKeyboardMarkup(keyboard) def first_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 1-1′, callback_data=’m1_1’)], [InlineKeyboardButton(‘Submenu 1-2′, callback_data=’m1_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) def second_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 2-1′, callback_data=’m2_1’)], [InlineKeyboardButton(‘Submenu 2-2′, callback_data=’m2_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) ############################# Messages ######################################### def main_menu_message(): return ‘Choose the option in main menu:’ def first_menu_message(): return ‘Choose the submenu in first menu:’ def second_menu_message(): return ‘Choose the submenu in second menu:’ ############################# Handlers ######################################### updater = Updater(‘XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’, use_context=True) updater.dispatcher.add_handler(CommandHandler(‘start’, start)) updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern=’main’)) updater.dispatcher.add_handler(CallbackQueryHandler(first_menu, pattern=’m1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_menu, pattern=’m2′)) updater.dispatcher.add_handler(CallbackQueryHandler(first_submenu, pattern=’m1_1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_submenu, pattern=’m2_1′)) updater.dispatcher.add_error_handler(error) updater.start_polling() ################################################################################
Извините, у меня два пробела в табуляции. 🙂
UPD: Исправить объект подменю.
dzNET 15 Ноя 2020 в 15:44
from telegram.ext import CommandHandler, CallbackQueryHandler from telegram import InlineKeyboardButton, InlineKeyboardMarkup ############################### Bot ############################################ def start(update, context): update.message.reply_text(main_menu_message(), reply_markup=main_menu_keyboard()) def main_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=main_menu_message(), reply_markup=main_menu_keyboard()) def first_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=first_menu_message(), reply_markup=first_menu_keyboard()) def second_menu(update,context): query = update.callback_query query.answer() query.edit_message_text( text=second_menu_message(), reply_markup=second_menu_keyboard()) # and so on for every callback_data option def first_submenu(bot, update): pass def second_submenu(bot, update): pass ############################ Keyboards ######################################### def main_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Option 1′, callback_data=’m1’)], [InlineKeyboardButton(‘Option 2′, callback_data=’m2’)], [InlineKeyboardButton(‘Option 3′, callback_data=’m3’)]] return InlineKeyboardMarkup(keyboard) def first_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 1-1′, callback_data=’m1_1’)], [InlineKeyboardButton(‘Submenu 1-2′, callback_data=’m1_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) def second_menu_keyboard(): keyboard = [[InlineKeyboardButton(‘Submenu 2-1′, callback_data=’m2_1’)], [InlineKeyboardButton(‘Submenu 2-2′, callback_data=’m2_2’)], [InlineKeyboardButton(‘Main menu’, callback_data=’main’)]] return InlineKeyboardMarkup(keyboard) ############################# Messages ######################################### def main_menu_message(): return ‘Choose the option in main menu:’ def first_menu_message(): return ‘Choose the submenu in first menu:’ def second_menu_message(): return ‘Choose the submenu in second menu:’ ############################# Handlers ######################################### updater = Updater(‘YOUR_TOKEN_HERE’, use_context=True) updater.dispatcher.add_handler(CommandHandler(‘start’, start)) updater.dispatcher.add_handler(CallbackQueryHandler(main_menu, pattern=’main’)) updater.dispatcher.add_handler(CallbackQueryHandler(first_menu, pattern=’m1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_menu, pattern=’m2′)) updater.dispatcher.add_handler(CallbackQueryHandler(first_submenu, pattern=’m1_1′)) updater.dispatcher.add_handler(CallbackQueryHandler(second_submenu, pattern=’m2_1′)) updater.start_polling()
Источник: question-it.com
Бот телеграм меню не загружает
Шаг 2: Также можно добавить в это сообщение файл. Для этого нажимаем на плюс в правом верхнем углу, выбираем файл. Под файлом можно добавить кнопки.
Внимание! Максимальный размер файла — 10 МВ.
Шаг 3: Нажимаем на элемент «Файл», добавляем файл, который позволяет принимать telegram.
Как настроить сообщение по умолчанию.
Шаг 2: Сохраняем
Шаг 2: Заходим в него и пишем текст. Так работает ссылка на сообщение. Если нужно указать в сообщении ссылку, но без отображения превью, активируем функцию «Скрыть превью ссылок».
Шаг 1: Заходим в конструктор. Создаем и привязываем бота к Чатформе. Как это сделать смотрите здесь.
Настраиваем стартовое сообщение. Стартовое сообщение это то, что пользователи получат от бота в первый раз, когда нажали на кнопку «Начать» или же «Запустить бота».
Сообщение по умолчанию это то, что бот будет отвечать пользователю, если не понимает его. То есть если пользователь написал какую-то непонятную фразу или слово, бот отвечает этим сообщением.
Шаг 1: Пишем сообщение.
Как сделать так, чтобы бот высылал пользователям текстовое сообщение и файлы.
Шаг 1: В разделе сообщения нажимаем на плюс и выбираем простое сообщение.
Шаг 3: Сохраняем и идем в стартовое. Добавляем кнопки в нашего бота. В правом верхнем углу нажимаем на плюс и выбираем элемент кнопки.
Шаг 4: Пишем текст перед кнопками. В стартовом сообщении вы можете создать 3 вида кнопок.
1 — ссылка на сообщение. Выбираем тип кнопки — ссылка на сообщение. Сохраняем.
2 — внешняя ссылка. Выбираем тип кнопки — внешняя ссылка, добавляем ссылку, которую мы хотим добавить в данную кнопку. Ссылку нужно добавить обязательно http или https. Нажимаем Добавить.
3 — кнопка вызова. Выбираем тип кнопки — кнопка вызова. Указать название контакта, который будет отправляться пользователю. А также указать телефон, по которому пользователь может связаться с данным контактом.
Есть еще один вариант кнопки — корзина. Перейдя по этой кнопке, пользователь сможет посмотреть, что находится в его корзине.
Ни в коем случае нельзя ставить кнопку на корзину в стартовом сообщении!
Для этих кнопок в боте Telegram можно выбрать размещение: по 2 кнопки в ряду или по 1.
Создаём меню в сообщении по умолчанию.
Эти кнопки будут располагаться под полем ввода текста у пользователя. Можно добавить определенное количество рядов и кнопок в каждом. Кнопки динамического меню могут вести только на внутренние сообщения в боте. Не рекомендуется в сообщении по умолчанию ставить кнопку на стартовое сообщение, если в вашем боте настроено постоянное меню.
Нажимаем добавить, сохраняем бота.
Поздравляем! Мы с вами рассмотрели как добавить текстовые элементы, файлы, кнопки, а также как работают стартовое сообщение и сообщение по умолчанию.
Как создать меню в боте Telegram.
Шаг 1: Переходим в BotFather и отправляем ему команду /mybots.Выбираем нужный бот, нажимаем EditCommands
Шаг 2: Получаем сообщение от бота с рекомендациями:
Шаг 3: Отправляем боту перечисление команд
Шаг 4: Добавляем в Конструкторе под сообщения или формы бота соответствующие AI — теги и сохраняем изменения в боте:
Шаг 5: Открываем бот на мобильном, видим появившееся меню, разворачиваем, можем нажать на любую из команд
Источник: learn.chatforma.com