Bot API v2: Кнопки и редактирование сообщений
В начале апреля 2016 года вышло первое по-настоящему крупное обновление API для ботов. Изменений довольно много, поэтому материал я разобью на несколько частей. Сегодня поговорим об inline-кнопках и редактировании сообщений, а затем обсудим новые инлайн-режимы вместе со специальными кнопками для отправки геолокации и номера телефона.
Новые возможности
Начнём с двух важных изменений:
- Каждая кнопка, будь то обычная или инлайн, это теперь самостоятельный объект KeyboardButton или InlineKeyboardButton , не забудьте обновить своих ботов!
- В Inline-режиме все текстовые поля теперь представлены отдельными объектами InputMessageContent , которые, в свою очередь могут быть аж 4-х типов (подробности тут).
URL-кнопки
Итак, инлайн-кнопки. Что это такое? Это специальные объекты, которые “цепляются” к конкретным сообщениям и распространяют своё действие, в общем случае, только на них. Делятся такие кнопки на три типа: URL-кнопки, Callback-кнопки и Switch-кнопки. Самыми простыми являются кнопки-ссылки (URL). Как видно из названия, их цель — просто перекидывать пользователей по определенным веб-адресам. Давайте сразу напишем обработчик, который будет на любое сообщение отвечать каким-либо текстом и предложением перейти, например, на Яндекс.
Инлайн-клавиатура представляет собой объект InlineKeyboardMarkup , а каждая инлайн-кнопка – это объект InlineKeyboardButton . Чтобы получилась URL-кнопка, нужно указать значения параметров text (текст на кнопке) и url (валидный веб-адрес). В результате бот пришлет нам такое сообщение (см. рис.). В целях обеспечения безопасности, перед переходом по URL-кнопкам появляется всплывающее окно, в котором видна ссылка целиком.
Callback-кнопки и редактирование сообщений
Прежде, чем мы перейдем к другим кнопкам, давайте познакомимся с функциями редактирования сообщений, коих тоже три: editMessageText (редактирование текста), editMessageCaption (редактирование подписи к медиа) и editMessageReplyMarkup (редактирование инлайн-клавиатуры). В рамках этого урока рассмотрим только первую функцию, остальные работают аналогично и предлагаются для самостоятельного изучения.
Чтобы отредактировать сообщение, нам надо знать, про какое именно идёт речь. В случае, если оно было отправлено самим ботом, идентификаторами служит связка chat_id + message_id . Но если сообщение было отправлено в инлайн-режиме, то ориентироваться надо по параметру inline_message_id .
И вот теперь вернемся к нашим баранам кнопкам. На очереди – Callback. Это, на мой взгляд, самая крутая фича нового обновления. Колбэк-кнопки позволяют выполнять произвольные действия по их нажатию. Всё зависит от того, какие параметры каждая кнопка в себе несёт. Соответственно, все нажатия будут приводить к отправке боту объекта CallbackQuery , содержащему поле data , в котором написана некоторая строка, заложенная в кнопку, а также либо объект Message , если сообщение отправлено ботом в обычном режиме, либо поле inline_message_id , если сообщение отправлено в инлайн-режиме.
Приведу пример, после которого все вопросы должны отпасть: пусть, например, если сообщение отправлено ботом в обычном режиме, то нажатие на кнопку заменит текст сообщения на “Пыщь”, если в инлайн – то “Бдыщь”. При этом в обоих случаях значение callback_data будет равно test . Что для этого нужно сделать: во-первых, написать простейший хэндлер для всех входящих сообщений, во-вторых, написать простейший хэндлер для инлайн-сообщений, в-третьих, написать простейший хэндлер для колбэка, который определит, из какого режима пришло сообщение.
Запускаем бота, отправляем инлайн-сообщение, которое, в свою очередь, вызовет обычное:
Нажмем на обе кнопки, результат правильный:
После проверки
Таким образом, callback-кнопки – это очень мощный инструмент для взаимодействия пользователей с ботом, а редактирование сообщений дополнительно помогает в этом. Более того, нажатие на колбэк-кнопку может дополнительно тригернуть либо уведомление в верхней части экрана, либо всплывающее окно. Покажу первый вариант. Пускай помимо изменения сообщения на “Пыщь”, аналогичное слово показывается уведомлением. Для этого перепишем первое if-условие в хендлере колбэков:
Результат – на скриншоте. Попробуйте, кстати, изменить аргумент show_alert на True и посмотрите, что получится.
Всплывающее уведомление
Switch-кнопки
Наконец, остался последний тип кнопок — Switch (переключатель). Они нужны, чаще всего, для обучения пользователей работе с ботом в инлайн-режиме. Чтобы активировать сделать кнопку такого типа, нужно указать аргумент switch_inline_query либо пустой, либо с каким-либо текстом. В последнем случае этот текст будет сразу подставлен в поле ввода, например, для показа демонстрации инлайна. Как вообще работает такая кнопка? При нажатии на неё Telegram предложит выбрать чат, после чего подставит в поле ввода ник вашего бота и (если есть), текст, указанный вами в аргументе switch_inline_query . Давайте попробуем так сделать. Добавим кнопку, которая будет перенаправлять пользователя в какой-либо чат и предлагать в инлайн-режиме запрос “Telegram”. Код всего хендлера выглядит вот так:
Теперь, если мы нажмем на кнопку и выберем чат, вот что получится:
Итак, в этом уроке мы познакомились с новыми кнопками в Telegram Bot API, научились переписывать историю редактировать сообщения и отправлять небольшие уведомления по нажатию. В следующий раз продолжим изучать новые возможности для ботов. А исходники к этому уроку можно найти в этом репозитории.
Кнопки в телеграм-ботах
Это статья из серии о телеграм-ботах. Я по частям расскажу о важных моментах в pytelegrambotapi. Сразу полезная информация: я начал учиться делать ботов по этой статье и всем ее рекомендую.
Кнопки в телеграм бывают двух видов — inline и обычные (reply).
Обычные вы видите вместо клавиатуры, все, что они делают, как правило, — отправляют текстовое сообщение боту.
Но, перед тем, как сделать кнопку, нужно создать клавиатуру. Для обычных кнопок она одна, для inline другая, вот обычная:
resize_keyboard: bool — необязательный | будет ли клавиатура растягиваться (по умолчанию: без значения)
one_time_keyboard: bool — необязательный \ разовая ли клавиатура (по умолчанию: без значения)
selective: bool — необязательный | кому показывать (по умолчанию: без значения)
row_width: int — обязательный | количество столбцов кнопок (по умолчанию: 3)
input_field_placeholder: str — необязательный | заменяет текст-заглушку в поле ввода (по умолчанию: без значения)
Создав клавиатуру, создадим к ней кнопку:
text: str — обязательный | текст кнопки. Если указан только он, то кнопка будет просто отправлять текст при нажатии.
request_contact: bool — необязательный | если указан как true то пользователь при нажатии отправит свой контакт. Доступен только в приватных чатах.
request_location: bool — необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.
request_poll: bool — необязательный | если указан как true, то пользователь при нажатии отправит свою локацию. Доступен только в приватных чатах.
web_app: WebAppInfo — необязательный | если указан как true, то при нажатии откроется страница указанного веб-приложения — про это есть отдельная статья. Доступен только в приватных чатах.
Как сделать синюю кнопку в Телеграме с ссылкой? Инструкция.
Итак, для того, чтобы сделать кнопку, нужно использовать бот в Телеграме. Что тут надо делать:
- В Телеграме найти бота под названием @controllerbot
- Запустить его.
- ControllerBot отправит в ответ команды. Нужно выбрать пункт /addchannel – добавить канал.
- Затем ControllerBot попросит добавить нового бота в администраторы вашего канала. Это надо сделать. На этом этапе вы можете поменять бота на любого другого.
- Далее надо переслать любое сообщение из вашего канала. Также можно отправить username или ID канала.
- Потом ControllerBot переправит вас к вашему же боту.

