Бот для telegram на php. Отложенный постинг, кнопки, инлайн-запросы.

telegram_featured-1240x580.jpg

В начале 2016 года в Telegram появились «встроенные» боты. Команды им можно отправлять непосредственно внутри чатов. Очень круто и удобно придумано. С ними можно за секунду, не выходя из окна переписки, найти ссылку на нужную статью, текст песни, фото в Instagram и тут же отправить их собеседнику.

Вот 12 ботов, которые помогут общаться быстрее и эффективнее.

1. Видео на YouTube

youtube_quick_search.jpg

Думаю, многим знакома проблема: глубокая ночь, силы на исходе, лежишь себе в кроватке и ведешь в мессенджере непринужденную беседу. Заходит разговор о музыке, хочется кинуть ссылку на клип, но влом… Влом переходить в браузер, открывать YouTube и искать.

Но есть способ сэкономить душевные силы и 10 секунд бесценного жизненного времени:

1. Сначала открываем бот по ссылке ниже и нажимаем на кнопку Start. Предварительно запускать бот надо во всех примерах из статьи.

2. После этого в любом диалоге можно набирать @vid ключевая фраза для поиска видео.

3. И в результате над строкой для ввода текста будет появляться окошечко со скроллингом, в котором можно посмотреть результаты поиска и выбрать ссылку для отправки.

@vid

2. Статьи в «Википедии»

Аналогично выполняется поиск по «Википедии». Для этого надо установить еще один бот и набирать @wiki ru название статьи. При желании, ru можно заменить на код другого языка.

@wiki

3. Коубы

Зацикленные видеоролики длиной в несколько секунд помогут оживить разговор не хуже стикеров и эмодзи. Для их поиска надо набирать @coub тема видео

@coub

4. Тексты песен

@iLyricsBot находит тексты песен (в том числе русских) и добавляет к ним ссылки на YouTube и mp3-файл для скачивания.

@iLyricsBot

5. Перевод слов

@lutilbot помогает вспомнить забытые англоязычные слова во время разговора. При переводе предложений следует внимательно следить за грамматикой. Бот пока не идеален.

@lutilbot

6. Боты

@storebot поможет быстро найти ссылку на нужный бот и поделиться ей с собеседником.

@storebot

7. Товары

А @my_ali_bot предназначен для быстрого поиска вещей на AliExpress. Пригодится, если точно знаешь, какой товар хочешь показать собеседнику. Но выбирать товар «с нуля» такими способом не очень удобно.

@my_ali_bot

8. Делаем заметки

@bnotebot — самый гениальный из всех. В нем можно сохранить готовые тексты (телефоны, адреса, универсальные ответы) и быстро подставлять их в диалоги по мере необходимости.

@bnotebot

9. Картинки из Instagram

Есть легкий способ развеять тоску, пока собеседник долго-долго набирает сообщение. Можно запустить — @instainlinebot bigbeastus и посмотреть, как Рома поднимает штангу. При желании, что-то из фото и видео можно отправить в диалог.

@instainlinebot

10. Твиты

Еще внутри диалога можно почитать твиты, которые найдутся по ключевым словам.

@TweetItBot

11. Pocket

@pocketasbot позволяет быстро находить статьи, которые сохранены в вашем Pocket. Команда :favoritet отображает список «избранных» материалов, а :unread — непрочитанных.

@pocketasbot

12. Ссылки на «Позволь поискать за тебя в…» для DuckDuckGO, Google, Bing и Wikipedia

А вот способ достойно ответить на «Ну объясни, мне лень гуглить что-то…». Просто набираете @lmddgtfybot поисковый запрос, выбираете поисковик и получаете готовую ссылку на результаты.

Как выглядит результат@lmddgtfybot

Кто-то может подумать: «Ну что, я совсем овощ что-ли, чтобы лениться перейти в браузер?». Если вы из таких, то рекомендую попробовать пару inline-ботов и оценить их удобство. К хорошему быстро привыкаешь.

Подборки полезных ботов от iPhones.ru:

Эти 10 ботов Telegram помогут познакомиться, выучить английский и многое другое10 полезных ботов Telegram, на которые стоит подписаться

? Хочешь больше? Подпишись на наш Telegram. … и не забывай читать наш Facebook и Twitter ? iPhones.ru Зачем нужны inline-боты и как ими пользоваться? –> Для создания кнопки используется тип 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:Нажимаем на кнопку.Шаг 2:Выбираем чат.Шаг 3:Активировался встроенный inline-режим.

Callback-кнопки

Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне. Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки:

@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="Дата выбрана")

(Пример в десктопной версии)(Пример в мобильной версии) Если изменить show_alert на True, то мы получим модальное окно:

bot.answer_callback_query(call.id, show_alert=True, text="Дата выбрана")

Заключение

По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей. Cпасибо за Ваш интерес к данной теме.

Доброго времени дня и ночи, мой дорогой читатель. Пожалуй, мне бы стоило поздравить тебя с наступившим новым годом, но нет, прости, я не особо склонен ко всякого рода поздравлением. Не будем отходить от темы — полгода назад я написал статью о том, как создать своего самого первого робота в Telegram на Python3 и запустить его.

