La comunità di Telegram cresce ogni giorno in modo esponenziale, facilitata dalla comodità del messaggero, dalla presenza di canali, chat e, naturalmente, dalla possibilità di creare bot.
I bot possono essere utilizzati per scopi molto diversi, dall'automazione della comunicazione con i vostri clienti alla gestione delle vostre stesse attività.
In sostanza, attraverso un bot è possibile eseguire qualsiasi operazione utilizzando Telegram: inviare o richiedere dati, avviare attività sul server, raccogliere informazioni in un database, inviare email e così via.
Ho intenzione di scrivere una serie di articoli su come lavorare con , e scrivere bot secondo le proprie necessità.

In questo primo articolo vedremo come creare un bot Telegram e inviare notifiche tramite esso.
Alla fine, avremo un bot che controllerà lo stato dell'ultimo completamento di tutte le attività nel pianificatore di attività di Windows e vi invierà notifiche nel caso alcune di esse si siano concluse con errori.
Ma l'obiettivo di questa serie di articoli non è solo insegnarvi a scrivere un bot per un compito specifico, ma farvi conoscere il pacchetto telegram.bot, e fornire esempi di codice che vi permetteranno di scrivere bot per risolvere le vostre esigenze.
Contenuto
Se sei interessato all'analisi dei dati, potresti trovare interessanti i miei e canali. Gran parte del contenuto è dedicato al linguaggio R.
Creazione di un bot Telegram
Per iniziare, dobbiamo creare un bot. Questo si fa tramite un bot speciale BotFather, andiamo su e scriviamo al bot /start.
Dopo di che riceverete un messaggio con l'elenco dei comandi:
Messaggio da BotFather
Posso aiutarti a creare e gestire i bot di Telegram. Se sei nuovo nell'API dei bot, consulta il manuale (https://core.telegram.org/bots).
Puoi controllarmi inviando questi comandi:
/newbot - crea un nuovo bot
/mybots - modifica i tuoi bot [beta]
Modifica Bot
/setname - cambia il nome di un bot
/setdescription - cambia la descrizione del bot
/setabouttext - cambia le informazioni sul bot
/setuserpic - cambia la foto del profilo del bot
/setcommands - cambia l'elenco dei comandi
/deletebot - elimina un bot
Impostazioni Bot
/token - genera un token di autorizzazione
/revoke - revoca il token di accesso del bot
/setinline - attiva/disattiva la modalità inline (https://core.telegram.org/bots/inline)
/setinlinegeo - attiva/disattiva le richieste di posizione inline (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - cambia le impostazioni del feedback inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - il tuo bot può essere aggiunto ai gruppi?
/setprivacy - attiva/disattiva la modalità privacy (https://core.telegram.org/bots#privacy-mode) nei gruppi
Giochi
/mygames - modifica i tuoi giochi (https://core.telegram.org/bots/games) [beta]
/newgame - crea un nuovo gioco (https://core.telegram.org/bots/games)
/listgames - ottieni un elenco dei tuoi giochi
/editgame - modifica un gioco
/deletegame - elimina un gioco esistentePer creare un nuovo bot, invia il comando /newbot.
BotFather ti chiederà di inserire il nome e il login del bot.
BotFather, [25.07.20 09:39]
Va bene, un nuovo bot. Come lo chiameremo? Scegli un nome per il tuo bot.
Alexey Seleznev, [25.07.20 09:40]
Il mio Bot di Test
BotFather, [25.07.20 09:40]
Bene. Ora scegliamo un nome utente per il tuo bot. Deve finire con `bot`. Ad esempio: TetrisBot o tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botPuoi inserire un nome a tua scelta, mentre il login deve finire con bot.
Se hai fatto tutto correttamente, riceverai il seguente messaggio:
Fatto! Congratulazioni per il tuo nuovo bot. Lo troverai su t.me/my_test_bot. Puoi ora aggiungere una descrizione, una sezione di informazioni e un'immagine del profilo per il tuo bot. Consulta /help per un elenco di comandi. A proposito, quando hai finito di creare il tuo fantastico bot, contatta il nostro supporto Bot se desideri un nome utente migliore per esso. Assicurati solo che il bot sia completamente operativo prima di farlo.
Usa questo token per accedere all'API HTTP:
123456789:abcdefghijklmnopqrstuvwxyz
Per una descrizione dell'API dei bot, consulta questa pagina: https://core.telegram.org/bots/apiSuccessivamente avrai bisogno del token API ricevuto, nel mio esempio è 123456789:abcdefghijklmnopqrstuvwxyz.
A questo punto, i lavori preliminari per la creazione del bot sono completati.
Installazione del pacchetto per lavorare con i bot Telegram in R
Presumo che tu abbia già installato il linguaggio R e l'ambiente di sviluppo RStudio. Se non è così, puoi guardare questo su come installarli.
Per lavorare con l'API dei bot di Telegram useremo il pacchetto R .
L'installazione dei pacchetti in R avviene tramite la funzione install.packages(), quindi per installare il pacchetto di cui abbiamo bisogno, usa il comando install.packages("telegram.bot").
Per maggiori dettagli sull'installazione di vari pacchetti, puoi consultare .
Dopo aver installato il pacchetto, è necessario caricarlo:
library(telegram.bot)Invio di messaggi da R a Telegram
Il bot che hai creato può essere trovato su Telegram con il login impostato al momento della creazione, nel mio caso è @my_test_bot.
Invia al bot qualsiasi messaggio, ad esempio "Ciao bot". Per il momento ci serve per ottenere l'id della tua chat con il bot.
Ora in R scriviamo il seguente codice.
library(telegram.bot)
# creiamo un'istanza del bot
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Richiediamo informazioni sul bot
print(bot$getMe())
# Otteniamo aggiornamenti dal bot, cioè l'elenco dei messaggi inviati al bot
updates <- bot$getUpdates()
# Richiediamo l'identificatore della chat
# Nota: prima di richiedere aggiornamenti, devi inviare un messaggio al bot
chat_id <- updates[[1L]]$from_chat_id()Inizialmente creiamo un'istanza del nostro bot con la funzione Bot(), come argomento dobbiamo passare il token ottenuto in precedenza.
Conservare il token nel codice non è considerata una buona pratica, quindi puoi memorizzarlo in una variabile d'ambiente e leggerlo da lì. Di default, il pacchetto telegram.bot supporta variabili d'ambiente del seguente nome: R_TELEGRAM_BOT_NOME_DEL_TUO_BOT. Invece di NOME_DEL_TUO_BOT inserisci il nome che hai dato durante la creazione, nel mio caso verrà la variabile R_TELEGRAM_BOT_My Test Bot.
Puoi creare una variabile d'ambiente in diversi modi, ti racconterò il più universale e multipiattaforma. Crea nella tua directory home (puoi scoprirla usando il comando path.expand("~")) un file di testo con il nome .Renviron. Puoi fare ciò anche usando il comando file.edit(path.expand(file.path("~", ".Renviron"))).
E aggiungi in esso la seguente riga.
R_TELEGRAM_BOT_NOME_DEL_TUO_BOT=123456789:abcdefghijklmnopqrstuvwxyzDopodiché puoi utilizzare il token salvato nella variabile d'ambiente con la funzione bot_token(), ad esempio in questo modo:
bot <- Bot(token = bot_token("My Test Bot"))Sanitizer.replaceElementWithChildren() getUpdates()ci consente di ottenere aggiornamenti dal bot, cioè messaggi che gli sono stati inviati. Il metodo from_chat_id(), permette di ottenere l'identificatore della chat dalla quale è stato inviato il messaggio. Questo identificatore ci serve per inviare messaggi dal bot.
Oltre all'id della chat, dall'oggetto ottenuto con il metodo getUpdates() ottieni anche alcune altre informazioni utili. Ad esempio, informazioni sull'utente che ha inviato il messaggio.
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"Quindi, a questo punto abbiamo già tutto il necessario per inviare un messaggio dal bot su Telegram. Utilizziamo il metodo sendMessage(), nel quale è necessario trasmettere l'identificatore della chat, il testo del messaggio e il tipo di formattazione del testo del messaggio. Il tipo di formattazione può essere Markdown o HTML e viene impostato mediante un argomento parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Fondamenti della formattazione Markdown:
- Il grassetto è evidenziato con l'asterisco *:
- esempio:
*grassetto* - risultato: grassetto
- esempio:
- Il corsivo è impostato da un sottolineamento:
- esempio:
_corsivo_ - risultato: corsivo
- esempio:
- Il carattere monospaziato, che di solito viene utilizzato per evidenziare il codice di programmazione, è impostato mediante apici — `:
- esempio: `carattere monospaziato`
- risultato:
carattere monospaziato
Fondamenti della formattazione HTML:
In HTML racchiudi parte del testo che deve essere evidenziato nei tag, ad esempio testo.
- — tag d'apertura
- — tag di chiusura
Tag di formattazione HTML
<b>— grassetto- esempio:
<b>grassetto</b> - il risultato grassetto
- esempio:
— corsivo- esempio:
corsivo - risultato: corsivo
- esempio:
— carattere monospaziato- esempio:
carattere monospaziato - risultato:
carattere monospaziato
- esempio:
Oltre al testo, puoi inviare anche altri contenuti utilizzando metodi speciali:
# Отправить изображение
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"
)Cioè, ad esempio, utilizzando il metodo sendPhoto() puoi inviare un grafico salvato come immagine, che hai creato utilizzando il pacchetto ggplot2.
Controllo dell'Utilizzo del Piano dei Compiti di Windows e invio di una notifica dei compiti che sono stati completati in modo anomalo
Per lavorare con il pianificatore di attività di Windows devi installare il pacchetto taskscheduleR, e per facilitare il lavoro con i dati installeremo il pacchetto dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Quindi, utilizzando la funzione taskscheduler_ls() richiediamo informazioni sui compiti dal nostro pianificatore. Con la funzione filter() dal pacchetto dplyr eliminiamo dall'elenco dei compiti quelli che sono stati completati con successo e hanno uno stato dell'ultimo risultato 0, quelli che non sono mai stati eseguiti e hanno lo stato 267011, compiti disattivati e compiti che attualmente sono in esecuzione.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")Nell'oggetto task ora abbiamo un elenco di compiti, il cui lavoro ha avuto esito negativo, questo elenco deve essere inviato a Telegram.
Se esaminiamo ogni comando più in dettaglio, allora:
filter()— filtra l'elenco dei compiti, secondo le condizioni descritte sopraselect()— mantiene nell'elenco solo un campo con il nome dei compitiunique()— rimuove i duplicati dei nomiunlist()— converte la colonna selezionata della tabella in un vettorepaste0()— unisce i nomi dei compiti in una sola stringa, utilizzando come delimitatore il carattere di nuova riga, cioè.n.
Tutto ciò che ci resta è inviare questo risultato su Telegram.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Quindi, al momento, il codice del bot appare così:
Codice del bot per il controllo delle attività
# Подключение пакета
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"
)
}Quando si utilizza l'esempio sopra, sostituite nel codice il token del vostro bot e il vostro ID chat.
Potete aggiungere condizioni di filtro per le attività, ad esempio controllando solo quelle create da voi, escludendo quelle di sistema.
Potete anche estrarre diverse impostazioni in un file di configurazione separato, memorizzando in esso l'ID della chat e il token. Potete leggere il file di configurazione ad esempio usando il pacchetto configr.
Esempio di configurazione ini
[telegram_bot]
;impostazioni del bot telegram e della chat in cui verranno ricevute le notifiche
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Esempio di lettura delle variabili dalla configurazione in R
library(configr)
# lettura della configurazione
config <- read.config('C:/percorso_al_config/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idImpostiamo la pianificazione dell'esecuzione del controllo delle attività
Il processo di impostazione dell'esecuzione degli script secondo una pianificazione è descritto in dettaglio in questo . Qui descriverò solo i passi necessari da seguire. Se qualche passo non vi è chiaro, fate riferimento all'articolo al quale ho fornito il link.
Supponiamo di aver salvato il codice del nostro bot nel file check_bot.R. Per pianificare l'esecuzione regolare di questo file, eseguite i seguenti passi:
- Aggiungete alla variabile di sistema Path il percorso della cartella in cui è installato R, in Windows il percorso sarà approssimativamente questo:
C:Program FilesRR-4.0.2bin. - Create un file bat eseguibile, che contenga solo una riga
R CMD BATCH C:rscriptscheck_botcheck_bot.R. SostituisciC:rscriptscheck_botcheck_bot.Ral percorso completo del vostro file R. - Successivamente, utilizzate il pianificatore di attività di Windows per impostare la pianificazione dell'esecuzione, ad esempio ogni mezz'ora.
Conclusione
In questo articolo abbiamo esaminato come creare un bot e inviare notifiche diverse tramite telegram.
Ho descritto il compito di monitorare il pianificatore di attività di Windows, ma potete usare il materiale di questo articolo per inviare qualsiasi notifica, dalle previsioni meteo ai prezzi delle azioni in borsa, poiché R consente di collegarsi a un enorme numero di fonti di dati.
Nell'articolo successivo esploreremo come aggiungere comandi e una tastiera al bot, affinché possa non solo inviare notifiche, ma anche eseguire azioni più complesse.
Fonte: habr.com
