Pemirsa telegram tuwuh kanthi eksponensial saben dina, sing difasilitasi dening penak saka utusan, anane saluran, obrolan, lan mesthi kemampuan kanggo nggawe bot.
Bot bisa digunakake kanggo macem-macem tujuan, saka ngotomatisasi komunikasi karo pelanggan kanggo ngatur tugas sampeyan dhewe.
Nyatane, liwat bot, sampeyan bisa nggunakake Telegram kanggo nindakake operasi apa wae: ngirim utawa njaluk data, mbukak tugas ing server, ngumpulake informasi ing basis data, ngirim email, lan liya-liyane.
Aku arep nulis seri artikel babagan cara nggarap R , lan nulis bot kanggo kabutuhan sampeyan.

Ing artikel pisanan iki, kita bakal ngerti carane nggawe bot telegram lan ngirim kabar menyang telegram.
AkibatΓ©, kita bakal duwΓ© bot sing bakal mriksa status eksekusi pungkasan kabeh tugas ing penjadwal tugas. Windows, lan ngirim kabar yen ana sing gagal.
Nanging tujuan saka seri artikel iki ora kanggo mulang sampeyan carane nulis bot kanggo tugas tartamtu, sempit, nanging umume ngenalake sampeyan sintaks paket kasebut. telegram.bot, lan conto kode sing bakal mbantu sampeyan nulis bot kanggo ngatasi masalah sampeyan dhewe.
Isi
Yen sampeyan kasengsem ing analisis data, sampeyan bisa uga kasengsem ing sandi ΠΈ saluran. SebagΓ©yan gedhΓ© isinΓ© dikhususakΓ© kanggo basa R.
Nggawe bot telegram
Pisanan, kita kudu nggawe bot. Iki rampung nggunakake bot khusus BotBapak, kita nerusake lan nulis menyang bot /start.
Sawise sampeyan bakal nampa pesen kanthi dhaptar perintah:
Pesen saka 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 gameKanggo nggawe bot anyar, kirim printah /newbot.
BotFather bakal njaluk sampeyan ngetik jeneng bot lan mlebu.
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_botSampeyan bisa ngetik jeneng apa wae, nanging login kudu diakhiri bot.
Yen sampeyan nindakake kabeh kanthi bener, sampeyan bakal nampa pesen ing ngisor iki:
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/apiSabanjure sampeyan butuh token API sing ditampa, ing contoku 123456789:abcdefghijklmnopqrstuvwxyz.
Ing langkah iki, karya persiapan kanggo nggawe bot wis rampung.
Nginstal paket kanggo nggarap bot telegram ing R
Aku nganggep yen sampeyan wis nginstal basa R lan lingkungan pangembangan RStudio. Yen ora, sampeyan bisa ndeleng iki carane kanggo nginstal.
Kanggo nggarap Telegram Bot API kita bakal nggunakake paket R .
Nginstal paket ing R wis rampung nggunakake fungsi install.packages(), supaya nginstal paket sing kita butuhake, gunakake perintah kasebut install.packages("telegram.bot").
Sampeyan bisa sinau luwih lengkap babagan nginstal macem-macem paket saka .
Sawise nginstal paket kasebut, sampeyan kudu nyambungake:
library(telegram.bot)Ngirim pesen saka R menyang Telegram
Bot sing digawe bisa ditemokake ing Telegram nggunakake login sing sampeyan nemtokake nalika nggawe, ing kasusku @my_test_bot.
Kirimi bot sembarang pesen, contone "Hello bot". Ing wayahe kita butuh iki kanggo njaluk id chatting karo bot.
Saiki ing R kita nulis kode ing ngisor iki.
library(telegram.bot)
# ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π±ΠΎΡΠ°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")
# ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π±ΠΎΡΠ΅
print(bot$getMe())
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±ΠΎΡΠ°, Ρ.Π΅. ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
updates <- bot$getUpdates()
# ΠΠ°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°ΡΠ°
# ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π±ΠΎΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
chat_id <- updates[[1L]]$from_chat_id()Kaping pisanan, kita nggawe conto bot kita kanthi fungsi kasebut Bot(), sampeyan kudu ngirim token sing ditampa sadurunge minangka argumen.
Nyimpen token ing kode kasebut ora dianggep minangka praktik paling apik, supaya sampeyan bisa nyimpen ing variabel lingkungan lan maca saka kono. Kanthi gawan, ing paket telegram.bot dhukungan kanggo variabel lingkungan saka jeneng ing ngisor iki wis dileksanakake: R_TELEGRAM_BOT_ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π... tinimbang ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π ngganti jeneng sing sampeyan nemtokake nalika nggawe, ing kasusku bakal dadi variabel R_TELEGRAM_BOT_My Test Bot.
Ana sawetara cara kanggo nggawe variabel lingkungan, Aku bakal pitutur marang kowe bab sing paling universal lan salib-platform siji. Gawe ing direktori ngarep (sampeyan bisa nemokake kanthi nggunakake printah path.expand("~")) file teks kanthi jeneng .Renviron. Sampeyan uga bisa nindakake iki nggunakake printah file.edit(path.expand(file.path("~", ".Renviron"))).
Lan tambahake baris ing ngisor iki.
R_TELEGRAM_BOT_ΠΠΠ―_ΠΠΠ¨ΠΠΠ_ΠΠΠ’Π=123456789:abcdefghijklmnopqrstuvwxyzSabanjure, sampeyan bisa nggunakake token sing disimpen ing variabel lingkungan nggunakake fungsi kasebut bot_token(), i.e. kaya iki:
bot <- Bot(token = bot_token("My Test Bot"))Cara getUpdates()ngidini kita entuk nganyari bot, yaiku pesen sing wis dikirim. Metode from_chat_id(), ngidini sampeyan entuk ID chatting saka ngendi pesen kasebut dikirim. Kita butuh ID iki kanggo ngirim pesen saka bot.
Saliyane chatting id saka obyek dijupuk dening cara getUpdates() Sampeyan uga entuk sawetara informasi migunani liyane, kayata informasi babagan pangguna sing ngirim pesen.
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"Dadi, ing tahap iki kita wis duwe kabeh sing dibutuhake kanggo ngirim pesen saka bot menyang Telegram. Ayo nggunakake cara sendMessage(), ing ngendi sampeyan kudu ngliwati ID chatting, teks pesen, lan jinis markup teks pesen. Jinis markup bisa Markdown utawa HTML lan disetel dening argumen parse_mode.
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
bot$sendMessage(chat_id,
text = "ΠΡΠΈΠ²Π΅Ρ, *ΠΆΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ* _ΠΊΡΡΡΠΈΠ²_",
parse_mode = "Markdown"
)Dasar format Markdown:
- Huruf kandel disorot nganggo tandha *:
- tuladha:
*ΠΆΠΈΡΠ½ΡΠΉ ΡΡΠΈΡΡ* - asil: font kandel
- tuladha:
- Miring dituduhake kanthi garis ngisor:
- tuladha:
_ΠΊΡΡΡΠΈΠ²_ - asil: miring
- tuladha:
- Font monospace sing biasane digunakake kanggo nyorot kode program ditemtokake nggunakake apostrof - `:
- contone: `monospace font`
- asil:
ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Dasar pemformatan markup HTML:
Ing HTML, sampeyan mbungkus bagean teks sing kudu disorot ing tag, contone <ΡΠ΅Π³>ΡΠ΅ΠΊΡΡ</ΡΠ΅Π³>.
- <tag> - tag pambuka
- - tag penutup
Tag markup HTML
<b>- font kandel- tuladha:
<b>ΠΆΠΈΡΠ½ΡΠΉ ΡΡΠΈΡΡ</b> - efek jinis kandel
- tuladha:
<i>- miring- tuladha:
<i>ΠΊΡΡΡΠΈΠ²</i> - asil: miring
- tuladha:
- β ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
- contone: ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
- asil:
ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ
Saliyane teks, sampeyan bisa ngirim konten liyane nggunakake cara khusus:
# ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
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"
)Sing, contone, nggunakake cara sendPhoto() sampeyan bisa ngirim gambar sing disimpen saka grafik sing wis digawe nggunakake paket kasebut ggplot2.
Mriksa Penjadwal Tugas Windows, lan ngirim kabar babagan tugas sing wis dipungkasi kanthi ora normal
Kanggo nggarap Penjadwal Tugas Windows sampeyan kudu nginstal paket kasebut taskscheduleR, lan kanggo gampang nggarap data, kita bakal nginstal paket kasebut dplyr.
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
library(taskscheduleR)
library(dplyr)Sabanjure, nggunakake fungsi taskscheduler_ls() kita njaluk informasi babagan tugas saka panjadwal kita. Nggunakake fungsi filter() saka paket dplyr Kita mbusak saka dhaptar tugas sing kasil rampung lan nduweni status asil pungkasan 0, lan sing durung tau diluncurake lan duwe status 267011, tugas dipatèni, lan tugas sing lagi ditindakake.
# Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π΄Π°Ρ
task <- task <- taskscheduler_ls() %>%
filter(! `Last Result` %in% c("0", "267011") &
`Scheduled Task State` == "Enabled" &
Status != "Running") %>%
select(TaskName) %>%
unique() %>%
unlist() %>%
paste0(., collapse = "n")Ing obyek task Saiki kita duwe dhaptar tugas sing wis rampung kanthi kesalahan, kita kudu ngirim dhaptar iki menyang Telegram.
Yen kita ndeleng saben printah kanthi luwih rinci, banjur:
filter()- nyaring dhaptar tugas miturut kahanan sing kasebut ing ndhuwurselect()- godhong mung siji lapangan karo jeneng tugas ing mejaunique()- mbusak jeneng duplikatunlist()- Ngonversi kolom tabel sing dipilih dadi vektorpaste0()- nggabungke jeneng tugas menyang siji baris lan nggunakake feed baris minangka separator a, i.e.n.
Sing isih ana kanggo kita yaiku ngirim asil iki menyang Telegram.
bot$sendMessage(chat_id,
text = task,
parse_mode = "Markdown"
)Dadi, saiki kode bot katon kaya iki:
Kode Bot Pemeriksa Tugas
# ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°
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"
)
}Nalika nggunakake conto ing ndhuwur, ngganti token bot lan ID chatting menyang kode.
Sampeyan bisa nambah kahanan nyaring tugas, contone mung mriksa tugas sing digawe dening sampeyan, ora kalebu sistem.
Sampeyan uga bisa sijine macem-macem setelan ing file konfigurasi kapisah lan nyimpen ID chatting lan token ing. Sampeyan bisa maca konfigurasi, contone, nggunakake paket configr.
Conto iki config
[telegram_bot]
;Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ Π±ΠΎΡΠ° ΠΈ ΡΠ°ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"Conto maca variabel saka config ing 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_idNggawe jadwal kanggo mriksa tugas
Proses nyiyapake peluncuran skrip sing wis dijadwal diterangake kanthi luwih rinci . Ing kene aku mung bakal nerangake langkah-langkah sing kudu ditindakake kanggo iki. Yen ana langkah-langkah sing ora jelas kanggo sampeyan, deleng artikel sing wis dakwenehake link.
Ayo nganggep yen kita nyimpen kode bot menyang file check_bot.RKanggo gawe jadwal file iki supaya bisa mlaku kanthi rutin, tindakake langkah iki:
- Ketik path menyang folder ing ngendi R diinstal ing variabel sistem Path, Windows dalane bakal kaya ngene:
C:Program FilesRR-4.0.2bin. - Nggawe file bat eksekusi sing mung ngemot siji baris.
R CMD BATCH C:rscriptscheck_botcheck_bot.R. GantiC:rscriptscheck_botcheck_bot.Rmenyang path lengkap menyang file R sampeyan. - Sabanjure, konfigurasi nganggo penjadwal tugas. Windows jadwal peluncuran, contone, saben setengah jam.
kesimpulan
Ing artikel iki, kita ngerti carane nggawe bot lan ngirim macem-macem kabar ing telegram kanthi bantuan.
Aku njlentrehake tugas ngawasi penjadwal tugas Windows, nanging sampeyan bisa nggunakake materi ing artikel iki kanggo ngirim kabar apa wae, saka prakiraan cuaca nganti kuotasi saham, amarga R ngidini sampeyan nyambung menyang akeh banget sumber data.
Ing artikel sabanjure, kita bakal ngerti carane nambah perintah lan keyboard menyang bot supaya ora mung ngirim kabar, nanging uga nindakake tumindak sing luwih rumit.
Source: www.habr.com
