Մենք գրում ենք հեռագրային բոտ R լեզվով (մաս 1). Ստեղծեք բոտ և հաղորդագրություններ ուղարկեք telegram-ին դրա միջոցով

Telegram-ի լսարանը օրեցօր երկրաչափական աճ է գրանցում, դրան նպաստում է մեսենջերի հարմարավետությունը, ալիքների, չաթերի առկայությունը և, իհարկե, բոտեր ստեղծելու հնարավորությունը:

Բոտերը կարող են օգտագործվել բոլորովին այլ նպատակներով՝ սկսած ձեր հաճախորդների հետ հաղորդակցության ավտոմատացումից մինչև ձեր սեփական խնդիրները կառավարելը:

Ըստ էության, դուք կարող եք օգտագործել Telegram-ը բոտի միջոցով ցանկացած գործողություն իրականացնելու համար՝ ուղարկել կամ պահանջել տվյալներ, առաջադրանքներ առաջադրել սերվերի վրա, տեղեկատվություն հավաքել տվյալների բազայում, ուղարկել էլ. նամակներ և այլն:

Ես նախատեսում եմ հոդվածների շարք գրել, թե ինչպես աշխատել telegram bot API, և գրեք բոտեր՝ ձեր կարիքներին համապատասխան:

Մենք գրում ենք հեռագրային բոտ R լեզվով (մաս 1). Ստեղծեք բոտ և հաղորդագրություններ ուղարկեք telegram-ին դրա միջոցով

Այս առաջին հոդվածում մենք կպարզենք, թե ինչպես ստեղծել telegram բոտ և օգտագործել այն Telegram-ում ծանուցումներ ուղարկելու համար:

Արդյունքում մենք կունենանք բոտ, որը կստուգի Windows Task Scheduler-ում բոլոր առաջադրանքների վերջին կատարման կարգավիճակը և կուղարկի ձեզ ծանուցումներ, եթե դրանցից որևէ մեկը ձախողվի:

Բայց այս հոդվածաշարի նպատակը ձեզ սովորեցնելը չէ, թե ինչպես գրել բոտ կոնկրետ, նեղ առաջադրանքի համար, այլ ընդհանուր առմամբ ձեզ ծանոթացնել փաթեթի շարահյուսությանը: telegram.bot, և կոդերի օրինակներ, որոնցով կարող եք գրել բոտեր՝ ձեր սեփական խնդիրները լուծելու համար։

Պարունակություն

Եթե ​​դուք հետաքրքրված եք տվյալների վերլուծությամբ, ապա ձեզ կարող է հետաքրքրել իմը հեռագիր и youtube ալիքներ. Բովանդակության մեծ մասը նվիրված է R լեզվին։

  1. Telegram բոտի ստեղծում
  2. Հեռագրային բոտի հետ աշխատելու փաթեթի տեղադրում Ռ
  3. R-ից հաղորդագրություններ ուղարկել Telegram
  4. Առաջադրանքների սկանավորման ժամանակացույցի կարգավորում
  5. Ամփոփում

Telegram բոտի ստեղծում

Նախ, մենք պետք է ստեղծենք բոտ: Դա արվում է հատուկ բոտի միջոցով BotFather, գնալ ՈՒղեցույց և գրիր բոտին /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.

Այս քայլով ավարտված են բոտի ստեղծման նախապատրաստական ​​աշխատանքները։

Հեռագրային բոտի հետ աշխատելու փաթեթի տեղադրում Ռ

Ենթադրում եմ, որ դուք արդեն ունեք տեղադրված R լեզուն և RStudio մշակման միջավայրը։ Եթե ​​դա այդպես չէ, ապա դուք կարող եք նայել սա վիդեո ձեռնարկ այն մասին, թե ինչպես տեղադրել դրանք:

Telegram Bot API-ի հետ աշխատելու համար մենք կօգտագործենք R փաթեթը telegram.bot.

R-ում փաթեթների տեղադրումը կատարվում է ֆունկցիայի միջոցով install.packages(), ուստի մեզ անհրաժեշտ փաթեթը տեղադրելու համար օգտագործեք հրամանը install.packages("telegram.bot").

Դուք կարող եք ավելին իմանալ տարբեր փաթեթների տեղադրման մասին այս տեսանյութը.

