Привет Друзья! Прикольные виртуальные помощники, обладающие порой примитивным, но забавным искусственным интеллектом, сборщик фоток ми-ми-мишных котиков из Instagram и многое другое, являются своеобразной фишкой Telegram. Боты в Telegram оснащены удобным API и пишутся на многих языках программирования ― это позволяет создавать кроссплатформенные сервисы от примитивного echo-бота, до ботов службы поддержки. Сегодня этим постом я начинаю цикл статей о написании Telegram бота. Кстати мы запустили наш канал в Telegram — @QSY.BY Подписывайтесь на него чтобы быть в курсе последних новостей.

Кто такие боты и зачем они нужны

Боты — специальные аккаунты в Telegram, созданные для того, чтобы автоматически обрабатывать и отправлять сообщения. Пользователи могут взаимодействовать с ботами при помощи сообщений, отправляемых через обычные или групповые чаты. Логика бота контролируется при помощи HTTPS запросов к API для ботов.

На самом деле боты могут делать очень много интересных вещей, начиная рассылкой погоды, новостей, записей из ВКонтакте, поиском и скачиванием книг, музыки… в общем потенциал ботов ограничен разве что фантазией разработчика и API Telegram для ботов (последний ну очень уж богат возможностями).

К чему я всё это? Чтобы сложить небольшое представление о том, что мы будем делать дальше. Бот — это программа, написанная, кстати сказать, на любом языке программирования, и запущенная на каком-нибудь сервере (или на компьютере разработчика, в крайнем случае).

Пришло время начинать

Итак, для того, чтобы создать своего первого бота, тебе потребуются:

  • Компьютер (ну а как же без него?) на macOS, Linux или Windows;
  • Telegram, желательно также на компьютере, можно воспользоваться веб-версией, если лень скачивать;
  • Python 3 и менеджер пакетов pip для него (всё это мы будем устанавливать немного позже, не переживай).

Если всё готово, есть хотя бы компьютер и Telegram, то можем начинать.

Теперь нам нужно зарегистрировать нашего бота в Telegram. Для этого открываем приложение Telegram (либо веб-версию) и переходим к боту @BotFather. Запускаем бота и отправляем ему команду /newbot.

Первым делом нас спросят о названии бота, именно об имени, то, что будет отображаться в списке диалогов рядом с аватаркой. Назовём нашего бота Ботаник, отправим это сообщение @BotFather. Теперь нужно придумать уникальный логин бота, который должен оканчиваться на bot. Пусть будет BotanikRobot. Помни: логин бота в дальнейшем изменить нельзя.

Если логин никем не занят, то @BotFather отправит нам сообщение об успешном создании нового бота. Всё, что нам нужно узнать из полученного сообщения — длинную строку, TOKEN бота. Это ключ, с помощью которого мы сможем управлять нашим ботом через Python. Но об этом немного позже.

В моём примере ключ: 520178827:AAHCjHvMAkBvDogQMP3VUNmi86-B6vtQRFM. Можешь не пытаться его использовать, он уже обновлён ?

Ну когда же мы начнем писать код

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

Общие команды.

  • /newbot — Создать нового бота.
  • /mybots — Редактирование ваших ботов.

Редактирование параметров бота.

  • /setname — Изменить имя робота.
  • /setdescription — Изменить описание бота, представляющее собой короткий текст с описанием бота. Пользователи увидят его в самом начале, под заголовком «Что умеет этот робот?».
  • /setabouttext — Изменить информацию о боте, ещё более короткий текст, отображающийся в профиле бота. Ещё, если кто-то поделится вашим ботом, то вместе со ссылкой на него отправится этот текст.
  • /setuserpic — Изменить аватарку бота. Картинки — всегда хорошо.
  • /setcommands — Изменить список команд бота. Каждая команда состоит из собственно командного слова, начинающегося с символа косой черты («/») и короткого описания. Пользователи увидят список команд при вводе символа «/».
  • /deletebot — Удалить бота и его имя пользователя.
  • /setjoingroups — Определяет, можно ли добавлять вашего бота в группы.
  • /setprivacy — Определяет, все ли сообщения видит ваш бот в группах. В выключенном состоянии боту будут отправляться все сообщения.

И так изучив все команды, я предлагаю для начала заполнить описание нашего бота. У бот-аккаунта есть два поля с описанием. Первое это About Info которое видно на карточке с информацией о боте. Второе это Description Info, текст отображающийся при первом открытии чата с ботом.

Первым делом заполним About Info для этого введем команду /setabouttext Следуя инструкциям @BotFather введем следующее описание бота. «На примере этого бота мы с пользователями QSY.BY изучаем написание бота для Telegram.»

Далее заполним Description Info для этого в @BotFather введем команду /setdescription и напишем следующий текст. «Этот бот пока что умеет очень мало, но обучен базовому этикету свойственному для ботов этого типа :-)»

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

 

 

Поздравляю ты только что создал своего первого бота в Telegram. Посмотреть результат ты можешь по ссылке @BotanikRobot Правда он еще пока ничего не умеет, совсем как маленький ребенок. Поэтому ты должен научить его выполнять команды. Для этого в @BotFather есть команда /setcommands.

Становись. Равняйсь. Смирно. Команды в Telegram Bot

Команды представляют собой более гибкий способ общения с роботом. Рекомендуется следующий синтаксис:

Команда должна начинаться с символа косой черты «/» и не может быть длиннее 32 символов. Команды могут состоять из букв латинского алфавита, цифр и подчёркивания. Несколько примеров:

