Добрый день уважаемые читатели, давайте рассмотрим, какие основные типы встроенных кнопок предлагают чат-боты telegram и в чем их особенности. Статья будет полезна всем, кто хочет разобраться в возможностях взаимодействия с пользователями telegram в версии bot API 2.0.
Для обзора возможностей нам понадобится установить 3 целых 2 десятых Python`a и пару ложек pyTelegramBotAPI. Особенности настройки и регистрации чат-бота мы рассматривать не будем, т.к. есть множество статей на эту тему.
И так, что же такое встроенные кнопки(клавиатура) в мессенджере Telegram? Это кнопки которые выводятся во внутренней области чата и привязываются к конкретному сообщению. Они жестко связаны с сообщением(если удалить сообщение, внутренние кнопки так же удаляются вместе с ним.). Они дают возможность динамически видоизменять его.
В данный момент есть три типа встроенных кнопок:
![](https://habrastorage.org/r/w1560/web/632/7cb/2bb/6327cb2bbd5944c5817fb643bd40c92e.png)
Для создания кнопки используется тип InlineKeyboardMarkup, давайте создадим кнопку «Наш сайт»:
Тут название говорит само за себя, это тип кнопок предназначен для перенаправления пользователя по ссылке, с соответствующим предупреждением. Кнопка имеет соответствующий ярлычок в правом верхнем углу, чтобы дать понять пользователю, что это ссылка.
Этот тип кнопок предназначен для перенаправления пользователя в какой либо чат, с последующей активацией (встроенного) inline-режима общения с ботом. Данный режим можно активировать вручную: в чате, вводим: "@название бота", но switch-кнопки позволяют это сделать автоматически (помогая знакомиться с inline-режимом новичкам).
Для того что-бы создать подобный переключатель, необходимо указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом.
Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:
Шаг 1:
![](https://habrastorage.org/r/w1560/web/07d/7a8/ac7/07d7a8ac7488453394d5f197e6346ac0.png)
Нажимаем на кнопку.
Шаг 2:
![](https://habrastorage.org/r/w1560/web/8f4/561/2db/8f45612dbde9455ab756207783c761ba.png)
Выбираем чат.
Шаг 3:
![](https://habrastorage.org/r/w1560/web/5b7/6c0/85b/5b76c085b7754da4a71e2caf3b97c801.png)
Активировался встроенный inline-режим.
Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне.
Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:
![](https://habrastorage.org/r/w1560/web/2f1/bcd/a1f/2f1bcda1fc174eeeb579f95497f90bee.png)
Так же можно добавить уведомление по нажатию на дату, для этого достаточно указать сообщение в ответе:
![](https://habrastorage.org/r/w1560/web/dbc/19a/929/dbc19a9294a74193a52bbc7ca6b77c97.png)
(Пример в десктопной версии)
![](https://habrastorage.org/r/w1560/web/901/7c9/903/9017c99031d244928503aea603362792.png)
(Пример в мобильной версии)
Если изменить show_alert на True, то мы получим модальное окно:
![](https://habrastorage.org/r/w1560/web/8d6/c5f/b13/8d6c5fb13efb4398b260cc3c6bccdd3a.png)
По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей.
![](https://habrastorage.org/r/w1560/web/b23/455/1f0/b234551f06c54dea8081a7222c09a513.png)
Cпасибо за Ваш интерес к данной теме.
Для обзора возможностей нам понадобится установить 3 целых 2 десятых Python`a и пару ложек pyTelegramBotAPI. Особенности настройки и регистрации чат-бота мы рассматривать не будем, т.к. есть множество статей на эту тему.
И так, что же такое встроенные кнопки(клавиатура) в мессенджере Telegram? Это кнопки которые выводятся во внутренней области чата и привязываются к конкретному сообщению. Они жестко связаны с сообщением(если удалить сообщение, внутренние кнопки так же удаляются вместе с ним.). Они дают возможность динамически видоизменять его.
В данный момент есть три типа встроенных кнопок:
URL-кнопки
![](https://habrastorage.org/web/632/7cb/2bb/6327cb2bbd5944c5817fb643bd40c92e.png)
Для создания кнопки используется тип InlineKeyboardMarkup, давайте создадим кнопку «Наш сайт»:
@bot.message_handler(commands = ['url'])
def url(message):
markup = types.InlineKeyboardMarkup()
btn_my_site= types.InlineKeyboardButton(text='Наш сайт', url='https://habrahabr.ru')
markup.add(btn_my_site)
bot.send_message(message.chat.id, "Нажми на кнопку и перейди на наш сайт.", reply_markup = markup)
Тут название говорит само за себя, это тип кнопок предназначен для перенаправления пользователя по ссылке, с соответствующим предупреждением. Кнопка имеет соответствующий ярлычок в правом верхнем углу, чтобы дать понять пользователю, что это ссылка.
Switch-кнопки
Этот тип кнопок предназначен для перенаправления пользователя в какой либо чат, с последующей активацией (встроенного) inline-режима общения с ботом. Данный режим можно активировать вручную: в чате, вводим: "@название бота", но switch-кнопки позволяют это сделать автоматически (помогая знакомиться с inline-режимом новичкам).
Для того что-бы создать подобный переключатель, необходимо указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом.
@bot.message_handler(commands = ['switch'])
def switch(message):
markup = types.InlineKeyboardMarkup()
switch_button = types.InlineKeyboardButton(text='Try', switch_inline_query="Telegram")
markup.add(switch_button)
bot.send_message(message.chat.id, "Выбрать чат", reply_markup = markup)
Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:
Шаг 1:
![](https://habrastorage.org/web/07d/7a8/ac7/07d7a8ac7488453394d5f197e6346ac0.png)
Нажимаем на кнопку.
Шаг 2:
![](https://habrastorage.org/web/8f4/561/2db/8f45612dbde9455ab756207783c761ba.png)
Выбираем чат.
Шаг 3:
![](https://habrastorage.org/web/5b7/6c0/85b/5b76c085b7754da4a71e2caf3b97c801.png)
Активировался встроенный inline-режим.
Callback-кнопки
Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне.
Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:
![](https://habrastorage.org/web/2f1/bcd/a1f/2f1bcda1fc174eeeb579f95497f90bee.png)
@bot.message_handler(commands=['calendar'])
def get_calendar(message):
now = datetime.datetime.now() #Текущая дата
chat_id = message.chat.id
date = (now.year,now.month)
current_shown_dates[chat_id] = date #Сохраним текущую дату в словарь
markup = create_calendar(now.year,now.month)
bot.send_message(message.chat.id, "Пожалйста, выберите дату", reply_markup=markup)
Так же можно добавить уведомление по нажатию на дату, для этого достаточно указать сообщение в ответе:
bot.answer_callback_query(call.id, text="Дата выбрана")
![](https://habrastorage.org/web/dbc/19a/929/dbc19a9294a74193a52bbc7ca6b77c97.png)
(Пример в десктопной версии)
![](https://habrastorage.org/web/901/7c9/903/9017c99031d244928503aea603362792.png)
(Пример в мобильной версии)
Если изменить show_alert на True, то мы получим модальное окно:
bot.answer_callback_query(call.id, show_alert=True, text="Дата выбрана")
![](https://habrastorage.org/web/8d6/c5f/b13/8d6c5fb13efb4398b260cc3c6bccdd3a.png)
Заключение
По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей.
![](https://habrastorage.org/web/b23/455/1f0/b234551f06c54dea8081a7222c09a513.png)
Cпасибо за Ваш интерес к данной теме.