Փաթեթը տեղադրելուց հետո անհրաժեշտ է միացնել այն.

library(telegram.bot)

R-ից հաղորդագրություններ ուղարկել Telegram

Ձեր ստեղծած բոտը կարելի է գտնել Telegram-ում՝ օգտագործելով ստեղծման ժամանակ նշված մուտքը, իմ դեպքում դա այդպես է @my_test_bot.

Բոտին ուղարկեք ցանկացած հաղորդագրություն, օրինակ՝ «Hey 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("~")) տեքստային ֆայլ անունով .Ռենվիրոն. Դուք կարող եք դա անել նաև հրամանի միջոցով 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-ն, որից ուղարկվել է հաղորդագրությունը: Մեզ անհրաժեշտ է այս 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"

Այսպիսով, այս փուլում մենք արդեն ունենք այն ամենը, ինչ անհրաժեշտ է բոտից Telegram հաղորդագրություն ուղարկելու համար: Եկեք օգտագործենք մեթոդը sendMessage(), որին պետք է փոխանցեք զրույցի ID-ն, հաղորդագրության տեքստը և հաղորդագրության տեքստի նշագրման տեսակը: Նշման տեսակը կարող է լինել Markdown կամ HTML և սահմանվում է փաստարկով parse_mode.

# Отправка сообщения
bot$sendMessage(chat_id,
                text = "Привет, *жирный текст* _курсив_",
                parse_mode = "Markdown"
)

Markdown ձևաչափման հիմունքները.

  • Թավ տառատեսակը ընդգծված է *:
    • օրինակ ` *жирный шритф*
    • արդյունք: համարձակ տառատեսակ
  • Շեղատառերը նշվում են ընդգծումներով.
    • օրինակ ` _курсив_
    • արդյունք: շեղագիր
  • Մոնոտիեզերական տառատեսակը, որը սովորաբար օգտագործվում է ծրագրի կոդը ընդգծելու համար, նշվում է ապոստրոֆների միջոցով - `:
    • օրինակ՝ «monospace font»:
    • արդյունք: моноширинный шрифт

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 Task Scheduler-ի ստուգում և անսովոր կերպով ավարտված առաջադրանքների մասին ծանուցումներ ուղարկելը

Windows Task Scheduler-ի հետ աշխատելու համար անհրաժեշտ է տեղադրել փաթեթը 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 config

[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. Այս ֆայլի կանոնավոր գործարկումը պլանավորելու համար հետևեք հետևյալ քայլերին.

  1. Path system փոփոխականում գրեք դեպի այն թղթապանակի ուղին, որտեղ R-ը տեղադրված է, Windows-ում ուղին կլինի այսպիսին. C:Program FilesRR-4.0.2bin.
  2. Ստեղծեք գործարկվող bat ֆայլ ընդամենը մեկ տողով R CMD BATCH C:rscriptscheck_botcheck_bot.R. Փոխարինել C:rscriptscheck_botcheck_bot.R դեպի ձեր R ֆայլի ամբողջական ուղին:
  3. Հաջորդը, օգտագործեք Windows Task Scheduler-ը՝ գործարկման ժամանակացույցը կարգավորելու համար, օրինակ՝ յուրաքանչյուր կես ժամը մեկ:

Ամփոփում

Այս հոդվածում մենք պարզեցինք, թե ինչպես ստեղծել բոտ և օգտագործել այն հեռագրում տարբեր ծանուցումներ ուղարկելու համար:

Ես նկարագրեցի Windows Task Scheduler-ի մոնիտորինգի խնդիրը, բայց դուք կարող եք օգտագործել այս հոդվածի նյութը ցանկացած ծանուցումներ ուղարկելու համար՝ սկսած եղանակի կանխատեսումից մինչև ֆոնդային բորսայի գնանշումներ, քանի որ R-ն թույլ է տալիս միանալ տվյալների հսկայական քանակի աղբյուրներին:

Հաջորդ հոդվածում մենք կպարզենք, թե ինչպես կարելի է հրամաններ և ստեղնաշար ավելացնել բոտին, որպեսզի այն կարողանա ոչ միայն ծանուցումներ ուղարկել, այլև կատարել ավելի բարդ գործողություններ:

Source: www.habr.com

Добавить комментарий