Publikum Telegram roste každý den geometrickou řadou, což usnadňuje pohodlí messengeru, přítomnost kanálů, chatů a samozřejmě možnost vytvářet boty.
Boti mohou být používáni k nejrůznějším účelům, od automatizace komunikace s vašimi klienty až po správu vlastních úkolů.
V podstatě lze prostřednictvím bota pomocí Telegramu provádět jakékoli operace: odesílat nebo dotazovat se na data, spouštět úkoly na serveru, shromažďovat informace do databáze, posílat e-maily a tak dále.
Plánuji napsat sérii článků o tom, jak pracovat s , a vytvářet boty podle svých potřeb.

V tomto prvním článku si ukážeme, jak vytvořit Telegram bota a posílat pomocí něj oznámení na Telegram.
Výsledkem bude bot, který zkontroluje stav posledního vykonání všech úkolů v plánovači úloh Windows a pošle vám oznámení, pokud nějaké selhaly.
Ale cílem této série článků není naučit vás psát bota pro konkrétní úzký úkol, ale celkově vás seznámit se syntaxí balíčku telegram.bot, a příklady kódu, pomocí kterých si budete moci psát boty pro řešení vlastních úkolů.
Obsah
Pokud se zajímáte o analýzu dat, možná vás zaujmou mé a kanály. Většina obsahu je věnována jazyku R.
Vytvoření Telegram bota
Nejprve musíme vytvořit bota. To se provádí pomocí speciálního bota BotFather, přecházíme na a napíšeme botovi /start.
Poté obdržíte zprávu se seznamem příkazů:
Zpráva od BotFather
Mohu vám pomoci vytvořit a spravovat Telegram boty. Pokud jste noví ve Bot API, prosím, podívejte se na manuál (https://core.telegram.org/bots).
Můžete mě ovládat pomocí těchto příkazů:
/newbot - vytvořit nového bota
/mybots - upravit své boty [beta]
Upravit boty
/setname - změnit název bota
/setdescription - změnit popis bota
/setabouttext - změnit informace o botovi
/setuserpic - změnit profilovou fotografii bota
/setcommands - změnit seznam příkazů
/deletebot - smazat bota
Nastavení bota
/token - vygenerovat autorizační token
/revoke - odvolat token pro přístup bota
/setinline - přepnout inline režim (https://core.telegram.org/bots/inline)
/setinlinegeo - přepnout lokace inline požadavků (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - změnit nastavení inline zpětné vazby (https://core.telegram.org/bots/inline#collecting-feedback)
/setjoingroups - může být váš bot přidán do skupin?
/setprivacy - přepnout režim ochrany soukromí (https://core.telegram.org/bots#privacy-mode) ve skupinách
Hry
/mygames - upravit své hry (https://core.telegram.org/bots/games) [beta]
/newgame - vytvořit novou hru (https://core.telegram.org/bots/games)
/listgames - získat seznam svých her
/editgame - upravit hru
/deletegame - smazat existující hruPro vytvoření nového bota odešlete příkaz /newbot.
BotFather vás požádá, abyste zadali jméno a uživatelské jméno bota.
BotFather, [25.07.20 09:39]
Dobře, nový bot. Jak ho budeme nazývat? Prosím, vyberte jméno pro svého bota.
Alexey Seleznev, [25.07.20 09:40]
Můj Test Bot
BotFather, [25.07.20 09:40]
Dobře. Teď vybereme uživatelské jméno pro vašeho bota. Musí končit na `bot`. Třeba TetrisBot nebo tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botJméno můžete zadat libovolně, ale uživatelské jméno musí končit na bot.
Pokud jste všechno udělali správně, obdržíte následující zprávu:
Hotovo! Gratuluji k vašemu novému botu. Najdete ho na t.me/my_test_bot. Nyní můžete přidat popis, sekci o bota a profilový obrázek, viz /help pro seznam příkazů. Mimochodem, když skončíte s vytvářením svého skvělého bota, kontaktujte naši podporu bota, pokud chcete lepší uživatelské jméno. Ujistěte se, že je bot plně funkční, než to uděláte.
Použijte tento token pro přístup k HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz
O popisu Bot API si můžete přečíst na této stránce: https://core.telegram.org/bots/apiDále budete potřebovat získaný API token, v mém případě je to 123456789:abcdefghijklmnopqrstuvwxyz.
Na tomto kroku jsou přípravné práce na vytvoření bota dokončeny.
Instalace balíčku pro práci s Telegram botem na R
Předpokládám, že máte již nainstalovaný jazyk R a vývojové prostředí RStudio. Pokud ne, můžete se podívat na tento o tom, jak je nainstalovat.
Pro práci s Telegram Bot API budeme používat R balíček .
Instalace balíčků v R se provádí pomocí funkce install.packages(), proto pro instalaci potřebného balíčku použijte příkaz install.packages("telegram.bot").
Podrobněji se o instalaci různých balíčků můžete dozvědět z .
Po instalaci balíčku je třeba ho připojit:
library(telegram.bot)Odesílání zpráv z R do Telegramu
Vašeho vytvořeného bota můžete najít v Telegramu podle uživatelského jména, které jste při jeho vytvoření zadali, v mém případě je to @my_test_bot.
Pošlete botovi jakoukoli zprávu, například "Ahoj bože". V tuto chvíli to potřebujeme, abychom získali ID vašeho chatu s botem.
Nyní v R napíšeme následující kód.
library(telegram.bot)
# vytváříme instanci bota
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Žádáme o informace o botovi
print(bot$getMe())
# Získáme aktualizace bota, tedy seznam zpráv, které byly zaslány
updates <- bot$getUpdates()
# Žádáme o identifikátor chatu
# Poznámka: Před žádostí o aktualizace musíte botovi poslat zprávu
chat_id <- updates[[1L]]$from_chat_id()Nejdříve vytváříme instanci našeho bota funkcí Bot(), jako argument je potřeba předat dříve získaný token.
Uchovávat token v kódu se považuje za špatnou praxi, proto jej můžete uchovávat v proměnné prostředí a číst jej z ní. Ve výchozím nastavení má balíček telegram.bot implementována podpora proměnných prostředí následujícího názvu: R_TELEGRAM_BOT_JMÉNO_VAŠEHO_BOTA. Místo JMÉNO_VAŠEHO_BOTA dosadíte jméno, které jste zadali při vytváření, v mém případě bude proměnná R_TELEGRAM_BOT_Můj Test Bot.
Vytvořit proměnnou prostředí lze několika způsoby, já vám povím o nejuniverzálnějším a multiplatformním. Vytvořte ve vaší domácí složce (její umístění zjistíte pomocí příkazu path.expand("~")) textový soubor s názvem .Renviron. To lze také provést pomocí příkazu file.edit(path.expand(file.path("~", ".Renviron"))).
A přidejte do něj následující řádek.
R_TELEGRAM_BOT_JMÉNO_VAŠEHO_BOTA=123456789:abcdefghijklmnopqrstuvwxyzDále můžete použít token uložený v proměnné prostředí pomocí funkce bot_token(), tzn. takto:
bot <- Bot(token = bot_token("Můj Test Bot"))Metoda getUpdates()nám umožňuje získat aktualizace bota, tedy zprávy, které mu byly zaslány. Metoda from_chat_id(), umožňuje získat identifikátor chatu, ze kterého byla zpráva odeslána. Tento identifikátor potřebujeme k odeslání zpráv od bota.
Kromě ID chatu z objektu získaného metodou getUpdates() získáte také další užitečné informace. Například informace o uživateli, který zprávu odeslal.
updates[[1L]]$message$from$id
[1] 000000000
$is_bot
[1] FALSE
$first_name
[1] "Alexej"
$last_name
[1] "Selezněv"
$username
[1] "AlexejSelezněv"
$language_code
[1] "ru"Takže v této fázi už máme vše potřebné pro odeslání zprávy od bota na Telegram. Využijeme metod sendMessage(), který je třeba předat identifikátor chatu, text zprávy a typ formátování textu zprávy. Typ formátování může být Markdown nebo HTML a je nastaven argumentem parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Základy formátování Markdown:
- Tučný text se zvýrazňuje pomocí znaku *:
- příklad:
*tučný text* - výsledek: tučný text
- příklad:
- Kurzíva se nastavuje dolním podtržením:
- příklad:
_kurzíva_ - výsledek: kurzíva
- příklad:
- Jednotný font, který se obvykle používá pro zvýraznění kódu, se nastavuje pomocí apostrofů - `:
- příklad: `jednotný font`
- výsledek:
jednotný font
Základy formátování HTML:
V HTML obklopíte část textu, kterou chcete zvýraznit, tagy, příklad text.
- - otevírací tag
- - uzavírací tag
Tagy HTML formátování
<b>— tučný text- příklad:
<b>tučný písmo</b> - výsledek tučný písmo
- příklad:
— kurzíva- příklad:
kurzíva - výsledek: kurzíva
- příklad:
- jednotný font- příklad:
jednotný font - výsledek:
jednotný font
- příklad:
Kromě textu můžete posílat i další obsah pomocí speciálních metod:
# Отправить изображение
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. například pomocí metody sendPhoto() můžete poslat graf, který jste uložili jako obrázek, vytvořený pomocí balíčku ggplot2.
Kontrola plánovače úloh Windows a zasílání upozornění na úlohy, jejichž provádění skončilo chybou
Pro práci s plánovačem úloh Windows musíte nainstalovat balíček taskscheduleR, a pro pohodlnější práci s daty nainstalujeme balíček dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Dále pomocí funkce taskscheduler_ls() dotazujeme informace o úlohách z našeho plánovače. Pomocí funkce filter() z balíčku dplyr odstraňujeme ze seznamu úloh ty, které byly úspěšně provedeny a mají stav posledního výsledku 0, a ty, které ještě nebyly spuštěny a mají stav 267011, vypnuté úlohy a úlohy, které se v současnosti provádějí.
# запрашиваем список задач
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 objektu task máme nyní seznam úloh, jejichž provádění skončilo chybou, tento seznam musíme poslat do Telegramu.
Pokud se na každou příkaz podíváme podrobněji, tak:
filter()— filtruji seznam úloh podle výše uvedených podmínekselect()— ponechává v tabulce pouze jedno pole s názvem úlohunique()— odstraňuje duplicity názvůunlist()— převádí vybraný sloupec tabulky na vektorpaste0()— spojuje názvy úloh do jednoho řetězce a používá jako oddělovač znak nového řádku, tj.n.
Všechno, co nám zůstává, je poslat tento výsledek do Telegramu.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Takže, kód bota aktuálně vypadá takto:
Kód bota pro kontrolu úloh
# Подключение пакета
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"
)
}Při použití výše uvedeného příkladu zadejte do kódu token vašeho bota a váš identifikátor chatu.
Můžete přidávat podmínky pro filtrování úloh, například kontrolováním pouze těch úloh, které jste vytvořili vy, a vyloučením systémových.
Můžete také přesunout různé nastavení do samostatného konfiguračního souboru a uchovávat v něm id chatu a token. Číst konfiguraci lze například pomocí balíčku configr.
Příklad ini konfigurace
[telegram_bot]
;nastavení telegram bota a chatu, do kterého budou přicházet upozornění
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Příklad čtení proměnných z konfigurace v R
library(configr)
# čtení konfigurace
config <- read.config('C:/cesta_k_konfiguraci/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idNastavujeme rozvrh spuštění kontroly úloh
Nejdůkladněji je proces nastavení spuštění skriptů podle rozvrhu popsán v tomto . Zde popíšu pouze kroky, které je třeba provést. Pokud některý krok nerozumíte, obraťte se na článek, na který odkazuji.
Předpokládejme, že jsme uložili kód našeho bota do souboru check_bot.R. Pro naplánování pravidelného spuštění tohoto souboru proveďte následující kroky:
- Napište do systémové proměnné Path cestu k složce, ve které je nainstalováno R, na Windows bude cesta přibližně takováto:
C:Program FilesRR-4.0.2bin. - Vytvořte spustitelný bat soubor, který bude mít pouze jeden řádek
R CMD BATCH C:rscriptscheck_botcheck_bot.R. NahraďteC:rscriptscheck_botcheck_bot.Rúplnou cestou k vašemu R souboru. - Dále nastavte pomocí plánovače úloh Windows rozvrh spuštění, například každých půl hodiny.
Závěr
V tomto článku jsme se podívali na to, jak vytvořit bota a posílat s jeho pomocí různé upozornění na telegram.
Popsal jsem úkol kontroly plánovače úloh Windows, ale můžete použít obsah tohoto článku k odesílání jakýchkoli upozornění, od předpovědi počasí po akciové ceny, protože R vám umožňuje připojit se k obrovskému množství datových zdrojů.
V příštím článku se společně podíváme na to, jak přidat bota příkazy a klávesnici, aby mohl nejen posílat upozornění, ale i vykonávat složitější akce.
Zdroj: habr.com
