Telegram bot bat R-n idaztea (1. zatia): bot bat sortzea eta telegram-en mezuak bidaltzeko erabiltzea

Telegramen audientzia esponentzialki hazten ari da egunero, mezulariaren erosotasunak, kanalen presentzia, txat eta, noski, bot-ak sortzeko gaitasunak errazten du.

Bot-ak helburu guztiz ezberdinetarako erabil daitezke, zure bezeroekin komunikazioak automatizatzen hasi eta zure zereginak kudeatzeko.

Funtsean, telegrama erabil dezakezu bot baten bidez edozein eragiketa egiteko: datuak bidali edo eskatzeko, zerbitzarian zereginak exekutatu, informazioa datu-base batean biltzeko, mezu elektronikoak bidaltzeko, etab.

Lan egiteko moduari buruzko artikulu sorta bat idazteko asmoa dut telegram bot APIa, eta idatzi bot-ak zure beharretara egokitzeko.

Telegram bot bat R-n idaztea (1. zatia): bot bat sortzea eta telegram-en mezuak bidaltzeko erabiltzea

Lehenengo artikulu honetan telegram bot bat nola sortu eta telegramen jakinarazpenak bidaltzeko erabiliko dugu.

Ondorioz, Windows Task Scheduler-en zeregin guztien azken exekuzioaren egoera egiaztatuko duen bot bat izango dugu, eta jakinarazpenak bidaliko dizkizu horietakoren batek huts egiten badu.

Baina artikulu sorta honen helburua ez da zeregin zehatz eta zehatz baterako bot bat nola idazten irakastea, baizik eta, oro har, paketearen sintaxia ezagutaraztea. telegram.bot, eta zure arazoak konpontzeko bot-ak idazteko kode adibideak.

Edukia

Datuen analisia interesatzen bazaizu, baliteke nirea interesatzea telegrama ΠΈ youtube kanalak. Eduki gehienak R hizkuntzari eskainitakoak dira.

  1. Telegram bot bat sortzea
  2. Telegram bot batekin lan egiteko pakete bat instalatzea R-n
  3. R-tik Telegram-era mezuak bidaltzen
  4. Zereginen azterketak egiteko programazioa konfiguratzea
  5. Ondorioa

Telegram bot bat sortzea

Lehenik eta behin, bot bat sortu behar dugu. Hau bot berezi bat erabiliz egiten da BotAita, joan link eta idatzi bot-ari /start.

Horren ostean, komandoen zerrenda duen mezu bat jasoko duzu:

BotFather-en mezua

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

Bot berri bat sortzeko, bidali komandoa /newbot.

BotFather-ek bot-aren izena eta saioa hasteko eskatuko dizu.

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

Edozein izen sar dezakezu, baina saioarekin amaitu behar da bot.

Dena ondo egin baduzu, honako mezu hau jasoko duzu:

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

Ondoren jasotako API tokena beharko duzu, nire adibidean hala da 123456789:abcdefghijklmnopqrstuvwxyz.

Urrats honetan, bot-a sortzeko prestaketa-lana amaitu da.

Telegram bot batekin lan egiteko pakete bat instalatzea R-n

Suposatzen dut dagoeneko R hizkuntza eta RStudio garapen ingurunea instalatuta dituzula. Hau horrela ez bada, hau begiratu dezakezu bideo tutoriala nola instalatu.

Telegram Bot APIarekin lan egiteko R paketea erabiliko dugu telegrama.bot.

R-n paketeak instalatzea funtzioa erabiliz egiten da install.packages(), beraz, behar dugun paketea instalatzeko, erabili komandoa install.packages("telegram.bot").

Hainbat pakete instalatzeari buruz gehiago lor dezakezu bideo hau.

Paketea instalatu ondoren, konektatu behar duzu:

library(telegram.bot)

R-tik Telegram-era mezuak bidaltzen

Sortu duzun bot-a Telegramen aurki daiteke, sorreran zehaztutako saio-hasiera erabiliz, nire kasuan hala da @my_test_bot.

Bidali bot-ari edozein mezu, adibidez, "Hey bot". Momentuz, hau behar dugu bot-arekin zure txataren IDa lortzeko.

Orain hurrengo kodea idatziko dugu R-n.

library(telegram.bot)

# создаём экзСмпляр Π±ΠΎΡ‚Π°
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π±ΠΎΡ‚Π΅
print(bot$getMe())

# ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ обновлСния Π±ΠΎΡ‚Π°, Ρ‚.Π΅. список ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ сообщСний
updates <- bot$getUpdates()