Сообщения, начинающиеся с косой черты, будут всегда доставляться боту (точно также, как и при ответе на его сообщения и на @упоминания бота в чате). Приложения Telegram будут:

  • предлагать список поддерживаемых команд с их описанием, когда пользователь введёт символ косой черты «/» (чтобы этот пункт работал, необходимо задать описание команд у @BotFather). Нажатие на описание приведёт к отправке этой команды.
  • показывать кнопку (/) в поле ввода текста во всех чатах с ботами. Нажатие на эту кнопку отобразит список доступных команд.
  • подсвечивать /команды в сообщениях. При нажатии на такую подсвеченную команду, она будет сразу же отправлена боту.

Глобальные команды

Чтобы пользователям было проще работать с ботами, создатели Telegram просят всех разработчиков реализовывать поддержку нескольких простых команд. В интерфейсе приложений Telegram будут ярлыки (быстрые ссылки) для этих команд.

  • /start -начинает общение с пользователем (например, отправляет приветственное сообщение). В эту команду также можно передавать дополнительные аргументы.
  • /help — отображает сообщение с помощью по командам. Оно может представлять собой короткое сообщение о вашем боте и список доступных команд.
  • /settings — (по возможности) возвращает список возможных настроек и команды для их изменения.

При попытке начать общение с ботом, пользователь увидит кнопку Старт. На странице профиля бота также будут доступны ссылки Помощь и Настройки.

В результате в @BotFather после ввода команды  /setcommands водим следующие команды:

 

 

start — Начать чат с Ботаником

help — Получить список команд

settings — Настройки бота

 

 

 

 

Если ты начнешь выполнять команды — ничего не произойдет, т.к бот не знает, что ответить на входящее сообщение, потому что мы его этому не научили. Для того что бы начать программировать ответы бота нам нужно получать сообщения отправляемые ему. Для этого есть два основных метода setWebhook и getUpdates. О них и о всех доступных методах написано в Bot API.

WebHook или GetUpdates

Если использовать метод setWebhook Telegram сам будет пересылать для обработки все сообщения адресованные боту. Используя метод getUpdates мы должны каждый раз запрашивать у Telegram обновление. Очевидно что метод setWebhook намного проще, но для его реализации нужен сервер и подписанный сертификат SSL для организации защищенного https соединения, наличие которого обязательно требует Telegram. Получить его не сложно, но на начальном этапе это не так важно. Поэтому мы будем использовать метод getUpdates, который от нас ничего не требует.

Попробуем получить данные из чата с нашим ботом. имеют стандартный вид. Все запросы к Telegram Bot API должны осуществляться через HTTPS и имеют стандартный вид:

https://api.telegram.org/bot<token>/НАЗВАНИЕ_МЕТОДА. Например:

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

Как видно имея token бота можно полностью и управлять, поэтому рекомендую его не где не светить. Т.к все взаимодействия с ботом это http запросы, мы можем общаться с ботом прямо из браузера.

https://api.telegram.org/520178827:AAGmMkeDcNSrYS6OkO0dtDizN-HT4jkNNOk/getUpdates

В результате выполнения запроса поле результата пустое. Попробуем что-нибудь отправить нашему боту, например «Hello World»и просто просто обновим запрос в браузере.

В результате получим большой набор данных. Давай разберемся, что это все означает.

update_id :216473175 — уникальный id запроса.

«is_bot»:false,»first_name»:»Pavel»,»last_name»:»Hladkikh»,»username»:»EU4DGC»,»language_code»:»ru»},»chat»:{«id»:216473175,»first_name»:»Pavel»,»last_name»:»Hladkikh»,»username»:»EU4DGC»,»type»:»private»},»date»:1520180410,»text»:»Hello World»}}]}

В этой строке видны ID, Имя и Username отправителя,  дата, и текст сообщения. Отлично теперь имея id отправителя написавшего в чате боту, мы можем ему ответить. Для этого воспользуемся методом sendMessage. Кстати полный список методов для взаимодействия с пользователем можно найти все в том же Telegram Bot API.

У метода sendMessage есть два обязательных поля это chat_id (id чата с ботом) и text (собственно сам текст сообщения). Chat_id можно узнать из предыдущего запроса, при этом в приватном чате chat_id и id пользователя совпадают. В результате получаем запрос следующего вида.

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendmessage?chat_id=216473175&text=Test

В результате выполнения запроса получаем сообщение от сервера Telegram о валидном выполнении запроса. При этом в Web версии мессенджера мигает оповещение о новом событии.  

Как видно из окна чата. Мы получили сообщение от бота. Надеюсь вы поняли как происходит механизм взаимодействия с ботами в Telegram. Чаще всего ответ на отправленные команды, это текст, но не всегда. Подводя итог. При помощи Telegram Bot API  можно получать / отсылать сообщения, фотографии, музыку, файлы и местоположение.  Уже сейчас можно научить нашего бота отвечать на входящие сообщения, но это будет не автоматизированный процесс. Мы же не будем отвечать и обновлять бота вручную. Именно для автоматизации мы должны написать скрипт, который будет управлять ответами нашего бота. В следующей статье мы с тобой начнем писать Telegram бота на Python и библиотекой Telebot. Так что если тебе понравилась статья и ты на баловался с отправкой сообщений самому себе, тогда поделись статьей со своими друзьями и оставь комментарий. И даже если статья не понравилась все равно поделись и напиши почему.

Поддержи проект репостом или копеечкой.