Il pubblico di Telegram cresce ogni giorno in modo esponenziale, grazie alla comodità del messenger, alla presenza di canali, chat e, naturalmente, alla possibilità di creare bot.
I bot possono essere utilizzati per vari scopi, dall'automazione della comunicazione con i vostri clienti alla gestione delle vostre attività.
In sostanza, tramite un bot è possibile eseguire qualsiasi operazione utilizzando Telegram: inviare o richiedere dati, avviare attività sul server, raccogliere informazioni in un database, inviare e-mail e così via.
Ho in programma di scrivere una serie di articoli su come lavorare con l' , e sviluppare bot secondo le proprie necessità.

In questo primo articolo, vedremo come creare un bot di Telegram e utilizzare il suo aiuto per inviare notifiche su Telegram.
Il risultato sarà un bot che verifica lo stato dell'ultima esecuzione di tutte le attività nel pianificatore di attività di Windows e ti invia notifiche se alcune di esse sono terminate con errore.
Tuttavia, l'obiettivo di questa serie di articoli non è quello di insegnarti a scrivere un bot per un compito specifico, ma di introdurti alla sintassi del pacchetto. telegram.bot, e con esempi di codice che ti permetteranno di scrivere bot per risolvere le tue esigenze.
Contenuto
Se siete interessati all'analisi dei dati, potrebbero interessarvi i miei e canali. Gran parte del contenuto è dedicato al linguaggio R.
Creazione di un bot Telegram
Per iniziare, dobbiamo creare un bot. Questo avviene tramite un bot speciale BotFather, accedendo a e scrivendo al bot /start.
Dopo di che riceverai un messaggio con l'elenco dei comandi:
Messaggio da BotFather
Posso aiutarti a creare e gestire bot Telegram. Se sei nuovo nel Bot API, ti prego di consultare 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 - modifica 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 il 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 - modifica le impostazioni di feedback inline (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - è possibile aggiungere il tuo bot 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]
D'accordo, 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]
Ottimo. Ora scegliamo un nome utente per il tuo bot. Deve finire con `bot`. Come ad esempio: TetrisBot o tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botPuoi inserire un nome qualsiasi, ma il login deve terminare 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. Ora puoi aggiungere una descrizione, una sezione informativa e un'immagine del profilo per il tuo bot, consulta /help per un elenco dei comandi. A proposito, quando hai finito di creare il tuo fantastico bot, contatta il nostro Supporto Bot se desideri un nome utente migliore. 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 Bot, consulta questa pagina: https://core.telegram.org/bots/apiDopo avrai bisogno del token API ricevuto, nel mio esempio è 123456789:abcdefghijklmnopqrstuvwxyz.
A questo punto, i preparativi per la creazione del bot sono conclusi.
Installazione del pacchetto per lavorare con il 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 di Telegram Bot utilizzeremo il pacchetto R .
L'installazione dei pacchetti in R avviene tramite la funzione install.packages(), quindi per installare il pacchetto necessario utilizza il comando install.packages("telegram.bot").
Per saperne di più sull'installazione di vari pacchetti, puoi guardare questo .
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 nome utente assegnato durante la creazione, nel mio caso è @my_test_bot.
Invia qualsiasi messaggio al bot, ad esempio "Ciao bot". Attualmente, questo serve per ottenere l'id della tua chat con il bot.
Ora scriviamo il seguente codice in R.
library(telegram.bot)
# creiamo un'istanza del bot
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Richiediamo informazioni sul bot
print(bot$getMe())
# Otteniamo gli aggiornamenti del bot, ovvero l'elenco dei messaggi inviati ad esso
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(), e come argomento dobbiamo passare il token ottenuto precedentemente.
Conservare il token nel codice non è considerata una buona pratica, quindi puoi conservarlo in una variabile d'ambiente e leggerlo da lì. Di default, il pacchetto telegram.bot supporta variabili d'ambiente con il seguente nome: R_TELEGRAM_BOT_IL_TUO_NOME_BOT. Al posto di IL_TUO_NOME_BOT sostituisci con il nome che hai dato al momento della creazione, nel mio caso sarà la variabile R_TELEGRAM_BOT_My Test Bot.
È possibile creare una variabile di ambiente in diversi modi; vi racconterò del metodo più universale e multipiattaforma. Create un file di testo con il nome nella vostra home directory (potete scoprire quale sia utilizzando il comando path.expand("~")) chiamato .Renviron. Può essere fatto anche utilizzando il comando file.edit(path.expand(file.path("~", ".Renviron"))).
E aggiungete la seguente riga.
R_TELEGRAM_BOT_IL_NOME_DEL_TUO_BOT=123456789:abcdefghijklmnopqrstuvwxyzDopo di che, potete usare il token salvato nella variabile di ambiente con la funzione bot_token(), cioè in questo modo:
bot <- Bot(token = bot_token("My Test Bot"))Metodo getUpdates()ci permette di ottenere gli aggiornamenti del bot, cioè i messaggi che gli sono stati inviati. Il metodo from_chat_id(), permette di ottenere l'identificativo della chat da cui è stato inviato il messaggio. Questo identificativo è necessario per inviare messaggi dal bot.
Oltre all'id chat dall'oggetto ottenuto tramite il metodo getUpdates() ricevete 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 tutto il necessario per inviare un messaggio da un bot su Telegram. Utilizzeremo il metodo sendMessage(), al quale è necessario passare l'identificativo 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 dall'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 si ottiene con il trattino basso:
- esempio:
_corsivo_ - risultato: corsivo
- esempio:
- Il font monospace, solitamente usato per evidenziare il codice sorgente, si ottiene con gli apici — `:
- esempio: `font monospace`
- risultato:
font monospace
Fondamenti della formattazione HTML:
In HTML racchiudete la parte di testo che volete evidenziare tra i tag, ad esempio testo.
- — tag di apertura
- — tag di chiusura
Tag di formattazione HTML
<b>— grassetto- esempio:
<b>grassetto</b> - risultato grassetto
- esempio:
— corsivo- esempio:
corsivo - risultato: corsivo
- esempio:
— font monospace- esempio:
font monospace - risultato:
font monospace
- esempio:
Oltre al testo, potete 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, tramite il metodo sendPhoto() puoi inviare un grafico salvato come immagine che hai costruito con il pacchetto ggplot2.
Controllo dello scheduler di Windows e invio di una notifica per i task il cui lavoro è terminato in modo imprevisto
Per lavorare con lo scheduler di Windows è necessario installare il pacchetto taskscheduleR, e per facilitare il lavoro con i dati, installiamo il pacchetto dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Successivamente, con la funzione taskscheduler_ls() richiediamo informazioni sui task dal nostro scheduler. Con la funzione filter() del pacchetto dplyr filtriamo dall'elenco dei task quelli che sono stati completati con successo e hanno uno stato di risultato finale 0, quelli che non sono stati avviati neanche una volta e hanno stato 267011, i task disattivati, e quelli che sono attualmente 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")L'oggetto task ora contiene un elenco di task il cui lavoro è terminato con errore, e dobbiamo inviare questo elenco su Telegram.
Se consideriamo ogni comando in dettaglio, allora:
filter()— filtra l'elenco dei task secondo le condizioni descritte sopraselect()— mantiene nella tabella solo un campo con il nome dei taskunique()— rimuove i duplicati dei nomiunlist()— trasforma la colonna selezionata della tabella in un vettorepaste0()— unisce i nomi dei compiti in una sola riga, utilizzando il carattere di nuova linea come separatore, cioè,n.
Tutto ciò che ci resta da fare è 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 controllare i compiti
# Подключение пакета
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"
)
}Usando l'esempio sopra, inserite nel codice il token del vostro bot e il vostro identificativo chat.
Potete aggiungere condizioni di filtraggio dei compiti, ad esempio controllando solo i compiti creati da voi, escludendo quelli di sistema.
Potete anche estrarre diverse impostazioni in un file di configurazione separato, e conservarvi all'interno l'id della chat e il token. È possibile leggere la configurazione ad esempio utilizzando il pacchetto configr.
Esempio di configurazione ini
[telegram_bot]
;impostazioni del bot Telegram e della chat in cui arriveranno le notifiche
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyzEsempio di lettura delle variabili dalla configurazione in R
library(configr)
# lettura della configurazione
config <- read.config('C:/percorso_alla_configurazione/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idImpostiamo il programma per il controllo dei compiti
Il processo per la configurazione dell'esecuzione di script programmati è descritto dettagliatamente in questo . Qui io descriverò solo i passaggi che è necessario seguire. Se uno dei passaggi non ti è chiaro, fai riferimento all'articolo per il quale ho fornito il link.
Supponiamo che abbiamo salvato il codice del nostro bot in un file check_bot.R. Per programmare l'esecuzione regolare di questo file, segui i seguenti passaggi:
- Aggiungi alla variabile di sistema Path il percorso della cartella in cui è installato R; su Windows il percorso sarà circa così:
C:Program FilesRR-4.0.2bin. - Crea un file bat eseguibile contenente soltanto una riga
R CMD BATCH C:rscriptscheck_botcheck_bot.R. SostituisciC:rscriptscheck_botcheck_bot.Ralla piena percorso del tuo file R. - Poi imposta tramite il pianificatore di attività di Windows il programma di esecuzione, ad esempio ogni mezz'ora.
Conclusione
In questo articolo abbiamo esaminato come creare un bot e inviare diverse notifiche su telegram utilizzando esso.
Ho descritto il compito di controllo dello scheduler di Windows, ma puoi utilizzare il materiale di questo articolo per inviare qualsiasi tipo di notifica, dalle previsioni del tempo ai corsi delle azioni in borsa, poiché R ti consente di collegarti a una vasta gamma di fonti di dati.
Nell'articolo successivo, esploreremo come aggiungere comandi e una tastiera al bot, in modo che possa non solo inviare notifiche, ma anche svolgere azioni più complesse.
Fonte: habr.com