# Π—Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π°Ρ‚Π°
# ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΏΠ΅Ρ€Π΅Π΄ запросом ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±ΠΎΡ‚Ρƒ сообщСниС
chat_id <- updates[[1L]]$from_chat_id()

Hasieran, gure bot-aren instantzia bat sortzen dugu funtzioarekin Bot(), aurretik jasotako tokena argumentu gisa pasa behar da.

Ez da praktika ontzat hartzen tokena kodean gordetzea, beraz, ingurune-aldagai batean gorde dezakezu eta bertatik irakur dezakezu. Berez paketean telegram.bot Izen hauetako ingurune-aldagaietarako laguntza inplementatu da: R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π... Ordez ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π sortzerakoan zehaztu duzun izena ordezkatu, nire kasuan aldagai bat izango da R_TELEGRAM_BOT_My Test Bot.

Ingurune-aldagai bat sortzeko hainbat modu daude; Unibertsalena eta multiplataformaren berri emango dizut. Sortu zure etxeko direktorioan (komandoa erabiliz aurki dezakezu path.expand("~")) izena duen testu fitxategia .Inguruan. Hori ere egin dezakezu komandoa erabiliz file.edit(path.expand(file.path("~", ".Renviron"))).

Eta gehitu hurrengo lerroa.

R_TELEGRAM_BOT_ИМЯ_Π’ΠΠ¨Π•Π“Πž_Π‘ΠžΠ’Π=123456789:abcdefghijklmnopqrstuvwxyz

Ondoren, ingurune-aldagaian gordetako tokena erabil dezakezu funtzioa erabiliz bot_token(), hau da. horrela:

bot <- Bot(token = bot_token("My Test Bot"))

ΠœΠ΅Ρ‚ΠΎΠ΄ getUpdates()bot eguneraketak lortzeko aukera ematen digu, hau da. bidali zizkioten mezuak. Metodoa from_chat_id(), mezua bidali den txataren IDa lortzeko aukera ematen du. ID hau behar dugu bot-etik mezuak bidaltzeko.

Metodoak lortutako objektuaren txataren IDaz gain getUpdates() beste informazio erabilgarria ere jasotzen duzu. Adibidez, mezua bidali duen erabiltzaileari buruzko informazioa.

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"

Beraz, fase honetan dagoeneko badugu bot batetik Telegram-era mezu bat bidaltzeko behar dugun guztia. Erabili dezagun metodoa sendMessage(), eta bertan txataren IDa, mezuaren testua eta mezuen testuaren markaketa mota pasa behar dituzu. Markdown mota Markdown edo HTML izan daiteke eta argumentuak ezartzen du parse_mode.

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния
bot$sendMessage(chat_id,
                text = "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, *ΠΆΠΈΡ€Π½Ρ‹ΠΉ тСкст* _курсив_",
                parse_mode = "Markdown"
)

