Telegram 的受眾每天都呈指數級增長,這得益於通訊工具的便利性、頻道的存在、聊天,當然還有創建機器人的能力。
機器人可用於完全不同的目的,從與客戶的自動通訊到管理您自己的任務。
本質上,您可以使用 telegram 透過機器人執行任何操作:發送或請求資料、在伺服器上運行任務、將資訊收集到資料庫、發送電子郵件等。
我計劃寫一系列關於如何使用
在第一篇文章中,我們將了解如何建立電報機器人並使用它在電報中發送通知。
因此,我們將有一個機器人來檢查 Windows 任務計劃程式中所有任務的上次執行狀態,並在其中任何任務失敗時向您發送通知。
但本系列文章的目的不是教您如何為特定的、狹窄的任務編寫機器人,而是一般性地向您介紹包的語法 telegram.bot
,以及您可以用來編寫機器人來解決您自己的問題的程式碼範例。
Содержание
如果您對數據分析感興趣,您可能會對我的文章感興趣
創建電報機器人
首先,我們需要創建一個機器人。 這是使用特殊的機器人完成的 殭屍之父, 去 /start
.
之後您將收到一條包含命令清單的訊息:
來自 BotFather 的訊息
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 game
要建立新機器人,請發送命令 /newbot
.
BotFather 會要求您輸入機器人的名稱和登入名稱。
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_bot
您可以輸入任何名稱,但登入名稱必須以 bot
.
如果您正確執行了所有操作,您將收到以下訊息:
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/api
接下來您將需要收到的 API 令牌,在我的範例中是 123456789:abcdefghijklmnopqrstuvwxyz
.
到這一步,創建bot的準備工作就完成了。
安裝用於在 R 中使用電報機器人的軟體包
我假設您已經安裝了R語言和RStudio開發環境。 如果不是這種情況,那麼你可以看看這個
為了使用 Telegram Bot API,我們將使用 R 套件
在 R 中安裝套件是使用該函數完成的 install.packages()
,所以要安裝我們需要的套件,使用命令 install.packages("telegram.bot")
.
您可以了解有關安裝各種軟體包的更多信息
安裝套件後,您需要連接它:
library(telegram.bot)
從 R 發送訊息到 Telegram
您創建的機器人可以使用創建期間指定的登入名稱在 Telegram 中找到,在我的例子中是 @my_test_bot
.
向機器人發送任何訊息,例如“嘿機器人”。 目前,我們需要它來獲取您與機器人聊天的 ID。
現在我們在 R 中編寫以下程式碼。
library(telegram.bot)
# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# Запрашиваем информацию о боте
print(bot$getMe())
# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()
# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()
最初,我們使用以下函數建立機器人的實例 Bot()
,先前收到的令牌必須作為參數傳遞給它。
將令牌儲存在程式碼中不被認為是最佳實踐,因此您可以將其儲存在環境變數中並從中讀取。 預設在包中 telegram.bot
已實現對以下名稱的環境變數的支援: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА
。 代替 ИМЯ_ВАШЕГО_БОТА
替換您在創建時指定的名稱,在我的例子中它將是一個變數 R_TELEGRAM_BOT_My Test Bot
.
創建環境變數的方法有多種;我將告訴您最通用和跨平台的一種。 在你的主目錄中創建(你可以使用命令找到它 path.expand("~")
) 具有名稱的文字文件 .Renviron。 您也可以使用命令來執行此操作 file.edit(path.expand(file.path("~", ".Renviron")))
.
並在其中加入以下行。
R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz
接下來,您可以使用函數使用儲存在環境變數中的令牌 bot_token()
, IE。 像這樣:
bot <- Bot(token = bot_token("My Test Bot"))
方法 getUpdates()
允許我們獲取機器人更新,即發送給他的訊息。 方法 from_chat_id()
,允許您取得發送訊息的聊天的 ID。 我們需要這個 ID 來從機器人發送訊息。
另外從該方法取得的物件中的chat id getUpdates()
您還會收到一些其他有用的信息。 例如,有關發送訊息的用戶的資訊。
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"
因此,現階段我們已經擁有從機器人向 Telegram 發送訊息所需的一切。 讓我們使用該方法 sendMessage()
,您需要向其中傳遞聊天 ID、訊息文字和訊息文字標記類型。 標記類型可以是 Markdown 或 HTML,由參數設定 parse_mode
.
# Отправка сообщения
bot$sendMessage(chat_id,
text = "Привет, *жирный текст* _курсив_",
parse_mode = "Markdown"
)
Markdown 格式基礎知識:
- 粗體字體以 * 反白顯示:
- 例如:
*жирный шритф*
- 結果: 粗體
- 例如:
- 斜體以底線表示:
- 例如:
_курсив_
- 結果: 斜體字
- 例如:
- 等寬字體通常用於突出顯示程式程式碼,使用撇號 - ` 指定:
- 範例:`等寬字體`
- 結果:
моноширинный шрифт
HTML 標記格式的基礎知識:
在 HTML 中,您將需要突出顯示的文字部分包裝在標籤中,例如 <тег>текст</тег>
.
- <tag> - 開始標籤
- - 結束標籤
HTML 標記
<b>
- 粗體- 例如:
<b>жирный шрифт</b>
- 導致 粗體
- 例如:
<i>
- 斜體- 例如:
<i>курсив</i>
- 結果: 斜體字
- 例如:
- — моноширинный шрифт
- 範例: моноширинный шрифт
- 結果:
моноширинный шрифт
除了文字之外,您還可以使用特殊方法發送其他內容:
# Отправить изображение
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"
)
那些。 例如使用該方法 sendPhoto()
您可以傳送使用該套件建立的另存為圖像的圖表 ggplot2
.
檢查 Windows 工作排程器並發送有關異常終止的任務的通知
要使用 Windows 工作排程程序,您需要安裝該軟體包 taskscheduleR
,並且為了方便處理數據,安裝該套件 dplyr
.
# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)
接下來,使用函數 taskscheduler_ls()
我們向調度程序請求有關任務的資訊。 使用功能 filter()
從包裝中 dplyr
我們從任務清單中刪除那些已成功完成且最後結果狀態為 0 的任務、那些從未啟動且狀態為 267011 的任務、已停用的任務以及目前正在執行的任務。
# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")
在物件中 task
現在我們有了失敗任務的列表,我們需要將此列表發送到 Telegram。
如果我們更詳細地查看每個命令,那麼:
filter()
— 根據上述條件過濾任務列表select()
— 表中僅留下一個包含任務名稱的字段unique()
- 刪除重複的名稱unlist()
— 將選取的表格列轉換為向量paste0()
— 將任務名稱連接成一行,並以換行符作為分隔符,即n
.
我們剩下的就是透過電報發送此結果。
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)
因此,目前機器人程式碼如下所示:
任務審核機器人程式碼
# Подключение пакета
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"
)
}
使用上面的範例時,請將您的機器人令牌和聊天 ID 替換到程式碼中。
您可以新增過濾任務的條件,例如只檢查您建立的任務,排除系統任務。
您也可以將各種設定放入單獨的設定檔中,並將聊天 ID 和令牌儲存在其中。 您可以讀取配置,例如使用套件 configr
.
ini 設定範例
[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
從 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_id
設定運行任務掃描的計劃
設定按計劃啟動腳本的過程在此中有更詳細的描述。
假設我們將機器人程式碼儲存到一個檔案中 check_bot.R
。 若要安排此文件定期運行,請按照下列步驟操作:
- 將安裝 R 的資料夾的路徑寫入 Path 系統變數;在 Windows 中,路徑將如下所示:
C:Program FilesRR-4.0.2bin
. - 只需一行即可建立可執行bat文件
R CMD BATCH C:rscriptscheck_botcheck_bot.R
. 代替C:rscriptscheck_botcheck_bot.R
到 R 檔案的完整路徑。 - 接下來,使用 Windows 任務計劃程式設定啟動計劃,例如每半小時一次。
結論
在本文中,我們了解如何建立機器人並使用它在電報中發送各種通知。
我描述了監視 Windows 任務規劃程式的任務,但您可以使用本文中的資料發送任何通知,從天氣預報到證券交易所的股票報價,因為R 讓您連接到大量資料來源。
在下一篇文章中,我們將了解如何為機器人添加命令和鍵盤,以便它不僅可以發送通知,還可以執行更複雜的操作。
來源: www.habr.com