#Node Red Telegram api
Explore tagged Tumblr posts
Text
Node Red Ile Telegram Nasıl Kullanılır?
Node red gün geçtikçe kullanımı artan ve sürekli olarak güncel programlar için api eklenebilen akış tabanlı bir iot yazılım platformudur.
Bugün ki Yazımızda güncel mesajlaşma programlarından Telegramın node red'e Nasıl entegre edileceğinden bahsedeceğiz.
Node Red Ve Telegram ile Neler Yapılabilir?
Istediğiniz bir cihazı telegram dan bir mesaj ile kontrol esebilirsiniz.
Istenen verileri veya mesajları gün veya saat bazlı olarak istediğiniz telegram kişisi ile paylaşırsınız.
#Node Red#Node-Red#Node Red nedir?#Node Red Nasıl Kurulur?#Telegram Nedir?#Telegram Nasıl Kullanılır?#Node Red Telegram api#Node Red ile Telegram Telegram Kullanımı
0 notes
Photo
New Post has been published on https://dev-ops-notes.ru/devops/%d0%ba%d0%b0%d0%ba-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d1%82%d1%8c-%d1%87%d0%b0%d1%82-%d0%b1%d0%be%d1%82%d0%b0-%d0%b4%d0%bb%d1%8f-telegram-%d0%b7%d0%b0-15-%d0%bc%d0%b8%d0%bd%d1%83%d1%82/?utm_source=TR&utm_medium=andrey-v-maksimov&utm_campaign=SNAP%2Bfrom%2BDev-Ops-Notes.RU
Как сделать чат бота для 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-ключ (он же идентификатор) вашего бота.
Логика работы бота
Сам по себе зарегистрированный бот совершенно бесполезен. Ему надо приделать мозг. Мозг в данном случае ни что иное как небольшой 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:
"name": "myAwesomeTestBot", "version": "0.1.0", "description": "Awesome Telegram Bot Example - Google Cloud Functions", "main": "index.js", "scripts": "test": "echo \"Error: no test specified\" && exit 1" , "keywords": [], "author": "", "license": "GPL", "dependencies": "node-telegram-bot-api": "^0.28.0", "rss-parser": "^2.10.4"
В этом файле делается описание нашего модуля, и указываются все зависимости Nodejs, которые понадобятся нам для реализации логики работы бота. В нашем случае внешние зависимости 2:
node-telegram-bot-api – собственно основная библиотека для работы с Telegram API
rss-parser – библиотека, упрощающая работу с RSS на JavaScript
Далее идет основной файл облачной функции (web-сервиса), которая будет реализовывать логику работ�� для нашего Telegram бота. Но прежде чем реализовывать логику, давайте взглянем на структуру типичного сообщения, получаемого Telegram ботом:
"update_id":399206834, "message": "message_id":5, "from": "id":61193397, "is_bot":false, "first_name":"Andrey", "last_name":"Maksimov", "username":"amaksimov", "language_code":"en-RU" , "chat": "id":61193397, "first_name":"Andrey", "last_name":"Maksimov", "username":"amaksimov", "type":"private" , "date":1504273127, "text":"/docker", "entities":[ "offset":0, "length":7, "type":"bot_command" ]
Как видите, ничего сложного в этой структуре нет. Нам нужна структура message, определяющая полученное сообщения, а в ней вложенные структуры:
from – от кого получено сообщение, обратите внимание на language_code, бот может быть легко локализован.
chat – чат или по сути канал, по которому получено сообщение
text – непосредственно текст сообщения
Именно с этими данными мы и будем работать в коде ниже. Содержимое index.js:
var parser = require('rss-parser'); const TelegramBot = require('node-telegram-bot-api'); const token = '362883343:AAHEUJIhx7Gc5Qp240uyrIgrZd8wqLtoxA0'; var bot = new TelegramBot(token, polling: false); exports.myAwesomeTestBot = function telegramBot (req, res) // Логируем запрос (пригодится для отладки) console.log('Request body: ' + JSON.stringify(req.body)); var request = req.body; var message = req.body.message; if (typeof message.chat !== "undefined") var chat = message.chat; if (chat.type == "private") // Это сообщение отправлено в личный чат с ботом // Из какого чата пришло сообщение и текст сообщения var chatId = chat.id; var messageText = message.text; switch (messageText) // Обработка команд case '/docker': console.log('Processing command: ' + messageText); // Получить ссылки из RSS ленты и отправить в чат var feed_url = 'https://dev-ops-notes.ru/category/docker/feed/'; parser.parseURL(feed_url, function(err, parsed) parsed.feed.entries.forEach(function(entry) var msg = decodeURIComponent(entry.link); // Собственно отправка сообщения ботом bot.sendMessage(chatId, msg); ); ); break; default: bot.sendMessage(chatId, 'Привет! Отправь мне /docker и получи последние статьи о Docker!'); break; res.status(201).send('Done!');
В верхней части файла идет подключение библиотек и инициализация глобальных переменных (можно не радоваться “засвеченному” токену, бот был удален еще до публикации этой статьи):
var parser = require('rss-parser'); const TelegramBot = require('node-telegram-bot-api'); const token = '362883343:AAHEUJIhx7Gc5Qp240uyrIgrZd8wqLtoxA0'; var bot = new TelegramBot(token, polling: false);
Далее определяется облачная функция:
exports.myAwesomeTestBot = function telegramBot (req, res)
Более подробно о написании http-облачных функций в Google Cloud можно посмотреть тут: https://cloud.google.com/functions/docs/writing/http.
Далее, Telegram будет передавать нашей функции от бота различные сообщения: бот может находиться в канале и получать статусные сообщения о входах\выходах пользователей с\из каналов, реагировать на нажатие кнопок с определяемой вами клавиатуры и т.д. Давайте явно обезопасим себя от того, что не будем отвечать на все сообщения:
if (typeof message.chat !== "undefined") { var chat = message.chat; if (chat.type == "private")
Ну, а далее очень примитивный разбор команды и реакция только на команду /docker в switch блоке.
Публикация логики бота в Google Cloud Functions
Чтобы опубликовать мозг нашего бота в виде доступной для вызова облачной функции (Web-сервиса), нужно скачать все требующиеся нам зависимости:
$ npm install
Опубликовать функцию командой:
$ gcloud beta functions deploy myAwesomeTestBot --stage-bucket=dev-ops-notes-cloud_functions --trigger-http
В выводе команды увидеть строки:
httpsTrigger: url: https://us-central1-dev-ops-notes-ru.cloudfunctions.net/myAwesomeTestBot
Из которых нам нужно запомнить URL, по которому можно обращаться к нашей функции. И сообщить Telegram о том, что все сообщения для бота необходимо передавать на обработку ей (короче, установить Web-hook):
$ curl -XPOST https://api.telegram.org/bot362883343:AAHEUJIhx7Gc5Qp240uyrIgrZd8wqLtoxA0/setWebhook\?url\=https://us-central1-dev-ops-notes-ru.cloudfunctions.net/myAwesomeTestBot "ok":true,"result":true,"description":"Webhook was set"
В данной команде используется ключ доступа\идентификатор нашего бота и URL нашей облачной функции. Все, теперь у вас есть ваш первый персональный Telegram бот, развивать который дальше – одно удовольствие. Он может делать для вас абсолютно все что угодно!
Тестируем Telegram бота
Находим бота в списке пользователей Telegram, нажимаем /start. Получаем приветствие. Жмем или пишем /docker и получаем список статей из RSS ленты.
Вот так вот очень просто пишется бот для Telegram. Далее будут разобраны чуть более сложные вопросы.
Дополнительные комментарии
Написанный нами бот совсем не интеллектуален, но надо же было с чего-то начать. Следующим вполне очевидным вопросом будет “А как реализовать диалог?”. Для не сильно сложных сценариев есть два подхода:
Необходимо добавить к вашему сервису БД, в которую сохранять получаемые сообщения, отслеживать сообщения по chat.id и from.id для принятия решения в логике вашей программы.
Использовать inline клавиатуру, в процессе “диалога”
Для более сложных сценариев, например, с использованием машинного обучения большого количества сторонних сервисов лучше всего использовать Node-Red, пример использования в Облаке IBM.
Еще один нюанс: как только логики станет больше, писать все в одном файле будет не приятно и сложно. Как написать Telegram бота с использованием БД и более того нормально структурируя код, отлично написано в парочке статей (кстати, очень свежих):
Bot Dev: Write a stateful Telegram bot – Part 1
Bot Dev: Write a stateful Telegram bot – Part 2
Заключение
В этой статье мы с вами буквально за 15 минут сделали своего собственного Telegram бота. Он приветствует нас и отвечает на команду. Решение как обычно облачное и полностью масштабируемое. Оно проглотит любое количество сообщений, которое необходимо будет переваривать, чтобы обслуживать работу вашего online комьюнити, отдела продаж, автоматизацию и вообще все, что угодно.
Кстати, подписывайтесь на наш Telegram канал, мы начали и туда публиковать наши статьи! Более того, у нашего бота @Dev-Ops-Notes.RU в этом канале уже совсем скоро можно будет в любое время попросить скидку на обучение на Udemy на любой интересующий вас курс! Оставайтесь с нами и следите за нашими новостями!
0 notes