С тех пор прошло довольно много времени, несколько раз обновлялся Telegram Bot API, и сегодня я решил продолжить свой рассказ о создании своего робота.

Для начала немного информации для общего развития — о том, что такое клавиатура в боте и для чего она нужна.

Когда мы впервые запускаем любого бота, мы используем кнопку Start (Запуск), затем можем продолжить общение с ботом посредством команд или любых других текстовых сообщений.

По правде гениальные разработчики Telegram решили пойти дальше и предложили создателям ботов использовать так называемые клавиатуры для роботов — эти клавиатуры заменяют обычные текстовые устройства ввода на телефонах и отображаются под полем для ввода сообщения.

Что происходит, когда мы нажимаем кнопки под полем для ввода сообщения? Ничего сложного — лишь отправляется тот текст, который мы видим на кнопке. То есть нажатие на Настройки приведёт к отправке сообщения с текстом Настройки от твоего имени к боту и только.

Далее робот просто обрабатывает полученный им текст. Никакой магии. Знаю по своему опыту, что очень любят код (вру, не все) — поэтому сейчас мы приступим к его написанию.

Полагаю, прочитав мою предыдущую запись, ты сможешь установить и настроить Python3, а также создать самого простого бота, отвечающего на команду /start.

Для начала нам придётся зарегистрировать нашего нового робота у @BotFather и получить TOKEN для соединения с ним. Своего робота я назову Dr. Watson, а логин сохраню в тайне ?

Создадим простого бота, который при запуске будет здороваться с пользователем. Кода, как на картинке ниже, будет вполне достаточно:

Теперь определимся с тем, что будет делать наш робот.

Сделаем так: сразу после запуска бот должен отобразить пользователю клавиатуру с двумя кнопками — Шерлок Холмс и Доктор Ватсон.

Отправимся в функцию start нашего простого бота и изменим её следующим образом:

Помимо всего прочего нужно добавить from telebot import types в начало нашего файла с роботом.

Теперь объясню, что вообще здесь происходит ?

  1. С помощью types.ReplyKeyboardMarkup() мы создаём объект нашей будущей клавиатуры, в скобках прописываются нужные параметры. resize_keyboard=True позволяет клавиатуре растягиваться на необходимую высоту вместо того, чтобы занимать всё пространство.
  2. С помощью .add() мы добавляем кнопки в нашу клавиатуру. types.KeyboardButton() представляет собой объект самой кнопки, а в скобках указывается текст на ней. В коде выше я наполняю объект нашей клавиатуры объектами кнопок, заполняя их из списка ['Шерлок Холмс', 'Доктор Ватсон'] (полагаю, меня крайне сложно понять сейчас, это нормально, советую прочитать статью про списки и for).
  3. Последнее, что нужно сделать — привязать нашу клавиатуру к нужному сообщению, делается это при помощи параметра reply_markup в любом методе send_....

Можно сохранить код и запустить робота.

Как видно, под полем для текста появились две заветные кнопки. Что дальше? Теперь нужно научить нашего робота обрабатывать сообщения, отправляемые ему после нажатия на кнопки.

Рассмотрим мой код выше. В функции start мы используем метод register_next_step_handler для того, чтобы следующее сообщение от нашего пользователя сразу попало бы в обработчикname (который указан вторым параметром; первый — объект отправленного нами сообщения).

В функции name мы обработаем ответ пользователя — отправим сообщения о Шерлоке Холмсе и Докторе Ватсоне.

На картинке выше я добавил сообщения, которые будут отправляться пользователю после нажатия на любую из кнопок.

Сохраним файл с нашим роботом и запустим его, не забыв заново отправить команду/start (старые кнопки уже не сработают).

Вот так бот ответит нам на нажатие на кнопку. Но замечу, что повторное нажатие ни к чему не приведет, поскольку только после команды /start бот будет проверять текст сообщения на наличие Шерлока Холмса и Доктора Ватсона.

Подведём итог: клавиатуры позволяют отправлять целые сообщения по одному лишь нажатию пользователя. В кнопки можно записывать любые текстовые фразы, даже содержащие в себе Emoji. ?

После отправки бот должен обработать полученную фразу, причем неважно, как именно.

Отмечу, что у пользователя всегда есть остаётся возможность отправить сообщение при помощи обычной клавиатуры.

Ещё хочу добавить, что для объекта кнопки есть два интересных параметра, принимающих логические значения — request_contact и request_location. Первый запрашивает телефонный номер пользователя, а второй его местоположение. Узнать больше о параметрах и возможностях клавиатуры можно в официальной документации Telegram Bot API. Думаю, на этом часть с клавиатурами можно закончить.

Так называемый Inline-режим появился у роботов в апреле прошлого года. Предлагаю для начала рассмотреть суть его работы. ?

Есть два варианта использования Inline: первый — в самом боте, в сообщениях, отправляемых ботом; второй — вне бота, где-нибудь в произвольном чате, начав набирать логин бота в поле для текстового сообщения.

