电报的受众每天都在成倍增长,这得益于Messenger的便利性,渠道,聊天的存在以及创建自动程序的能力。
Bot可用于完全不同的目的,从自动与客户沟通到管理自己的任务。
实际上,通过该漫游器,您可以使用电报执行任何操作:发送或请求数据,在服务器上运行任务,将信息收集到数据库中,发送电子邮件等等。
我计划写一系列文章,介绍如何在R中使用电报机器人API,并为我的需要编写机器人。
在本文的第一篇文章中,我们将探讨如何创建电报机器人并使用它以电报形式发送通知。
结果,我们将拥有一个机器人,该机器人将检查Windows Task Scheduler中所有任务的最后执行状态,并在某些任务失败时向您发送通知。
, , , telegram.bot
, , , .
" telegram R"
:
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
.
R
Telegram Bot API R telegram.bot.
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()
, .. :
bot <- Bot(token = bot_token("My Test Bot"))
getUpdates()
, .. . from_chat_id()
, , . .
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"
, , . sendMessage()
, , , . Markdown HTML parse_mode
.
#
bot$sendMessage(chat_id,
text = ", * * __",
parse_mode = "Markdown"
)
Markdown :
- *:
- :
* *
- :
- :
- :
- :
__
- :
- :
- , , — `:
- : ` `
- :
HTML :
HTML , , , <></>
.
- <> —
- </> —
HTML
<b>
—
- :
<b> </b>
- :
<i>
—
- :
<i></i>
- :
- :
- <code> —
- : <code> </code>
- :
:
#
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
.
Emoji
, Emoji.
Unicode. , U+
\U000
. .. , U+1F601
, R — \U0001F601
.
:
bot$sendMessage(chat_id,
' \U0001F601 U+1F601')
:
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 . configr
.
[telegram_bot]
; ,
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
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
. , :
- Path R, Windows :
C:\Program Files\R\R-4.0.2\bin
. - bat ,
R CMD BATCH C:\rscripts\check_bot\check_bot.R
.C:\rscripts\check_bot\check_bot.R
R . - Windows , .
, , telegram.
Windows, , , .. R .