2 этап
- Запустить уже ваш бот.
- Нажать на Создать пост.

- Выбрать канал, в котором вы хотите создать пост.
- Набрать нужный текст и нажать на синюю кнопку отправки. Пока пост не опубликован на канале, а только подготовлен. Мы можем его немного видоизменить.
- Выбрать пункт Добавить URL-кнопку.

- Бот попросит прислать ему нужную ссылку в формате Кнопка 1 – адрес сайта и тд. Слово “кнопка” можно заменить на любое другое.

- Если все правильно, то бот напишет фразу – URL-кнопки сохранены. Продолжайте отправлять сообщения.
- Затем бот напишет, что сообщение готово к публикации. Осталось только нажать Опубликовать.

- Внимание! Сообщение в вашем Телеграм канале будет выглядеть в формате – текст + ссылка под текстом. Чтобы сделать голубую кнопку, надо нажать правой кнопкой мыши по сообщению и выбрать Закрепить.

- Готово! Синяя кнопка появилась в Телеграм-канале.
Как в Телеграме можно сделать кнопку для бота на канале, пошаговая инструкция
Мессенджер Telegram дает пользователям массу возможностей для общения и получения информации. Также человек может создать собственный Телеграм-канал. После этого наверняка встанет вопрос о наращивании аудитории. Чтобы осуществить задуманное, необходимо внимательно подойти к оформлению канала и подумать над тем, как сделать кнопку со ссылкой в Телеграме. Это поможет привлечь новых подписчиков и повысить лояльность старой базы.
Типы встроенных кнопок
Функционал Telegram позволяет интегрировать разные виды кнопок, для каждого из которых характерно определенное назначение. Знания о типах подобных интерфейсов дают возможность эффективнее наращивать и монетизировать трафик.
На заметку. При оформлении публикации кнопки отображаются в нижней части текста и являются кликабельными.

URL-кнопки
Простой, но, в то же время, очень популярный тип, повсеместно используемый в Телеграме. Особенностью подобных кнопок является наличие гиперссылок, которые отображаются рядом с иконкой. Читатель, вместе с URL, видит предупреждение о том, что при нажатии он перейдет на сторонний ресурс.

Switch-кнопки
Более сложный тип, представленный в виде кликабельной иконки для перехода в другой чат с автоматической активацией общения с программой или оформлением подписки. Особенность данного вида заключается в автоматической настройке кнопок, благодаря чему владелец канала может сэкономить время на оформлении публикаций.

Callback-кнопки
Самый продвинутый инструмент взаимодействия читателя с бот-программой для Телеграм-канала. Такие кнопки позволяют совершать произвольные действия, которые происходят после нажатия на них.
Владелец канала может отредактировать интерфейс по собственному усмотрению, назначив для него определенные функции. На практике реализация Callback-кнопок выглядит так: читатель кликает по сообщению, а в ответ получает пост с информацией.

Как добавлять кнопки в Телеграм-канале
Чтобы создать кнопку для своего канала в Телеграме, пользователю необходимо набраться терпения.
Ведь встроенный функционал Telegram не позволяет самостоятельно добавить интерфейс, который отвечает за перенаправление пользователей.
Первым делом необходимо подключить бота для своего аккаунта. Для этого можно воспользоваться @Controllerbot, который активируется через @BotFather путем нажатия на «Старт» и обозначением команды /newbot.

Далее хозяин канала должен действовать в соответствии с алгоритмом:
- Пропишите название бота и нажмите «Отправить».
- Придумайте логин через нижнее подчеркивание (например, newschool_bot). Важно подобрать такое имя, чтобы оно не было занято другими пользователями. Поэтому придется перебрать несколько вариантов.
- Тапните по иконке «Отправить».

- Перенаправьте сообщение от @BotFather роботу @Controllerbot. Для этого кликните на пост ПКМ и выберете значение «Переслать сообщение».
- Добавьте полученного бота в администраторы канала, нажав ПКМ по имени робота и выбрав заголовок «Копировать имя пользователя». Далее его название указывается в ссылке «Администраторов:X».
- Нажмите «Добавить администратора», а в поле для ввода текста выберете пункт «Вставить».

- Сохраните изменения.
- Откройте канал и напишите любое сообщение.
- Перешлите его в @Controllerbot.

Если все сделано верно, на экране высветится сообщение об успешной активации бота. Далее пользоваться интерфейсом можно с выбора пункта «Начать» и указания общедоступного текста. Робот сам предложит нужный вид кнопки среди рассмотренных ранее.