Сегодня я хочу рассказать про первый вариант Inline-режима. С помощью него можно прикреплять Inline-кнопки к сообщениям, которые отправляются ботом.

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

Inline-кнопки прикрепляются к сообщениям точно так же, как это делают клавиатуры. Отличаются лишь названия и параметры методов.

Внесем некоторые изменения в наш код. Теперь нашей целью будет отредактировать сообщение после нажатия на кнопку.

Да-да, Inline-кнопки способны редактировать уже отправленные нашим роботом сообщения. ?

По порядку рассказываю, что здесь творится. ?

  1. Вместо обычной клавиатуры мы используем метод types.InlineKeyboardMarkup(). ⌨️
  2. В объект так называемой Inline-клавиатуры мы сохраняем объекты наших кнопок — types.InlineKeyboardButton(text='...', callback_data='...'). Как ты уже мог догадаться, в параметр text записывается то, что увидит наш пользователь. Но что такое callback_data? О, этот вопрос мучил многих начинающих разработчиков ботов, и я не исключение. Постараюсь объяснить. Во-первых, параметр callback_data — это строка. Во-вторых, эта строка представляет собой некий адрес, код, который отправляется боту по нажатию на данную кнопку. Бот обрабатывает этот адрес-код и выполняет нужное действие. В нашем примере текст на кнопке равен содержимому callback_data — то есть Шерлок Холмс и Доктор Ватсон соответственно. ?
  3. Хендлер, или правильнее сказать, обработчик@bot.callback_query_handler(func=lambda c: True) принимает все запросы, отправляемые из Inline-кнопок. Объект запроса c передаётся в функцию, где далее обрабатывается.
  4. В функции inline наш адрес, или код, как тебе нравится, хранимый в c.data (c, как ты помнишь, это объект нашего запроса, который попадает в функцию), проверяется роботом. И если это Шерлок Холмс или Доктор Ватсон, то робот выполняет заданное действие — редактирует сообщение, заменяя в нём текст.

Сохраним наш код и запустим робота. Отправим команду /start и попробуем нажать на любую из кнопок.

Как видно, текст сообщения от бота изменился после нажатия на кнопку.

Вместо callback_data можно также указать url — любой URL адрес; по нажатию на такую кнопку пользователь перейдёт в браузер.

На самом деле Inline-кнопки способны почти на всё — с помощью них можно даже отправлять обычные сообщения. Все функции и возможности описаны в Telegram Bot API. Пожалуй, это всё, что я хотел рассказать тебе о первых шагах в Inline.

А теперь небольшой подарок для всех читателей моего блога — ниже я оставлю код и описание простого бота, с помощью которого можно читать книгу в формате .txt в одном-единственном сообщении ?

По команде /start этот робот отправляет первую страницу — на каждой странице по 700 символов из книги.

С помощью стрелок ⬅️ и ➡️ можно листать страницы — текст сообщения будет изменяться вырезками по 700 символов.

Ниже я оставляю тебе код этого бота — чтобы запустить, достаточно положить рядом с ботом любую книгу в формате .txt

Поделиться:

URL-кнопки

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:07d7a8ac7488453394d5f197e6346ac0.pngНажимаем на кнопку.Шаг 2:8f45612dbde9455ab756207783c761ba.pngВыбираем чат.Шаг 3:5b76c085b7754da4a71e2caf3b97c801.pngАктивировался встроенный inline-режим.

Callback-кнопки

Ну и наконец самое интересное — это кнопки с обратной связью: позволяют динамически обновлять сообщение/встроенные кнопки (не засоряя при этом ленту), а так же отображать уведомление в верху чат-бота или модальном окне. Например, их можно использовать для просмотра длинного сообщения, аналогично пагинации страниц на сайтах, или например сделать календарь. Я не стану изобретать велосипед, а через поиск по GitHub, найду готовую библиотеку calendar-telegram. Выполнив указанные инструкции, получаем готовый календарь, который можно динамически изменять по нажатию на соответствующие кнопки: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="Дата выбрана")

dbc19a9294a74193a52bbc7ca6b77c97.png(Пример в десктопной версии)9017c99031d244928503aea603362792.png(Пример в мобильной версии) Если изменить show_alert на True, то мы получим модальное окно:

bot.answer_callback_query(call.id, show_alert=True, text="Дата выбрана")

8d6c5fb13efb4398b260cc3c6bccdd3a.png

Заключение

По последним данным, в нашумевшем мессенджере Telegram регистрируются больше 600к пользователей ежедневно. Именно поэтому важно подхватить тренд и разобраться с его основными особенностями, т.к. различные методы взаимодействия с ботами существенно облегчает жизнь разработчиков и пользователей. Cпасибо за Ваш интерес к данной теме.Используемые источники:

  • https://www.iphones.ru/inotes/700230
  • https://tlgrm.ru/blog/inline-bots.html
  • https://m.habr.com/post/335886/
  • http://messagu.ru/telegram/telegram-bot-knopki-delaem-robota-v-telegram
  • https://habr.com/post/335886/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий