Liczba odbiorców Telegramu rośnie wykładniczo z każdym dniem, ułatwia to wygoda komunikatora, obecność kanałów, czatów i oczywiście możliwość tworzenia botów.
Boty można wykorzystać do zupełnie innych celów, od automatyzacji komunikacji z klientami po zarządzanie własnymi zadaniami.
Zasadniczo możesz używać telegramu do wykonywania dowolnych operacji za pośrednictwem bota: wysyłania lub żądania danych, uruchamiania zadań na serwerze, gromadzenia informacji w bazie danych, wysyłania e-maili i tak dalej.
Planuję napisać serię artykułów o tym, jak pracować z i pisz boty dostosowane do Twoich potrzeb.

W tym pierwszym artykule dowiemy się, jak stworzyć bota telegramu i używać go do wysyłania powiadomień w telegramie.
W rezultacie będziemy mieć bota, który będzie sprawdzał status ostatniego wykonania wszystkich zadań w harmonogramie zadań. Windowsi wysyłać powiadomienia, jeśli którykolwiek z nich zawiedzie.
Jednak celem tej serii artykułów nie jest nauczenie Cię, jak napisać bota do konkretnego, wąskiego zadania, ale ogólne wprowadzenie Cię w składnię pakietu telegram.botoraz przykłady kodu, za pomocą których możesz pisać boty rozwiązujące własne problemy.
Zawartość
Jeśli interesuje Cię analiza danych, być może zainteresuje Cię mój и kanały. Większość treści jest poświęcona językowi R.
Tworzenie bota telegramowego
Najpierw musimy stworzyć bota. Odbywa się to za pomocą specjalnego bota Ojciec Bota, iść do i napisz do bota /start.
Po czym otrzymasz wiadomość z listą poleceń:
Wiadomość od BotFathera
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).
You can control me by sending these commands:
/newbot - create a new bot
/mybots - edit your bots [beta]
Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot
Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups
Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing gameAby utworzyć nowego bota, wyślij polecenie /newbot.
BotFather poprosi Cię o podanie nazwy bota i loginu.
BotFather, [25.07.20 09:39]
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
Alexey Seleznev, [25.07.20 09:40]
My Test Bot
BotFather, [25.07.20 09:40]
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
Alexey Seleznev, [25.07.20 09:40]
@my_test_botMożesz wpisać dowolną nazwę, ale login musi kończyć się na bot.
Jeśli wszystko zrobiłeś poprawnie, otrzymasz następujący komunikat:
Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.
Use this token to access the HTTP API:
123456789:abcdefghijklmnopqrstuvwxyz
For a description of the Bot API, see this page: https://core.telegram.org/bots/apiNastępnie będziesz potrzebować otrzymanego tokenu API, w moim przykładzie tak jest 123456789:abcdefghijklmnopqrstuvwxyz.
Na tym etapie prace przygotowawcze do stworzenia bota są zakończone.
Instalowanie pakietu do pracy z botem telegramowym w R
Zakładam, że masz już zainstalowany język R i środowisko programistyczne RStudio. Jeśli tak nie jest, możesz na to spojrzeć o tym, jak je zainstalować.
Do pracy z API Telegram Bot użyjemy pakietu R .
Instalacja pakietów w R odbywa się za pomocą funkcji install.packages(), więc aby zainstalować potrzebny nam pakiet, użyj polecenia install.packages("telegram.bot").
Więcej informacji na temat instalowania różnych pakietów można znaleźć na stronie .
Po zainstalowaniu pakietu należy go podłączyć:
library(telegram.bot)Wysyłanie wiadomości z R do Telegramu
Utworzonego przez Ciebie bota można znaleźć w Telegramie przy użyciu loginu podanego podczas tworzenia, w moim przypadku tak @my_test_bot.
Wyślij botowi dowolną wiadomość, na przykład „Hej, bocie”. W tej chwili potrzebujemy tego, aby uzyskać identyfikator Twojego czatu z botem.
Teraz napiszemy następujący kod w języku R.
library(telegram.bot)
# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Запрашиваем информацию о боте
print(bot$getMe())
# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()
# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()Na początek tworzymy instancję naszego bota z funkcją Bot(), jako argument należy do niego przekazać wcześniej otrzymany token.
Przechowywanie tokena w kodzie nie jest uważane za najlepszą praktykę, więc można go przechowywać w zmiennej środowiskowej i z niej czytać. Domyślnie w pakiecie telegram.bot Zaimplementowano obsługę zmiennych środowiskowych o następujących nazwach: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА. Zamiast ИМЯ_ВАШЕГО_БОТА zamień nazwę podaną podczas tworzenia, w moim przypadku będzie to zmienna R_TELEGRAM_BOT_My Test Bot.
Istnieje kilka sposobów na utworzenie zmiennej środowiskowej, ja opowiem o najbardziej uniwersalnym i wieloplatformowym. Utwórz w swoim katalogu domowym (możesz go znaleźć za pomocą polecenia path.expand("~")) plik tekstowy z nazwą .Renviron. Można to również zrobić za pomocą polecenia file.edit(path.expand(file.path("~", ".Renviron"))).
I dodaj do niego następujący wiersz.
R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyzNastępnie możesz wykorzystać token zapisany w zmiennej środowiskowej za pomocą funkcji bot_token(), tj. lubię to:
bot <- Bot(token = bot_token("My Test Bot"))metoda getUpdates()pozwala nam uzyskać aktualizacje botów, tj. wiadomości, które do niego wysyłano. metoda from_chat_id(), pozwala uzyskać identyfikator czatu, z którego wysłano wiadomość. Potrzebujemy tego identyfikatora, aby wysyłać wiadomości z bota.
Oprócz identyfikatora czatu z obiektu uzyskanego metodą getUpdates() otrzymasz także inne przydatne informacje. Na przykład informacje o użytkowniku, który wysłał wiadomość.
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"Zatem na tym etapie mamy już wszystko, czego potrzebujemy, aby wysłać wiadomość od bota do Telegramu. Skorzystajmy z metody sendMessage(), do którego musisz przekazać identyfikator czatu, treść wiadomości i typ znacznika tekstu wiadomości. Typ znaczników może być Markdown lub HTML i jest ustawiany za pomocą argumentu parse_mode.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)Podstawy formatowania Markdown:
- Pogrubiona czcionka jest wyróżniona *:
- przykład:
*жирный шритф* - wynik: pogrubiona czcionka
- przykład:
- Kursywę oznacza się podkreśleniami:
- przykład:
_курсив_ - wynik: kursywa
- przykład:
- Czcionka o stałej szerokości, która jest zwykle używana do podświetlania kodu programu, jest określana za pomocą apostrofów - `:
- przykład: `czcionka o stałej szerokości`
- wynik:
моноширинный шрифт
Podstawy formatowania znaczników HTML:
W HTML zawijasz część tekstu, która ma zostać wyróżniona w tagach, np <тег>текст</тег>.
- <tag> - znacznik otwierający
- - znacznik zamykający
Tagi znaczników HTML
<b>- pogrubiona czcionka- przykład:
<b>жирный шрифт</b> - wynik pogrubiona czcionka
- przykład:
<i>- kursywa- przykład:
<i>курсив</i> - wynik: kursywa
- przykład:
- — моноширинный шрифт
- przykład: моноширинный шрифт
- wynik:
моноширинный шрифт
Oprócz tekstu możesz wysyłać inne treści za pomocą specjalnych 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"
)Te. na przykład za pomocą metody sendPhoto() możesz przesłać wykres zapisany jako obraz utworzony za pomocą pakietu ggplot2.
Sprawdzanie harmonogramu zadań Windowsi wysyłanie powiadomień o zadaniach, które zostały nieprawidłowo zakończone
Aby pracować z Harmonogramem zadań Windows musisz zainstalować pakiet taskscheduleRi dla wygody pracy z danymi zainstaluj pakiet dplyr.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)Następnie skorzystaj z funkcji taskscheduler_ls() prosimy o informacje o zadaniach od naszego harmonogramu. Korzystanie z funkcji filter() z pakietu dplyr Usuwamy z listy zadań te, które zostały zakończone pomyślnie i mają status ostatniego wyniku 0, oraz te, które nigdy nie zostały uruchomione i mają status 267011, zadania wyłączone oraz zadania aktualnie uruchomione.
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")W obiekcie task Mamy teraz listę zadań, które się nie powiodły, musimy wysłać tę listę do Telegramu.
Jeśli przyjrzymy się każdemu poleceniu bardziej szczegółowo, wówczas:
filter()— filtruje listę zadań zgodnie z warunkami opisanymi powyżejselect()— pozostawia w tabeli tylko jedno pole z nazwą zadańunique()- usuwa zduplikowane nazwyunlist()— konwertuje wybraną kolumnę tabeli na wektorpaste0()— łączy nazwy zadań w jeden wiersz i jako separator umieszcza znak końca wiersza, tj.n.
Pozostaje nam tylko wysłać ten wynik telegramem.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Zatem w tej chwili kod bota wygląda następująco:
Kod bota przeglądu zadań
# Подключение пакета
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"
)
}Korzystając z powyższego przykładu, wstaw do kodu swój token bota i identyfikator czatu.
Możesz dodać warunki filtrowania zadań, np. sprawdzanie tylko tych zadań, które sam utworzyłeś, z wyłączeniem zadań systemowych.
Możesz także umieścić różne ustawienia w oddzielnym pliku konfiguracyjnym i przechowywać w nim identyfikator czatu i token. Możesz przeczytać konfigurację, na przykład, używając pakietu configr.
Przykładowa konfiguracja ini
[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Przykład odczytu zmiennych z konfiguracji w R
library(configr)
# чтение конфина
config <- read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE)
bot_token <- config$telegram_bot$bot_token
chat_id <- config$telegram_bot$chat_idKonfigurowanie harmonogramu uruchamiania skanowania zadań
Bardziej szczegółowo opisano proces ustawiania uruchamiania skryptów zgodnie z harmonogramem . Tutaj opiszę jedynie kroki, które należy w tym celu wykonać. Jeśli któryś z etapów nie jest dla Ciebie jasny, to zapoznaj się z artykułem, do którego podałem link.
Załóżmy, że zapisaliśmy kod naszego bota do pliku check_bot.R. Aby zaplanować regularne uruchamianie tego pliku, wykonaj następujące kroki:
- W zmiennej systemowej Path wprowadź ścieżkę do folderu, w którym zainstalowano R, Windows ścieżka będzie wyglądać mniej więcej tak:
C:Program FilesRR-4.0.2bin. - Utwórz wykonywalny plik bat z tylko jedną linią
R CMD BATCH C:rscriptscheck_botcheck_bot.R. ZastąpićC:rscriptscheck_botcheck_bot.Rdo pełnej ścieżki do pliku R. - Następnie skonfiguruj go za pomocą harmonogramu zadań. Windows harmonogram startów, np. co pół godziny.
wniosek
W tym artykule dowiedzieliśmy się, jak stworzyć bota i używać go do wysyłania różnych powiadomień telegramem.
Opisałem zadanie monitorowania harmonogramu zadań Windowsale możesz wykorzystać materiały z tego artykułu do wysyłania dowolnych powiadomień, od prognoz pogody po notowania giełdowe, ponieważ R pozwala na łączenie się z ogromną liczbą źródeł danych.
W kolejnym artykule dowiemy się, jak dodać do bota polecenia i klawiaturę, aby mógł nie tylko wysyłać powiadomienia, ale także wykonywać bardziej złożone akcje.
Źródło: www.habr.com
