ProHoster > Blog > Administrácia > Písanie telegramového robota v R (časť 1): Vytvorenie robota a jeho použitie na odosielanie správ v telegrame
Písanie telegramového robota v R (časť 1): Vytvorenie robota a jeho použitie na odosielanie správ v telegrame
Publikum telegramu rastie exponenciálne každý deň, čo je uľahčené pohodlím messengeru, prítomnosťou kanálov, chatov a samozrejme schopnosťou vytvárať roboty.
Roboty možno použiť na úplne iné účely, od automatizácie komunikácie so zákazníkmi až po správu vašich vlastných úloh.
V podstate môžete použiť telegram na vykonávanie akýchkoľvek operácií prostredníctvom robota: odosielanie alebo vyžiadanie údajov, spúšťanie úloh na serveri, zhromažďovanie informácií do databázy, odosielanie e-mailov atď.
Plánujem napísať sériu článkov o tom, ako s tým pracovať API telegramového robotaa píšte roboty podľa vašich potrieb.
V tomto prvom článku zistíme, ako vytvoriť telegramového robota a použiť ho na odosielanie upozornení v telegrame.
V dôsledku toho budeme mať robota, ktorý bude kontrolovať stav posledného vykonania všetkých úloh v Plánovači úloh systému Windows a v prípade zlyhania niektorej z nich vám pošle upozornenia.
Účelom tejto série článkov však nie je naučiť vás, ako napísať robota pre konkrétnu, úzku úlohu, ale vo všeobecnosti vám predstaviť syntax balíka telegram.bota príklady kódu, pomocou ktorých môžete písať roboty na riešenie vašich vlastných problémov.
Obsah
Ak máte záujem o analýzu údajov, mohla by vás zaujímať moja telegram и youtube kanálov. Väčšina obsahu je venovaná jazyku R.
Najprv musíme vytvoriť robota. To sa vykonáva pomocou špeciálneho robota Obaja Otec, ísť do odkaz a napíšte robotovi /start.
Potom dostanete správu so zoznamom príkazov:
Správa od BotFathera
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).
You can control me by sending these commands:
/newbot - create a new bot
/mybots - edit your bots [beta]
Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot
Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups
Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game
Ak chcete vytvoriť nového robota, odošlite príkaz /newbot.
BotFather vás požiada o zadanie mena a prihlásenia robota.
BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Alexey Seleznev, [25.07.20 09:40]
My Test Bot
BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_bot
Môžete zadať ľubovoľné meno, ale prihlásenie musí končiť na bot.
Ak ste urobili všetko správne, dostanete nasledujúcu správu:
Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz
For a description of the Bot API, see this page: https://core.telegram.org/bots/api
Ďalej budete potrebovať prijatý token API, v mojom príklade to je 123456789:abcdefghijklmnopqrstuvwxyz.
V tomto kroku sú dokončené prípravné práce na vytvorenie robota.
Inštalácia balíka na prácu s telegramovým robotom v R
Predpokladám, že už máte nainštalovaný jazyk R a vývojové prostredie RStudio. Ak to tak nie je, môžete sa pozrieť na toto videonávod ako ich nainštalovať.
Na prácu s Telegram Bot API použijeme balík R telegram.bot.
Inštalácia balíkov v R sa vykonáva pomocou funkcie install.packages(), takže na inštaláciu balíka, ktorý potrebujeme, použite príkaz install.packages("telegram.bot").
Viac o inštalácii rôznych balíkov sa môžete dozvedieť z toto video.
Po nainštalovaní balíka ho musíte pripojiť:
library(telegram.bot)
Odosielanie správ z R do telegramu
Robot, ktorý ste vytvorili, nájdete v telegrame pomocou prihlasovacieho mena zadaného pri vytváraní, v mojom prípade je to tak @my_test_bot.
Pošlite robotovi akúkoľvek správu, napríklad „Ahoj robot“. V súčasnosti to potrebujeme, aby sme získali ID vášho rozhovoru s robotom.
Teraz napíšeme nasledujúci kód v R.
library(telegram.bot)
# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Запрашиваем информацию о боте
print(bot$getMe())
# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()
# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()
Najprv vytvoríme inštanciu nášho robota s funkciou Bot(), predtým prijatý token do nej musí byť odovzdaný ako argument.
Ukladanie tokenu v kóde sa nepovažuje za najlepší postup, takže ho môžete uložiť do premennej prostredia a prečítať si ho z nej. Štandardne v balíku telegram.bot Bola implementovaná podpora pre premenné prostredia s nasledujúcimi názvami: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Namiesto ИМЯ_ВАШЕГО_БОТА nahraďte meno, ktoré ste zadali pri vytváraní, v mojom prípade to bude premenná R_TELEGRAM_BOT_My Test Bot.
Existuje niekoľko spôsobov, ako vytvoriť premennú prostredia, poviem vám o najuniverzálnejšom a najuniverzálnejšom. Vytvorte vo svojom domovskom adresári (nájdete ho pomocou príkazu path.expand("~")) textový súbor s názvom .Renviron. Môžete to urobiť aj pomocou príkazu file.edit(path.expand(file.path("~", ".Renviron"))).
Ďalej môžete použiť token uložený v premennej prostredia pomocou funkcie bot_token(), t.j. Páči sa ti to:
bot <- Bot(token = bot_token("My Test Bot"))
metóda getUpdates()nám umožňuje získať aktualizácie botov, t.j. správy, ktoré mu boli zaslané. Metóda from_chat_id(), vám umožňuje získať ID chatu, z ktorého bola správa odoslaná. Toto ID potrebujeme na odosielanie správ od robota.
Okrem chat id z objektu získaného metódou getUpdates() získate aj ďalšie užitočné informácie. Napríklad informácie o používateľovi, ktorý správu odoslal.
Takže v tejto fáze už máme všetko, čo potrebujeme na odoslanie správy od robota do telegramu. Použime metódu sendMessage(), do ktorého musíte zadať ID rozhovoru, text správy a typ označenia textu správy. Typ označenia môže byť Markdown alebo HTML a nastavuje sa argumentom parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)
Základy formátovania Markdown:
Tučné písmo je zvýraznené *:
príklad: *жирный шритф*
výsledok: tučné písmo
Kurzíva je označená podčiarkovníkom:
príklad: _курсив_
výsledok: kurzíva
Jednopriestorové písmo, ktoré sa zvyčajne používa na zvýraznenie programového kódu, sa špecifikuje pomocou apostrofov - `:
príklad: `jednopriestorové písmo`
výsledok: моноширинный шрифт
Základy formátovania značiek HTML:
V HTML zalomíte časť textu, ktorú je potrebné zvýrazniť, do značiek, napr <тег>текст</тег>.
<tag> – otváracia značka
- uzatvárací štítok
Značky HTML
<b> - tučné písmo
príklad: <b>жирный шрифт</b>
výsledok tučné písmo
<i> - kurzíva
príklad: <i>курсив</i>
výsledok: kurzíva
— моноширинный шрифт
príklad: моноширинный шрифт
výsledok: моноширинный шрифт
Okrem textu môžete posielať aj ďalší obsah pomocou špeciálnych metód:
Tie. napríklad pomocou metódy sendPhoto() môžete odoslať graf, ktorý ste vytvorili pomocou balíka, uložený ako obrázok ggplot2.
Kontrola Plánovača úloh systému Windows a odosielanie upozornení na úlohy, ktoré sa nenormálne skončili
Ak chcete pracovať s Plánovačom úloh systému Windows, musíte si balík nainštalovať taskscheduleRa pre pohodlnú prácu s dátami si balík nainštalujte dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)
Ďalej pomocou funkcie taskscheduler_ls() požadujeme informácie o úlohách od nášho plánovača. Pomocou funkcie filter() z balíka dplyr Zo zoznamu úloh odstránime tie, ktoré boli úspešne dokončené a majú stav posledného výsledku 0, a tie, ktoré neboli nikdy spustené a majú stav 267011, zakázané úlohy a úlohy, ktoré sú momentálne spustené.
V objekte task Teraz máme zoznam úloh, ktoré zlyhali, musíme tento zoznam odoslať do telegramu.
Ak sa pozrieme na každý príkaz podrobnejšie, potom:
filter() — filtruje zoznam úloh podľa vyššie opísaných podmienok
select() — v tabuľke ponechá len jedno pole s názvom úloh
unique() - odstraňuje duplicitné mená
unlist() — prevedie vybratý stĺpec tabuľky na vektor
paste0() — spojí názvy úloh do jedného riadku a ako oddeľovač vloží posun riadku, t.j. n.
Zostáva nám už len poslať tento výsledok telegramom.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
Takže kód bota momentálne vyzerá takto:
Kód robota na kontrolu úlohy
# Подключение пакета
library(telegram.bot)
library(taskscheduleR)
library(dplyr)
# инициализируем бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# идентификатор чата
chat_id <- 123456789
# запрашиваем список задач
task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")
# если есть проблемные задачи отправляем сообщение
if ( task != "" ) {
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
}
Pri použití vyššie uvedeného príkladu do kódu nahraďte svoj token bota a svoje ID chatu.
Môžete pridať podmienky na filtrovanie úloh, napríklad kontrolovať iba tie úlohy, ktoré ste vytvorili, okrem systémových.
Môžete tiež vložiť rôzne nastavenia do samostatného konfiguračného súboru a uložiť doň ID chatu a token. Konfiguráciu si môžete prečítať napríklad pomocou balíka configr.
Príklad ini konfigurácie
[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
Proces nastavenia spúšťania skriptov podľa plánu je podrobnejšie popísaný v tomto dokumente článok. Tu popíšem iba kroky, ktoré je potrebné na to dodržať. Ak vám niektorý z krokov nie je jasný, pozrite si článok, na ktorý som uviedol odkaz.
Predpokladajme, že sme kód bota uložili do súboru check_bot.R. Ak chcete naplánovať pravidelné spúšťanie tohto súboru, postupujte takto:
Do systémovej premennej Path napíšte cestu k priečinku, v ktorom je nainštalovaný R, v systéme Windows bude cesta vyzerať takto: C:Program FilesRR-4.0.2bin.
Vytvorte spustiteľný bat súbor iba s jedným riadkom R CMD BATCH C:rscriptscheck_botcheck_bot.R. Vymeňte C:rscriptscheck_botcheck_bot.R na úplnú cestu k vášmu súboru R.
Potom pomocou Plánovača úloh systému Windows nastavte plán spúšťania, napríklad každú pol hodinu.
Záver
V tomto článku sme prišli na to, ako vytvoriť robota a použiť ho na odosielanie rôznych upozornení v telegrame.
Opísal som úlohu sledovania Plánovača úloh systému Windows, ale materiál v tomto článku môžete použiť na odosielanie akýchkoľvek upozornení, od predpovede počasia až po kurzy akcií na burze, pretože R vám umožňuje pripojiť sa k obrovskému množstvu zdrojov údajov.
V ďalšom článku prídeme na to, ako do bota pridať príkazy a klávesnicu, aby vedel nielen posielať upozornenia, ale aj vykonávať zložitejšie akcie.