Audiența Telegram crește zilnic cu o progresie geometrică, datorită confortului aplicației, disponibilității canalelor, chat-urilor și, desigur, posibilității de a crea boți.
Boții pot fi folosiți în scopuri complet diferite, de la automatizarea comunicării cu clienții dvs. la gestionarea propriilor sarcini.
Practic, printr-un bot, utilizând Telegram, se pot efectua orice operațiuni: trimite sau solicita date, lansa sarcini pe server, colecta informații într-o bază de date, trimite e-mail-uri și așa mai departe.
Intenționez să scriu o serie de articole despre cum să lucrați cu , și să scrieți boți după nevoile dvs.

În acest prim articol, vom învăța cum să creăm un bot Telegram și să trimitem notificări prin intermediul său în Telegram.
Ca rezultat, vom obține un bot care va verifica starea ultimei execuții a tuturor sarcinilor din planificatorul de sarcini Windows, și vă va trimite notificări dacă unele dintre acestea s-au încheiat cu erori.
Dar scopul acestei serii de articole nu este de a vă învăța să scrieți un bot pentru o anumită sarcină restrânsă, ci de a vă familiariza cu sintaxa pachetului telegram.bot, și exemple de cod, care vă vor permite să scrieți boți pentru a rezolva propriile sarcini.
Cuprins
Dacă sunteți interesat de analiza datelor, s-ar putea să vă intereseze canalele mele. și Marea parte a conținutului lor este dedicată limbajului R.
Crearea unui bot Telegram
Pentru început, trebuie să creăm un bot. Acest lucru se face prin intermediul unui bot special BotFather, accesați și scrieți bot-ului /start.
După aceea, veți primi un mesaj cu lista de comenzi:
Mesaj de la BotFather
Te pot ajuta să creezi și să gestionezi boți Telegram. Dacă ești nou în Bot API, te rog să consulți manualul (https://core.telegram.org/bots).
Mă poți controla trimițând aceste comenzi:
/newbot - creează un nou bot
/mybots - editează boții tăi [beta]
Editează Boți
/setname - schimbă numele unui bot
/setdescription - schimbă descrierea botului
/setabouttext - schimbă informațiile despre bot
/setuserpic - schimbă fotografia de profil a botului
/setcommands - schimbă lista de comenzi
/deletebot - șterge un bot
Setările Botului
/token - generează token de autorizare
/revoke - revocă token-ul de acces al botului
/setinline - activează modul inline (https://core.telegram.org/bots/inline)
/setinlinegeo - activează cererile de locație inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - schimbă setările feedback-ului inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - poate botul tău fi adăugat în grupuri?
/setprivacy - activează modul de confidențialitate (https://core.telegram.org/bots#privacy-mode) în grupuri
Jocuri
/mygames - editează jocurile tale (https://core.telegram.org/bots/games) [beta]
/newgame - creează un joc nou (https://core.telegram.org/bots/games)
/listgames - obține o listă a jocurilor tale
/editgame - editează un joc
/deletegame - șterge un joc existentPentru a crea un nou bot, trimite comanda /newbot.
BotFather îți va cere să introduci numele și username-ul botului.
BotFather, [25.07.20 09:39]
Bine, un nou bot. Cum ne vom apela? Te rog să alegi un nume pentru botul tău.
Alexey Seleznev, [25.07.20 09:40]
Botul Meu de Test
BotFather, [25.07.20 09:40]
Bine. Acum să alegem un username pentru botul tău. Trebuie să se termine cu `bot`. De exemplu: TetrisBot sau tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botNumele poți să-l alegi liber, dar username-ul trebuie să se termine cu bot.
Dacă ai făcut totul corect, vei primi următorul mesaj:
Făcut! Felicitări pentru noul tău bot. Îl vei găsi la t.me/my_test_bot. Poți acum adăuga o descriere, o secțiune 'despre' și o poză de profil pentru botul tău, vezi /help pentru o listă de comenzi. Apropo, când ai terminat de creat botul tău awesome, contactează Suportul Bot dacă vrei un username mai bun pentru el. Asigură-te doar că botul este complet funcțional înainte de a face asta.
Folosește acest token pentru a accesa API-ul HTTP:
123456789:abcdefghijklmnopqrstuvwxyz
Pentru o descriere a Bot API, vezi această pagină: https://core.telegram.org/bots/apiÎn continuare, vei avea nevoie de token-ul API obținut, în exemplul meu acesta este 123456789:abcdefghijklmnopqrstuvwxyz.
În această etapă, lucrările pregătitoare pentru crearea botului sunt complet finalizate.
Instalarea pachetului pentru lucrul cu botul Telegram pe R
Presupun că deja ai instalat limbajul R și mediu de dezvoltare RStudio. Dacă nu, poți să vizionezi acest despre cum să le instalezi.
Pentru a lucra cu Telegram Bot API, vom folosi pachetul R .
Instalarea pachetelor în R se face cu funcția install.packages(), așa că pentru a instala pachetul necesar, folosește comanda install.packages("telegram.bot").
Pentru detalii despre instalarea diverselor pachete, poți consulta .
După instalarea pachetului, trebuie să-l conectezi:
library(telegram.bot)Trimiterea mesajelor din R în Telegram
Botul creat de tine poate fi găsit în Telegram folosind username-ul dat la crearea acestuia, în cazul meu acesta este @my_test_bot.
Trimiteți botului orice mesaj, de exemplu, "Bună bot". În prezent, acest lucru este necesar pentru a obține ID-ul acestui chat cu botul.
Acum în R scriem următorul cod.
library(telegram.bot)
# creăm o instanță a botului
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Cerem informații despre bot
print(bot$getMe())
# Obținem actualizările botului, adică lista mesajelor trimise către acesta
updates <- bot$getUpdates()
# Cerem identificatorul chat-ului
# Notă: înainte de a solicita actualizările, trebuie să trimiteți un mesaj botului
chat_id <- updates[[1L]]$from_chat_id()Inițial creăm o instanță a botului nostru cu funcția Bot(), ca argument trebuie să transmitem tokenul obținut anterior.
Păstrarea tokenului în cod nu este considerată o practică bună, așa că îl puteți păstra într-o variabilă de mediu și să-l citiți din aceasta. În mod implicit, pachetul telegram.bot implementați suport pentru variabile de mediu cu următorul nume: R_TELEGRAM_BOT_NUME_BOTULUI_DUMNEAVOASTRĂ. În loc de NUME_BOTULUI_DUMNEAVOASTRĂ introduceți numele pe care l-ați dat la creare, în cazul meu va fi variabila R_TELEGRAM_BOT_My Test Bot.
Puteți crea o variabilă de mediu în mai multe moduri; vă voi prezenta metoda cea mai universală și multiplatformă. Creați în directorul dumneavoastră acasă (puteti afla acest lucru cu ajutorul comenzii path.expand("~")) un fișier text cu numele .Renviron. Acest lucru se poate face, de asemenea, cu ajutorul comenzii file.edit(path.expand(file.path("~", ".Renviron"))).
Și adăugați în el următoarea linie.
R_TELEGRAM_BOT_NUME_BOTULUI_DUMNEAVOASTRĂ=123456789:abcdefghijklmnopqrstuvwxyzApoi puteți utiliza tokenul salvat în variabila de mediu cu ajutorul funcției bot_token(), adică, așa:
bot <- Bot(token = bot_token("My Test Bot"))Metoda getUpdates()ne permite să obținem actualizările botului, adică mesajele care i-au fost trimise. Metoda from_chat_id(), ne permite să obținem identificatorul chat-ului din care a fost trimis mesajul. Acest identificator ne este necesar pentru a trimite mesaje din partea botului.
Pe lângă ID-ul chat-ului din obiectul obținut prin metoda getUpdates() obțineți și alte informații utile. De exemplu, informații despre utilizatorul care a trimis mesajul.
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"Așadar, în acest moment avem tot ceea ce este necesar pentru a trimite un mesaj din partea botului în Telegram. Vom folosi metoda sendMessage(), în care trebuie să transmiteți identificatorul chat-ului, textul mesajului și tipul de format al mesajului. Tipul de format poate fi Markdown sau HTML și este stabilit prin argument. parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Baza formatarea Markdown:
- Textul îngroșat este marcat cu ajutorul semnului *:
- exemplu:
*text îngroșat* - rezultatul: text îngroșat
- exemplu:
- Cursivul se indică printr-o linie de subliniere:
- exemplu:
_cursiv_ - rezultatul: cursiv
- exemplu:
- Font monoespacies, care este de obicei folosit pentru a evidenția codul, se indică cu apostrofi - `:
- exemplu: `font monoespaci`
- rezultatul:
font monoespaci
Baza formatarea HTML:
În HTML, învârți o parte din text pe care vrei să o evidențiezi în tag-uri, exemplu text.
- - tag de deschidere
- - tag de închidere
Tag-uri HTML
<b>— text îngroșat- exemplu:
<b>font îngroșat</b> - rezultatul font îngroșat
- exemplu:
— cursiv- exemplu:
cursiv - rezultatul: cursiv
- exemplu:
- font monoespaci- exemplu:
font monoespaci - rezultatul:
font monoespaci
- exemplu:
Pe lângă text, poți trimite și alte tipuri de conținut folosind metode speciale:
# Отправить изображение
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"
)Adică, de exemplu, prin metoda sendPhoto() poți trimite un grafic salvat ca imagine, pe care l-ai creat folosind pachetul ggplot2.
Verificarea planificatorului de sarcini Windows și trimiterea unei notificări despre sarcinile care s-au încheiat cu eroare
Pentru a lucra cu planificatorul de sarcini Windows, trebuie să instalezi pachetul taskscheduleR, și pentru confortul lucrului cu datele, să instalăm pachetul dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Apoi, folosind funcția taskscheduler_ls() cerem informațiile despre sarcini din planificatorul nostru. Cu ajutorul funcției filter() din pachetul dplyr eliminăm din lista de sarcini acelea care au fost finalizate cu succes și au statusul ultimei rezultate 0, precum și cele care nu au fost niciodată rulate și au statusul 267011, sarcinile dezactivate și sarcinile care se execută în prezent.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")În obiectul task avem acum lista de sarcini ale căror execuții s-au încheiat cu eroare, această listă trebuie trimisă în Telegram.
Dacă luăm fiecare comandă mai în detaliu, atunci:
filter()— filtrează lista de sarcini după condițiile menționate mai susselect()— păstrează în tabel doar un singur câmp cu numele sarcinilorunique()— elimină duplicatele din numele sarcinilorunlist()— transformă coloana selectată a tabelului într-un vectorpaste0()— combină numele sarcinilor într-un singur șir, utilizând ca separator semnul de întoarcere la linie, adică.n.
Tot ce ne rămâne este să trimitem acest rezultat în Telegram.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Așadar, în acest moment, codul botului arată astfel:
Codul botului care verifică sarcinile
# Подключение пакета
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"
)
}Când folosiți exemplul de mai sus, înlocuiți în cod token-ul botului dvs. și identificatorul dvs. de chat.
Puteți adăuga condiții de filtrare a sarcinilor, de exemplu verificând doar sarcinile care au fost create de dvs., excluzând cele sistemice.
De asemenea, puteți muta diverse setări într-un fișier de configurare separat și le puteți stoca acolo, inclusiv id-ul chatului și token-ul. Puteți citi configurația, de exemplu, folosind pachetul configr.
Exemplu de fișier de configurare ini
[telegram_bot]
;setările botului telegram și chatul în care vor veni notificările
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Exemplu de citire a variabilelor din configurație în R
library(configr)
# citirea configurației
config <- read.config('C:/cale_spre_config/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idConfigurăm programul pentru verificarea sarcinilor
Cel mai detaliat proces de configurare a rulării scripturilor la program este descris în această . Aici voi descrie doar pașii pe care trebuie să îi urmați. Dacă vreun pas nu vă este clar, consultați articolul la care am intervenit.
Să presupunem că am salvat codul botului nostru în fișierul check_bot.R. Pentru a planifica rularea regulată a acestui fișier, urmați pașii următori:
- Scrieți în variabila de sistem Path calea către folderul în care este instalat R, în Windows calea va fi aproximativ așa:
C:Program FilesRR-4.0.2bin. - Creează un fișier executabil bat, în care va fi doar un rând
R CMD BATCH C:rscriptscheck_botcheck_bot.R. ÎnlocuițiC:rscriptscheck_botcheck_bot.Rla calea completă a fișierului dvs. R. - Apoi, configurați, folosind planificatorul de sarcini Windows, programul pentru rulare, de exemplu, la fiecare jumătate de oră.
Concluzie
În acest articol, am învățat cum să creăm un bot și să trimitem diverse notificări prin intermediul acestuia în Telegram.
Am descris sarcina de monitorizare a planificatorului de sarcini Windows, dar puteți folosi materialul acestui articol pentru a trimite orice notificări, de la prognoza vremii până la cotațiile acțiunilor pe bursă, deoarece R vă permite să vă conectați la o mulțime de surse de date.
În următorul articol, vom discuta despre cum să adăugăm comenzi și un meniu botului, astfel încât acesta să poată nu doar să trimită notificări, ci și să îndeplinească acțiuni mai complexe.
Sursa: habr.com
