Audiencia telegramu rastie každý deň geometrickou progresiou, čo je spôsobené pohodlnosťou messengeru, existenciou kanálov, chatov a samozrejme schopnosťou vytvárať boty.
Boty môžu byť použité na úplne rôzne účely, od automatizácie komunikácie s vašimi klientmi až po spravovanie vlastných úloh.
V podstate cez bota môžete cez telegram vykonávať akékoľvek operácie: posielať alebo žiadať dáta, spúšťať úlohy na serveri, zbierať informácie do databázy, posielať e-maily a podobne.
Plánujem napísať sériu článkov o tom, ako pracovať s , a písať boty podľa svojich potrieb.

V tomto, prvom článku sa pozrieme na to, ako vytvoriť telegram bota a posielať prostredníctvom neho notifikácie do telegramu.
Výsledkom bude bot, ktorý bude kontrolovať stav posledného vykonania všetkých úloh v plánovači úloh Windows a posielať vám notifikácie, ak sa niektoré skončili chybou.
Cieľom tejto série článkov nie je naučiť vás písať bota na konkrétnu, úzku úlohu, ale celkovo vás oboznámiť so syntaxou balíka telegram.bot, a príkladmi kódu, pomocou ktorých si budete môcť písať boty na riešenie vlastných úloh.
Obsah
Ak vás zaujíma analýza dát, mohli by vás zaujímať moje a kanály. Väčšina obsahu je venovaná jazyku R.
Vytvorenie telegram bota
Na začiatok si musíme vytvoriť bota. To sa robí prostredníctvom špeciálneho bota BotFather, prejdeme na a napíšeme botovi /start.
Po čom obdržíte správu so zoznamom príkazov:
Správa od BotFather
Môžem vám pomôcť vytvoriť a spravovať Telegram boty. Ak ste nováčik v Bot API, pozrite si manuál (https://core.telegram.org/bots).
Ovládať ma môžete posielaním týchto príkazov:
/newbot - vytvoriť nového bota
/mybots - upraviť svojich botov [beta]
Upraviť botov
/setname - zmeniť názov bota
/setdescription - zmeniť popis bota
/setabouttext - zmeniť informácie o bôte
/setuserpic - zmeniť profilovú fotografiu bota
/setcommands - zmeniť zoznam príkazov
/deletebot - odstrániť bota
Nastavenia bota
/token - vygenerovať autorizačný token
/revoke - zrušiť prístupový token bota
/setinline - prepínať režim inline (https://core.telegram.org/bots/inline)
/setinlinegeo - prepínať požiadavky na lokalizáciu inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - zmeniť nastavenia inline spätnej väzby (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - môže byť váš bot pridaný do skupín?
/setprivacy - prepínať režim ochrany osobných údajov (https://core.telegram.org/bots#privacy-mode) v skupinách
Hry
/mygames - upraviť svoje hry (https://core.telegram.org/bots/games) [beta]
/newgame - vytvoriť novú hru (https://core.telegram.org/bots/games)
/listgames - získať zoznam svojich hier
/editgame - upraviť hru
/deletegame - odstrániť existujúcu hruNa vytvorenie nového bota pošlite príkaz /newbot.
BotFather vás požiada, aby ste zadali názov a login bota.
BotFather, [25.07.20 09:39]
Dobre, nový bot. Ako ho nazveme? Prosím, vyberte názov pre váš bot.
Alexey Seleznev, [25.07.20 09:40]
Môj testovací bot
BotFather, [25.07.20 09:40]
Dobre. Teraz si vyberme užívateľské meno pre váš bot. Musí končiť na `bot`. Napríklad: TetrisBot alebo tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botNázov môžete zadať ľubovoľný, ale login musí končiť na bot.
Ak ste všetko urobili správne, dostanete nasledujúcu správu:
Hotovo! Gratulujem k vášmu novému botovi. Nájdete ho na t.me/my_test_bot. Môžete mu teraz pridať popis, sekciu o ňom a profilovú fotku, pozrite sa na /help pre zoznam príkazov. Mimochodom, keď skončíte s vytváraním svojho skvelého bota, kontaktujte našu podporu pre boty, ak chcete lepšie užívateľské meno preň. Uistite sa, že je bot plne funkčný pred tým, než to urobíte.
Použite tento token na prístup k HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz
Pre popis Bot API si pozrite túto stránku: https://core.telegram.org/bots/apiĎalej budete potrebovať získaný API token, v mojom príklade je to 123456789:abcdefghijklmnopqrstuvwxyz.
Na tomto kroku sú prípravné práce na vytvorení bota dokončené.
Inštalácia balíka na prácu s telegram botom v R
Predpokladám, že máte už nainštalovaný jazyk R a vývojové prostredie RStudio. Ak nie, môžete si pozrieť tento o tom, ako ich nainštalovať.
Na prácu s Telegram Bot API budeme používať balík R .
Inštalácia balíkov v R sa uskutočňuje pomocou funkcie install.packages(), takže na nainštalovanie potrebného balíka použite príkaz install.packages("telegram.bot").
Podrobnejšie informácie o inštalácii rôznych balíkov nájdete v .
Po inštalácii balíka ho musíte pripojiť:
library(telegram.bot)Posielanie správ z R do Telegramu
Vytvoreného bota môžete nájsť v Telegrame podľa zadaného logina, v mojom prípade je to @my_test_bot.
Pošlite botovi akúkoľvek správu, napríklad "Ahoj bot". V tejto chvíli to potrebujeme na to, aby sme získali ID vášho chatu s botom.
Teraz v R napíšeme nasledujúci kód.
library(telegram.bot)
# vytvoríme inštanciu bota
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Požiadajte o informácie o botovi
print(bot$getMe())
# Získame aktualizácie bota, t.j. zoznam správ, ktoré mu boli zaslané
updates <- bot$getUpdates()
# Požiadanie o identifikátor chatu
# Poznámka: pred požiadavkou na aktualizácie musíte botovi poslať správu
chat_id <- updates[[1L]]$from_chat_id()Najskôr vytvárame inštanciu nášho bota pomocou funkcie Bot(), kde ako argument musíte odovzdať predtým získaný token.
Uchovávať token v kóde sa považuje za zlú prax, a preto ho môžete uchovávať v premennej prostredia a načítať ho z nej. Predvolene je v balíku telegram.bot implementovaná podpora premennej prostredia nasledujúceho názvu: R_TELEGRAM_BOT_MENO_VAŠEHO_BOTA. Namiesto MENO_VAŠEHO_BOTA doň vložte meno, ktoré ste určili pri vytvorení, v mojom prípade bude premenná R_TELEGRAM_BOT_My Test Bot.
Premennú prostredia môžete vytvoriť niekoľkými spôsobmi, poviem vám o najuniverzálnejšom a multiplatformovom. Vytvorte vo svojej domácej direktórii (zistiť ju môžete pomocou príkazu path.expand("~")) textový súbor s názvom .Renviron. Robiť to môžete aj pomocou príkazu file.edit(path.expand(file.path("~", ".Renviron"))).
A pridajte doň nasledujúci riadok.
R_TELEGRAM_BOT_MENO_VAŠEHO_BOTA=123456789:abcdefghijklmnopqrstuvwxyzĎalej môžete použiť uložený token z premennej prostredia pomocou funkcie bot_token(), tj. takto:
bot <- Bot(token = bot_token("My Test Bot"))Metóda getUpdates()nám umožňuje získať aktualizácie bota, t.j. správy, ktoré mu boli zaslané. Metóda from_chat_id(), umožňuje získať identifikátor chatu, z ktorého bola správa odoslaná. Tento identifikátor potrebujeme na odosielanie správ od bota.
Okrem ID chatu 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ý poslal správu.
updates[[1L]]$message$from$id
[1] 000000000
$is_bot
[1] FALSE
$first_name
[1] "Alexey"
$last_name
[1] "Seleznev"
$username
[1] "AlexeySeleznev"
$language_code
[1] "ru"Takže v tejto fáze máme už všetko potrebné na odoslanie správy od bota na Telegram. Využijeme metódu sendMessage(), ktorý je potrebné preniesť identifikátor chatu, text správy a typ formátovania textu správy. Typ formátovania 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ý text sa vyznačuje pomocou znaku *:
- príklad:
*tučný text* - výsledok: tučný text
- príklad:
- Kurzíva sa nastavuje pomocou podčiarkovníka:
- príklad:
_kurzíva_ - výsledok: kurzíva
- príklad:
- Monospace font, ktorý sa zvyčajne používa na vyznačenie programového kódu, sa nastavuje pomocou apostrofov — `:
- príklad: `monospace font`
- výsledok:
monospace font
Základy formátovania HTML:
V HTML obalíte časť textu, ktorú chcete zvýrazniť, do tagov, príklad text.
- — otvárací tag
- — uzatvárací tag
HTML formátovacie tagy
<b>— tučný text- príklad:
<b>tučný text</b> - výsledok tučný text
- príklad:
— kurzíva- príklad:
kurzíva - výsledok: kurzíva
- príklad:
— monospace font- príklad:
monospace font - výsledok:
monospace font
- príklad:
Okrem textu môžete posielať aj iný obsah pomocou špeciálnych metód:
# Отправить изображение
bot$sendPhoto(chat_id,
photo = "https://telegram.org/img/t_logo.png"
)
# Отправка голосового сообщения
bot$sendAudio(chat_id,
audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3"
)
# Отправить документ
bot$sendDocument(chat_id,
document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf"
)
# Отправить стикер
bot$sendSticker(chat_id,
sticker = "https://www.gstatic.com/webp/gallery/1.webp"
)
# Отправить видео
bot$sendVideo(chat_id,
video = "http://techslides.com/demos/sample-videos/small.mp4"
)
# Отправить gif анимацию
bot$sendAnimation(chat_id,
animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif"
)
# Отправить локацию
bot$sendLocation(chat_id,
latitude = 51.521727,
longitude = -0.117255
)
# Имитация действия в чате
bot$sendChatAction(chat_id,
action = "typing"
)T.j. napríklad pomocou metódy sendPhoto() môžete odoslať graf, ktorý ste vytvorili ako obrázok pomocou balíka ggplot2.
Kontrola plánovača úloh Windows a odosielanie notifikácie o úlohách, ktorých úloha bola ukončená nečakane
Na prácu s plánovačom úloh Windows je potrebné nainštalovať balík taskscheduleR, a pre pohodlnú prácu s dátami nainštalujeme balík dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Potom pomocou funkcie taskscheduler_ls() požiadame o informácie o úlohách z nášho plánovača. Pomocou funkcie filter() z balíka dplyr odstránime zo zoznamu úloh tie, ktoré boli úspešne vykonané a majú posledný stav 0, a tie, ktoré ešte neboli spustené a majú stav 267011, vypnuté úlohy a úlohy, ktoré sa momentálne vykonávajú.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")V objekte task máme teraz zoznam úloh, ktorých vykonanie skončilo chybou, tento zoznam musíme poslať do Telegramu.
Ak sa pozrieme na každú príkaz podrobnejšie, tak:
filter()— filtruje zoznam úloh podľa vyššie uvedených podmienokselect()— ponecháva v tabuľke len jedno pole s názvom úlohunique()— odstraňuje duplicity názvovunlist()— prevádza vybraný stĺpec tabuľky na vektorpaste0()— spojí názvy úloh do jedného reťazca a ako oddeľovač použije znak nového riadka, t.j.n.
Všetko, čo nám zostáva, je odoslať tento výsledok do Telegramu.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Tak, v súčasnosti kód bota vyzerá takto:
Kód bota, ktorý kontroluje ú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 vložte do kódu token svojho bota a svoj identifikátor chatu.
Môžete pridávať podmienky na filtrovanie úloh, napríklad kontrolovaním iba tých úloh, ktoré ste vytvorili vy, a vylúčením systémových.
Takisto môžete preniesť rôzne nastavenia do samostatného konfiguračného súboru, a uložiť do neho id chatu a token. Konfiguráciu môžete čítať, napríklad, pomocou balíka configr.
Príklad ini konfigurácie
[telegram_bot]
;nastavenia telegram bota a chatu, do ktorého budú prichádzať notifikácie
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Príklad čítania premenných z konfigurácie v R
library(configr)
# čítanie konfigurácie
config <- read.config('C:/cesta_k_nastaveniam/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idNastavujeme plánovanie spúšťania kontroly úloh
Najpodrobnejšie je proces nastavenia spúšťania skriptov podľa plánu popísaný v tomto . Tu len popíšem kroky, ktoré je potrebné vykonať. Ak vám niektorý krok nie je jasný, obráťte sa na článok, na ktorý som uviedol odkaz.
Predpokladajme, že sme uložili kód nášho bota do súboru check_bot.R. Aby ste naplánovali pravidelný spúšťanie tohto súboru, vykonajte nasledujúce kroky:
- Zapíšte do systémovej premennej Path cestu k priečinku, v ktorom je nainštalovaný R, v systéme Windows bude cesta približne takáto:
C:Program FilesRR-4.0.2bin. - Vytvorte spustiteľný bat súbor, v ktorom bude len jeden riadok
R CMD BATCH C:rscriptscheck_botcheck_bot.R. NahraďteC:rscriptscheck_botcheck_bot.Rna úplnú cestu k vášmu R súboru. - Ďalej nastavte pomocou plánovača úloh Windows plán spúšťania, napríklad každých pol hodiny.
Záver
V tomto článku sme sa zaoberali tým, ako vytvoriť bota a posielať s jeho pomocou rôzne notifikácie do telegramu.
Popísal som úlohu kontroly plánovača úloh Windows, ale môžete využiť materiál tohto článku na posielanie akýchkoľvek notifikácií, od predpovede počasia po akciové ceny na burze, pretože R vám umožňuje pripojiť sa k množstvu zdrojov dát.
V nasledujúcom článku si podrobne ukážeme, ako pridať bota príkazy a klávesnicu, aby mohol nielen posielať notifikácie, ale aj vykonávať zložitejšie akcie.
Zdroj: habr.com
