Чат бот telegram — Как сделать чат бота для Telegram за 15 минут

Как сделать Telegram бота за 15 минут

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

Расширяя собственные каналы доставки информации до целевой аудитории этого ресурса, я решил сделать еще и группу в Telegram, куда бот публикует новые, очень надеюсь, интересные для вас материалы. В этом посте я покажу вам, как сделать собственного бота буквально за 15 минут. А заодно и заранее обращу ваше внимание на «грабли», которые вас могут поджидать.

Я уже как-то писал про использование облачных функций Google, пришло время показать еще один пример того, как они могут быть использованы на практике. Итак, нам понадобятся:

  • Google Cloud Functions или AWS Lambda + API Gateway (в них мы разместим код бота)
  • Node.js
  • Google Cloud SDK
  • Аккаунт в Telegram.
  • Прямые руки.

Код конечной облачной функции доступен на GitHub.

Регистрация чат-бота в Telegram

Я не буду дублировать большое количество информации, доступное на эту тему, а просто поделюсь с вами прекрасными ссылками на русскую и английскую документацию. Итак, процесс регистрации бота в Telegram очень прост. Достаточно обратиться к боту @BotFather в Telegram и отправить ему команду /newbot.

Далее отвечаем на пару вопросов (задаем имя бота и его описание) и получаем API-ключ (он же идентификатор) вашего бота.

Telegram создание и регистрация бота

Логика работы бота

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

Для тех из вас, кто хочет пойти по пути написания и хостинга собственного Web-сервиса, рекомендую отличное русское руководство по написанию бекенда для Telegram бота на Python.

Арендовать целую виртуальную машину под бота мне было жалко денег, поэтому я пошел по более простому пути — использование облачных функций (Google Cloud Functions или Lambda + API Gateway). Да, у AWS придется использовать два сервиса вместо одного, т.к. в отличии от Google к AWS Lambda функциям у AWS нельзя обратиться напрямую по HTTP.

Для тех, кто все таки хочет сделать это в AWS, рекомендую отличную статью Creating a server-less Telegram bot with AWS Lambda and AWS API Gateway.

Не смотря на то, что я дал вам аж 3 варианта для реализации, рекомендую начать с облачных функций Google или AWS. Я покажу вам как это сделать в Google Cloud, а для AWS все будет ровно точно так же.

Telegram бот на Google Cloud Functions

В этом примере мы напишем бота, который в ответ на сообщение /docker будет выдавать содержимое RSS ленты этого блога по категории Docker.

Как обычно, создаем отдельную директорию, например myAwesomeTestBot. В которой необходимо разметить 2 файла package.json (тут будут описаны зависимости) и index.js (тут будет код бота).

Содержимое package.json:

В этом файле делается описание нашего модуля, и указываются все зависимости Nodejs, которые понадобятся нам для реализации логики работы бота. В нашем случае внешние зависимости 2:

  • node-telegram-bot-api — собственно основная библиотека для работы с Telegram API
  • rss-parser — библиотека, упрощающая работу с RSS на JavaScript

Далее идет основной файл облачной функции (web-сервиса), которая будет реализовывать логику работу для нашего Telegram бота. Но прежде чем реализовывать логику, давайте взглянем на структуру типичного сообщения, получаемого Telegram ботом:

Как видите, ничего сложного в этой структуре нет. Нам нужна структура message, определяющая полученное сообщения, а в ней вложенные структуры:

  • from — от кого получено сообщение, обратите внимание на language_code, бот может быть легко локализован.
  • chat — чат или по сути канал, по которому получено сообщение
  • text — непосредственно текст сообщения

Именно с этими данными мы и будем работать в коде ниже. Содержимое index.js:

В верхней части файла идет подключение библиотек и инициализация глобальных переменных (можно не радоваться «засвеченному» токену, бот был удален еще до публикации этой статьи):

Далее определяется облачная функция:

Более подробно о написании http-облачных функций в Google Cloud можно посмотреть тут: https://cloud.google.com/functions/docs/writing/http.

Далее, Telegram будет передавать нашей функции от бота различные сообщения: бот может находиться в канале и получать статусные сообщения о входах\выходах пользователей с\из каналов, реагировать на нажатие кнопок с определяемой вами клавиатуры и т.д. Давайте явно обезопасим себя от того, что не будем отвечать на все сообщения:

Ну, а далее очень примитивный разбор команды и реакция только на команду /docker в switch блоке.

Публикация логики бота в Google Cloud Functions

Чтобы опубликовать мозг нашего бота в виде доступной для вызова облачной функции (Web-сервиса), нужно скачать все требующиеся нам зависимости:

Опубликовать функцию командой:

В выводе команды увидеть строки:

Из которых нам нужно запомнить URL, по которому можно обращаться к нашей функции. И сообщить Telegram о том, что все сообщения для бота необходимо передавать на обработку ей (короче, установить Web-hook):

В данной команде используется ключ доступа\идентификатор нашего бота и URL нашей облачной функции. Все, теперь у вас есть ваш первый персональный Telegram бот, развивать который дальше — одно удовольствие. Он может делать для вас абсолютно все что угодно!

Тестируем Telegram бота

Находим бота в списке пользователей Telegram, нажимаем /start. Получаем приветствие. Жмем или пишем /docker и получаем список статей из RSS ленты.

Вот так вот очень просто пишется бот для Telegram. Далее будут разобраны чуть более сложные вопросы.

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.