ProHoster > Օրագիր > Վարչակազմը > Մենք գրում ենք հեռագրային բոտ R լեզվով (մաս 1). Ստեղծեք բոտ և հաղորդագրություններ ուղարկեք telegram-ին դրա միջոցով
Մենք գրում ենք հեռագրային բոտ R լեզվով (մաս 1). Ստեղծեք բոտ և հաղորդագրություններ ուղարկեք telegram-ին դրա միջոցով
Telegram-ի լսարանը օրեցօր երկրաչափական աճ է գրանցում, դրան նպաստում է մեսենջերի հարմարավետությունը, ալիքների, չաթերի առկայությունը և, իհարկե, բոտեր ստեղծելու հնարավորությունը:
Բոտերը կարող են օգտագործվել բոլորովին այլ նպատակներով՝ սկսած ձեր հաճախորդների հետ հաղորդակցության ավտոմատացումից մինչև ձեր սեփական խնդիրները կառավարելը:
Ըստ էության, դուք կարող եք օգտագործել Telegram-ը բոտի միջոցով ցանկացած գործողություն իրականացնելու համար՝ ուղարկել կամ պահանջել տվյալներ, առաջադրանքներ առաջադրել սերվերի վրա, տեղեկատվություն հավաքել տվյալների բազայում, ուղարկել էլ. նամակներ և այլն:
Ես նախատեսում եմ հոդվածների շարք գրել, թե ինչպես աշխատել telegram bot API, և գրեք բոտեր՝ ձեր կարիքներին համապատասխան:
Այս առաջին հոդվածում մենք կպարզենք, թե ինչպես ստեղծել telegram բոտ և օգտագործել այն Telegram-ում ծանուցումներ ուղարկելու համար:
Արդյունքում մենք կունենանք բոտ, որը կստուգի Windows Task Scheduler-ում բոլոր առաջադրանքների վերջին կատարման կարգավիճակը և կուղարկի ձեզ ծանուցումներ, եթե դրանցից որևէ մեկը ձախողվի:
Բայց այս հոդվածաշարի նպատակը ձեզ սովորեցնելը չէ, թե ինչպես գրել բոտ կոնկրետ, նեղ առաջադրանքի համար, այլ ընդհանուր առմամբ ձեզ ծանոթացնել փաթեթի շարահյուսությանը: telegram.bot, և կոդերի օրինակներ, որոնցով կարող եք գրել բոտեր՝ ձեր սեփական խնդիրները լուծելու համար։
Պարունակություն
Եթե դուք հետաքրքրված եք տվյալների վերլուծությամբ, ապա ձեզ կարող է հետաքրքրել իմը հեռագիր и youtube ալիքներ. Բովանդակության մեծ մասը նվիրված է R լեզվին։
Նախ, մենք պետք է ստեղծենք բոտ: Դա արվում է հատուկ բոտի միջոցով 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"))).
Հաջորդը, գործառույթի միջոցով կարող եք օգտագործել շրջակա միջավայրի փոփոխականում պահպանված նշանը bot_token(), այսինքն. սրա նման:
bot <- Bot(token = bot_token("My Test Bot"))
մեթոդ getUpdates()թույլ է տալիս մեզ ստանալ բոտի թարմացումներ, այսինքն. հաղորդագրությունները, որոնք ուղարկվել են նրան: Մեթոդ from_chat_id(), թույլ է տալիս ստանալ չաթի ID-ն, որից ուղարկվել է հաղորդագրությունը: Մեզ անհրաժեշտ է այս ID-ն՝ բոտից հաղորդագրություններ ուղարկելու համար:
Ի հավելումն մեթոդով ստացված օբյեկտի չաթի ID-ին getUpdates() դուք նաև ստանում եք մի քանի այլ օգտակար տեղեկատվություն: Օրինակ՝ հաղորդագրություն ուղարկած օգտատիրոջ մասին տեղեկություն։
Այսպիսով, այս փուլում մենք արդեն ունենք այն ամենը, ինչ անհրաժեշտ է բոտից 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>
արդյունք: շեղագիր
— моноширинный шрифт
օրինակ՝ моноширинный шрифт
արդյունք: моноширинный шрифт
Բացի տեքստից, դուք կարող եք ուղարկել այլ բովանդակություն՝ օգտագործելով հատուկ մեթոդներ.
Նրանք. օրինակ օգտագործելով մեթոդը 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 Այժմ մենք ունենք ձախողված առաջադրանքների ցանկ, մենք պետք է ուղարկենք այս ցուցակը 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"
Սցենարների գործարկման ժամանակացույցով կարգավորելու գործընթացը ավելի մանրամասն նկարագրված է սրանում Հոդված. Այստեղ ես միայն նկարագրելու եմ այն քայլերը, որոնք պետք է հետևել դրա համար: Եթե քայլերից որևէ մեկը ձեզ համար պարզ չէ, ապա դիմեք այն հոդվածին, որին հղում եմ տվել:
Ենթադրենք, որ մենք պահել ենք մեր բոտի կոդը ֆայլում check_bot.R. Այս ֆայլի կանոնավոր գործարկումը պլանավորելու համար հետևեք հետևյալ քայլերին.
Path system փոփոխականում գրեք դեպի այն թղթապանակի ուղին, որտեղ R-ը տեղադրված է, Windows-ում ուղին կլինի այսպիսին. C:Program FilesRR-4.0.2bin.
Ստեղծեք գործարկվող bat ֆայլ ընդամենը մեկ տողով R CMD BATCH C:rscriptscheck_botcheck_bot.R. Փոխարինել C:rscriptscheck_botcheck_bot.R դեպի ձեր R ֆայլի ամբողջական ուղին:
Հաջորդը, օգտագործեք Windows Task Scheduler-ը՝ գործարկման ժամանակացույցը կարգավորելու համար, օրինակ՝ յուրաքանչյուր կես ժամը մեկ:
Ամփոփում
Այս հոդվածում մենք պարզեցինք, թե ինչպես ստեղծել բոտ և օգտագործել այն հեռագրում տարբեր ծանուցումներ ուղարկելու համար:
Ես նկարագրեցի Windows Task Scheduler-ի մոնիտորինգի խնդիրը, բայց դուք կարող եք օգտագործել այս հոդվածի նյութը ցանկացած ծանուցումներ ուղարկելու համար՝ սկսած եղանակի կանխատեսումից մինչև ֆոնդային բորսայի գնանշումներ, քանի որ R-ն թույլ է տալիս միանալ տվյալների հսկայական քանակի աղբյուրներին:
Հաջորդ հոդվածում մենք կպարզենք, թե ինչպես կարելի է հրամաններ և ստեղնաշար ավելացնել բոտին, որպեսզի այն կարողանա ոչ միայն ծանուցումներ ուղարկել, այլև կատարել ավելի բարդ գործողություններ: