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, научились переписывать историю редактировать сообщения и отправлять небольшие уведомления по нажатию. В следующий раз продолжим изучать новые возможности для ботов. А исходники к этому уроку можно найти в этом репозитории.
Как сделать кнопку-ссылку под постом в Telegram-канале с помощью бота
После создания и оформления канала в Telegram не стоит ограничиваться стандартными возможностями платформы. Создавайте эффектные публикации – пользуйтесь для этого сторонними ботами, позволяющими реализовать необходимый функционал. Один из вариантов – кнопки-ссылки.
В этой статье мы расскажем, как с помощью настройки двух ботов в несколько нажатий добавлять в сообщения красивые кнопки-ссылки на сайт или другие ресурсы.
Реклама ID: 2VtzquvF2Qj
Как добавлять кнопки в Телеграм-канал через бота
Добавление кнопок в Telegram-каналах осуществляется через двух ботов. С помощью первого – @ControllerBot – осуществляется создание постов через браузер и из интерфейса мобильного/компьютерного приложения, добавление канала и отслеживание статистики. С помощью второго – @BotFather – создание бота для постинга. Добавление кнопок и реакцией в Telegram-каналах – дело двух минут и ниже мы познакомим вас с процессом.
Создаём бота для канала: пошаговая инструкция
- В поиск с компьютерной или мобильной версии мессенджера пишем название бота «@ControllerBot».
- Добавляем его в контакты и кликаем по кнопке «Начать», если ранее не пользовались им либо «Перезапустить».
- Выбираем команду «/addchanel» для добавления нового канала или вводим её вручную.
- Кликаем по кнопке «Подключить новый бот».
- Переходим согласно инструкции внутри @ControllerBot в бот @BotFather для создания нового бота.
- Нажимаем кнопку «Начать».
- Среди предложенных команд нажимаем «/newbot» либо вводим её самостоятельно в поле для ввода сообщений и отправляем нажатием кнопки «Enter».
- Задаем имя новому боту в @BotFather, отправив ответное сообщение. Например, PostiumPost_Bot (нижнее подчеркивание перед «bot» обязательно).
- Сообщение о завершении создания перешлите в @ControllerBot. Нажмите для этого правую кнопку мыши на тексте сообщения и в контекстном меню выбираем пункт «Переслать сообщение», затем ищем в диалогах @BotController и направляем текст ему. Для пересылки сообщения с телефона нажимаем на сообщение и удерживаем палец до появления контекстного меню, где выбираем «Переслать».
Отлично. Половина работы успешно проделана, далее – настройка созданного бота.
Настраиваем бота
Через @ControllerBot нужно выполнить предварительную настройку созданного бота:
- Копируем название созданного бота.
- Нажимаем на вертикальное троеточие в собственном канале и в выпадающем меню нажимаем на пункт «Управление каналом».
- Кликаем по пункту «Администраторы» и в новом окне нужно нажать на кнопку добавления администраторов.
- Вставляем ранее скопированное имя созданного бота в строку поиска, выбираем его среди результатов. Подтверждаем назначение пользователя (бота) в качестве администратора канала нажатием кнопки «ОК». Он будет автоматически приглашен в канал и назначен администратором.
- Задаем права как на изображении ниже и сохраняем результат.
- Напишите сообщение на канал или перешлите в @ControllerBot любое ранее опубликованное. На смартфоне удерживайте палец на сообщении и в появившемся контекстном меню выберите «Переслать». На компьютере кликните по сообщению правой кнопкой и выберите аналогичный пункт.
- Настраиваем тайм-зону (часовой пояс канала), отправив название города в ответном сообщении. Например, Москва. Нажимаем кнопку «Верно», чтобы подтвердить выбор города.
Готово! Все настройки завершены.
Как сделать пост с кнопкой в Telegram-канале или группе
Сложности позади, осталось понять логику создания красивых публикаций через нашего бота:
- Переходим в ранее созданного бота. В нашем случае, это @PostiumPost_Bot. Нажимаем «Enter» или кнопку, показанную на скриншоте.
- Кликаем на кнопку «Создать пост» и выбираем канал, в котором будет опубликовано сообщение.
- Отправляем желаемый контент в следующем порядке: текст, изображение, реакции, URL-кнопки.
- Загружаем изображение нажатием кнопки «Прикрепить медиафайл» и выбираем интересующее фото на ПК или смартфоне. Картинка прикрепится автоматически.
- Добавляем реакции на статью под изображением. Нажимаем для этого «Добавить реакции» и присылаем эмодзи согласно рекомендациям в боте Телеграм. Разделитель смайликов – «/». В строку можно публиковать до трех реакций. Рядом со смайликом можно написать текст.
- Нажимаем кнопку «Добавить URL-кнопки». Следуя рекомендациям от бота, одну или несколько кнопок. В ряд могут быть добавлены не более 3 кнопок. Между собой они разделяются с помощью «|», и имеют вид «Кнопка – https://site.com/». Нажимаем «Отправить».
- Кликаем по кнопке «Далее» для перехода к настройкам публикации подготовленного сообщения.
- Выбираем функции – «Таймер удаление» (сообщение будет автоматически удалено с канала через заданное время), «Опубликовать» — размещение поста прямо сейчас, «Отложить» — настройка даты и времени публикации. Нажимаем «Опубликовать» и подтверждаем публикацию сообщения.
Готово! Пост опубликован с реакциями, ссылками на сайт в виде кнопок и изображением.
Процесс создания бота, публикации сообщений с реакциями и кнопками-ссылками со смартфонов аналогичен.
Полезные ссылки:
Сравнение онлайн-курсов Перед тем, как купить любой курс, сравните условия от разных школ — стоимость обучения, скидки, длительность, есть ли программа трудоустройства. Подобрать онлайн-курс >>
Создание кнопок для телеграмм бота с использованием библиотеки pyTelegramBotAPI
Доброго времени суток. Телеграмм — божественный месседж скаченный у каждого на телефонах/компьютерах и не только. После прочтение этой статьи вы научитесь создавать кнопки для вашего телеграмм бота. Желаю удачи, в прочтении!)
Предупреждение
Забыл предупредить, в этой статье не будет сказано о создание бота, получение токена через BotFather. Для этого прочитайте документацию библиотеки или посмотрите ролики на эту тему в ютубе(Для удобство ссылку на документацию на русском языке библиотеки pyTelegramBotAPI оставлю в описании). И так, вернемся к теме.
Создание url кнопки
Url кнопки используются, когда хотим создать кнопку при клике которой, пользователь переходил на сайт. Пример:
нажима на «перейти», телеграмм перекинет его на сайт, который вы оставили при создание url кнопки, но как же собственно создать? Легко!
при создание url-кнопки используется тип InlineKeyboardMarkup, в который мы добавляем кнопку и с помощью reply_markup=markup выводим это в чат(обязательно не забудьте указать это, иначе ваша кнопка просто не будете отображаться).
Создание Reply кнопки
Я не знаю как корректно называются кнопки использующие тип ReplyKeyboardMarkup, но я много практиковался в их создание и покажу вам, как это делается. Вот пример Reply кнопок:
Вот весь код самого бота:
И так. Что бы создать Replay кнопку, нужно создать переменную, я назвал ее markup(9 строчка кода) в нее помещаем types.ReplyKeyboardMarkup(resize_keyboard=True). Resize_keybord=True выполняет функцию адаптации(я всегда указываю и вам советую тоже).После этого мы создаем переменную уже с самими кнопками и их текстом(10, 11 строчка) и затем добавляем эти переменные коммандой markup.add(__имя ваших переменных__). Коммандой bot.send_message(message.chat.id, text=»Привет, <0.first_name>! Я тестовый бот для твоей статьи для habr.com».format(message.from_user), reply_markup=markup) и обязательно не забывайте добавлять reply_markup=markup, иначе просто кнопки не будут отображаться.
Заключение
Большое спасибо вам за прочтение. Не судите строго, это моя первая статья, рассказал я скорее всего не очень, и только поверхностно. Если хотите углубиться в эту тему, почитайте документацию, кстати, вот документация по pyTelegramBotAPI на русском:
Ставим URL-кнопки в сообщениях на Telegram-канале
Недавно мы узнали как создать канал в меседжере Telegram. Вы наверное замечали что на некоторых каналах к сообщениям добавлены кнопки с ссылками, а так же смайлики, на которые можно нажать и выразить свое отношение к записи. И скорее всего задумывались как же это сделать. Ведь в стандартном наборе отправки сообщений таких функций нет. Так вот все это делается благодаря одному боту. Сейчас я расскажу как подключить такого бота к себе на канал.
Создаем бота и подключаем его к своему Telegram-каналу.
Первым делом нужно создать бота, но не пугайтесь сложного тут ничего нет.
Добавляем себе в контакты бота который называется @ControllerBot Для этого в поиск вставляем название бота и Telegram находит его. Затем выбираем его и нажимаем кнопку «начать».
Далее вам нужно подключить к боту свой канал. Для этого нажимаем кнопку «Каналы» потом кнопку «Добавить новый канал». После чего вам нужно нажать кнопку «подключить новый бот»
После чего вам выдается инструкция в которой написано что нужно перейти в бот под названием @BotFather , просто нажимаете на название бота и вас перекидывает куда нужно. Снова нажимаете кнопку «Начать», затем в выпавшем списке нажимаете /newbot .
В поле ввода текста пишите название бота (можно писать на любом языке, в моем примере это testovik ) и нажимаете кнопку «отправить». Затем вам нужно придумать логин вашему боту и в конце, через нижнее подчеркивание, пишем слово bot ( testovik_bot ). Вот тут нужно писать на латинице. И снова нажимаем «отправить». Если вам выдаст сообщение, как на скриншоте, значит данное имя уже занято и нужно придумать другое (я просто дописал цифры testovik123_bot ). И снова жмем кнопку «отправить». Если данное имя не занято вам выйдет поздравление.
Часть задачи пройдена. Идем дальше
Теперь вам нужно сообщение, которое вам написал @BotFather , переслать в @ControllerBot , для этого нажимаем на сообщении правой кнопкой мыши и выбираем пункт «Переслать сообщение», в меню слева выбираем ControllerBot нажимаем на него и затем просто жмем отправить сообщение.
Смотрим что написано в сообщении. Вам нужно добавить вашего бота в администраторы вашего канала. Для этого на имени бота жмем правой кнопкой мыши и выбираем пункт «Копировать имя пользователя». Затем переходим на ваш канал, жмем на название канала и выбираем ссылку «Администраторов: 1» и нажимаем на неё.
В открывшемся окне вам нужно нажать кнопку «Добавить администратора», затем в поле ввода жмем правой кнопкой мыши и выбираем пункт «вставить». В поле поиска появится ваш созданный бот. Жмем на бота. В следующем диалоговом окне нажимаем кнопку «Да». Затем ничего не меняя нажимаем «Сохранить». Ну вот вы добавили бота в администраторы вашего канала.
Далее пишем любое сообщение на своем канале, и пересылаем его в ControllerBot . Для этого жмем правой кнопкой мыши на сообщении и выбираем пункт «переслать сообщение», выбираем в левом меню ControllerBot и нажимаем «отправить сообщение».
Ну вот и все вам выходит сообщение, что канал успешно подключен. Теперь нужно выбрать часовой пояс. для этого в поле ввода теста пишем ваш город. И нажимаем «отправить сообщение». В следующем сообщение смотрим и если все правильно жмем кнопку «Верно».
Ну вот, я могу вас поздравить, вы подключили бот к своему Telegram каналу.
Как же пользоваться созданным ботом:
На самом деле все гораздо проще чем кажется на первый взгляд. Нажимаем на кнопку с названием вашего канала,. вас перебросит прямиком в ваш бот. Нажимаем кнопку «Начать». Первым делом отправляем боту текстовое сообщение, которое вы хотите опубликовать. Для этого в поле ввода текста пишем ваше сообщение и нажимаем кнопку «отправить».
Далее прикрепляем картинку. Для этого жмем кнопку «Прикрепить фото». Нажимаем кнопочку в виде скрепки и у вас откроется проводник компьютера, ищем нужную картинку и нажимаем кнопку «Открыть», затем нажимаем «Отправить 1 фото». Ну вот мы видим что картинка прикрепилась к тексту.
Так теперь прикрепим к посту смайлики. что бы люди могли нажать на них и выразить свое мнение о посте. Для этого жмем кнопку «Добавить реакции». Выбираем какие смайлики хотим прикрепить, их должно быть не больше 6 штук . Как только выбрали смайлы жмем кнопку «Отправить». И как видим смайлы прикрепились к нашему сообщению.
Ну и осталось прикрепить кнопочки с ссылками к нашему посту. Для этого жмем кнопку «Добавить URL-кнопки». Вам тут же выходит подсказка, как нужно писать что бы появилась кнопка. В поле ввода текста пишем текст в таком формате «Название кнопки — ссылка» . (пример Мой блог — http://www.blog-maksa.ru ). Если вы хотите прикрепить несколько ссылок то вам нужно каждую ссылку делать с новой строки. Для того, чтобы курсор переместился на строку ниже жмем на клавиатуре Shift+Enter и в таком же формате вставляем еще одну ссылку. Как только вы вставили все ссылки жмем «Отправить сообщение». И сразу же видим что ссылка прикрепилась к посту.
Ну вот мы полностью составили наш пост. Осталось его опубликовать. Для этого жмем кнопку «Далее», а затем кнопку «Опубликовать». Бот у вас спрашивает «вы уверены что хотите опубликовать 1 сообщение» . Так как мы в этом уверены жмем «Опубликовать». Переходим на свой канал и видим что наше сообщение опубликовано.
Ну что вот мы и научились красиво оформлять свои сообщения в Telegram-канале.
Если вам понравилась статья поделитесь ею в своих соц. сетях (кнопки слева) и напишите комментарий, для вас мелочь, а мне приятно .