Markdown formatuaren oinarriak:

  • Letra lodia * honekin nabarmentzen da:
    • adibidea: *ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ‚Ρ„*
    • emaitza: letra lodia
  • Etzanak azpimarraz adierazten dira:
    • adibidea: _курсив_
    • emaitza: letra etzana
  • Programa-kodea nabarmentzeko erabili ohi den letra-tipo monospacea apostrofoak erabiliz zehazten da - `:
    • adibidea: `letra-tipo monospace`
    • emaitza: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

HTML markaketa formateatzeko oinarriak:
HTMLn, etiketetan nabarmendu behar den testuaren zatia biltzen duzu, adibidez <Ρ‚Π΅Π³>тСкст</Ρ‚Π΅Π³>.

  • <etiketa> - hasierako etiketa
  • - ixteko etiketa

HTML markaketa etiketak

  • <b> - letra lodia
    • adibidea: <b>ΠΆΠΈΡ€Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚</b>
    • ondorioz, letra lodia
  • <i> - letra etzana
    • adibidea: <i>курсив</i>
    • emaitza: letra etzana
  • β€” ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • adibidea: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚
    • emaitza: ΠΌΠΎΠ½ΠΎΡˆΠΈΡ€ΠΈΠ½Π½Ρ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚

Testuaz gain, beste eduki batzuk bidal ditzakezu metodo bereziak erabiliz:

# ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
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"
)

Horiek. adibidez metodoa erabiliz sendPhoto() paketea erabiliz sortutako irudi gisa gordetako grafiko bat bidali dezakezu ggplot2.

Windows Task Scheduler egiaztatzea eta anormal amaitu diren zereginei buruzko jakinarazpenak bidaltzea

Windows Task Scheduler-ekin lan egiteko paketea instalatu behar duzu taskscheduleR, eta datuekin lan egiteko erosotasunerako, instalatu paketea dplyr.

# Установка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
install.packages(c('taskscheduleR', 'dplyr'))
# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²
library(taskscheduleR)
library(dplyr)

Jarraian, funtzioa erabiliz taskscheduler_ls() zereginei buruzko informazioa eskatzen dugu gure programatzaileari. Funtzioa erabiliz filter() paketetik dplyr Zereginen zerrendatik kentzen ditugu arrakastaz burututakoak eta azken emaitza 0-ko egoera dutenak, eta inoiz abiarazi ez direnak eta 267011-ko egoera dutenak, desgaitutako zereginak eta une honetan exekutatzen ari diren zereginak.

# Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌ список Π·Π°Π΄Π°Ρ‡
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Objektuan task Orain huts egin duten zereginen zerrenda dugu, zerrenda hau Telegramera bidali behar dugu.

Komando bakoitza zehatzago aztertzen badugu, orduan:

  • filter() β€” atazen zerrenda goian azaldutako baldintzen arabera iragazten du
  • select() β€” taulan eremu bakarra uzten du zereginen izenarekin
  • unique() - izen bikoiztuak kentzen ditu
  • unlist() β€” hautatutako taula-zutabea bektore bihurtzen du
  • paste0() β€” atazen izenak lerro batean lotzen ditu, eta lerro-jario bat jartzen du bereizle gisa, hau da. n.

Emaitza hau telegrama bidez bidaltzea besterik ez zaigu geratzen.

bot$sendMessage(chat_id,
                text = task,
                parse_mode = "Markdown"
)

Beraz, momentu honetan bot-kodeak honela dauka:

Ataza berrikusteko bot kodea

# ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
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"
  )

}

Goiko adibidea erabiltzean, ordezkatu zure bot tokena eta zure txataren ID kodea kodean.

Zereginak iragazteko baldintzak gehi ditzakezu, adibidez, zuk sortu dituzun zereginak soilik egiaztatuz, sistemakoak izan ezik.

Hainbat ezarpen ere jar ditzakezu bereizitako konfigurazio fitxategi batean eta bertan gorde txataren IDa eta tokena. Konfigurazioa irakur dezakezu, adibidez, paketea erabiliz configr.

Adibidea ini konfig

[telegram_bot]
;настройки Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ Π±ΠΎΡ‚Π° ΠΈ Ρ‡Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ увСдомлСния
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

R-ko konfigurazio batetik aldagaiak irakurtzeko adibide bat

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

Zereginen azterketak egiteko programazioa konfiguratzea

Programazio batean scriptak abiarazteko prozesua zehatzago deskribatzen da honetan Artikulu. Hemen horretarako jarraitu beharreko pausoak soilik deskribatuko ditut. Urratsetakoren bat argi ez baduzu, jo ezazu esteka bat eman dudan artikulua.

Demagun gure bot kodea fitxategi batean gorde dugula check_bot.R. Fitxategi hau aldizka exekutatzeko, jarraitu urrats hauek:

  1. Idatzi Path sistemaren aldagaian R instalatuta dagoen karpetarako bidea; Windows-en, bidea honelakoa izango da: C:Program FilesRR-4.0.2bin.
  2. Sortu bat fitxategi exekutagarri bat lerro bakarrarekin R CMD BATCH C:rscriptscheck_botcheck_bot.R. Ordezkatu C:rscriptscheck_botcheck_bot.R zure R fitxategirako bide osora.
  3. Ondoren, erabili Windows Task Scheduler abiarazteko egutegia konfiguratzeko, adibidez, ordu erdiro.

Ondorioa

Artikulu honetan, bot bat nola sortu eta telegram-en hainbat jakinarazpen bidaltzeko erabiltzen asmatu dugu.

Windows Task Scheduler monitorizatzeko zeregina deskribatu nuen, baina artikulu honetako materiala erabil dezakezu edozein jakinarazpen bidaltzeko, eguraldiaren iragarpenetatik hasita burtsaren kotizazioetaraino, zeren eta R-k datu-iturri kopuru handi batera konektatzeko aukera ematen du.

Hurrengo artikuluan, komandoak eta teklatua bot-ari nola gehitu ikusiko dugu, jakinarazpenak bidaltzeaz gain, ekintza konplexuagoak ere egin ditzan.

Iturria: www.habr.com

Gehitu iruzkin berria