Að skrifa símskeyti botni í R (hluti 1): Búa til botni og nota hann til að senda skilaboð í símskeyti

Telegram áhorfendum stækkar gífurlega á hverjum degi, þetta er auðveldað af þægindum boðberans, nærveru rása, spjalla og auðvitað getu til að búa til vélmenni.

Hægt er að nota vélmenni í allt öðrum tilgangi, allt frá því að gera sjálfvirk samskipti við viðskiptavini þína til að stjórna eigin verkefnum.

Í meginatriðum geturðu notað símskeyti til að framkvæma allar aðgerðir í gegnum vélmenni: senda eða biðja um gögn, keyra verkefni á þjóninum, safna upplýsingum í gagnagrunn, senda tölvupóst og svo framvegis.

Ég ætla að skrifa röð greina um hvernig á að vinna með telegram bot API, og skrifaðu vélmenni sem henta þínum þörfum.

Að skrifa símskeyti botni í R (hluti 1): Búa til botni og nota hann til að senda skilaboð í símskeyti

Í þessari fyrstu grein munum við finna út hvernig á að búa til símskeyti láni og nota hann til að senda tilkynningar í símskeyti.

Fyrir vikið munum við hafa vélmenni sem mun athuga stöðu síðustu framkvæmd allra verkefna í Windows Task Scheduler og senda þér tilkynningar ef eitthvað þeirra mistókst.

En tilgangurinn með þessari greinaröð er ekki að kenna þér hvernig á að skrifa vélmenni fyrir tiltekið, þröngt verkefni, heldur að kynna þér almennt setningafræði pakkans. telegram.bot, og kóðadæmi sem þú getur skrifað vélmenni með til að leysa eigin vandamál.

efni

Ef þú hefur áhuga á gagnagreiningu gætirðu haft áhuga á mínum símskeyti и YouTube rásir. Mest af efninu er tileinkað R tungumálinu.

  1. Að búa til símskeyti botni
  2. Að setja upp pakka til að vinna með símskeyti botni í R
  3. Sendi skilaboð frá R til Telegram
  4. Að setja upp áætlun fyrir að keyra verkskannanir
  5. Ályktun

Að búa til símskeyti botni

Fyrst þurfum við að búa til vélmenni. Þetta er gert með því að nota sérstaka vélmenni BotFaðir, fara til tengill og skrifaðu til botnsins /start.

Eftir það færðu skilaboð með lista yfir skipanir:

Skilaboð frá 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

Sendu skipunina til að búa til nýja láni /newbot.

BotFather mun biðja þig um að slá inn nafn vélmennisins og innskráningu.

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

Þú getur slegið inn hvaða nafn sem er, en innskráning verður að enda á bot.

Ef þú gerðir allt rétt færðu eftirfarandi skilaboð:

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

Næst þarftu móttekna API táknið, í mínu dæmi er það 123456789:abcdefghijklmnopqrstuvwxyz.

Á þessu skrefi er undirbúningsvinnunni fyrir að búa til botninn lokið.

Að setja upp pakka til að vinna með símskeyti botni í R

Ég geri ráð fyrir að þú sért nú þegar með R tungumálið og RStudio þróunarumhverfið uppsett. Ef þetta er ekki raunin, þá er hægt að skoða þetta myndbandsnám um hvernig eigi að setja þau upp.

Til að vinna með Telegram Bot API munum við nota R pakkann telegram.bot.

Uppsetning pakka í R er gerð með aðgerðinni install.packages(), svo til að setja upp pakkann sem við þurfum skaltu nota skipunina install.packages("telegram.bot").

Þú getur lært meira um uppsetningu á ýmsum pakka frá þetta myndband.

Eftir að pakkinn hefur verið settur upp þarftu að tengja hann:

library(telegram.bot)

Sendi skilaboð frá R til Telegram

Botninn sem þú bjóst til er að finna í Telegram með því að nota innskráninguna sem tilgreind var við stofnun, í mínu tilfelli er það það @my_test_bot.

Sendu láni hvaða skilaboð sem er, eins og "Hey láni." Í augnablikinu þurfum við þetta til að fá auðkenni spjallsins þíns við botmanninn.

Nú skrifum við eftirfarandi kóða í R.

library(telegram.bot)

# создаём экземпляр бота
bot <- Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz")

# Запрашиваем информацию о боте
print(bot$getMe())

# Получаем обновления бота, т.е. список отправленных ему сообщений
updates <- bot$getUpdates()

# Запрашиваем идентификатор чата
# Примечание: перед запросом обновлений вы должны отправить боту сообщение
chat_id <- updates[[1L]]$from_chat_id()

Upphaflega búum við til dæmi af botni okkar með aðgerðinni Bot(), þarf að senda áður móttekið tákn inn í það sem rök.

Að geyma táknið í kóða er ekki talin besta starfsvenjan, svo þú getur geymt það í umhverfisbreytu og lesið það úr henni. Sjálfgefið í pakka telegram.bot Stuðningur við umhverfisbreytur með eftirfarandi nöfnum hefur verið innleiddur: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Í staðinn ИМЯ_ВАШЕГО_БОТА komdu í staðinn fyrir nafnið sem þú tilgreindir þegar þú bjóst til, í mínu tilfelli verður það breyta R_TELEGRAM_BOT_My Test Bot.

Það eru nokkrar leiðir til að búa til umhverfisbreytu; ég mun segja þér frá þeirri alhliða og þvert á vettvang. Búðu til í heimaskránni þinni (þú getur fundið það með skipuninni path.expand("~")) textaskrá með nafninu .Environ. Þú getur líka gert þetta með skipuninni file.edit(path.expand(file.path("~", ".Renviron"))).

Og bættu eftirfarandi línu við það.

R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

Næst geturðu notað táknið sem er vistað í umhverfisbreytunni með því að nota aðgerðina bot_token(), þ.e. svona:

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

Aðferð getUpdates()gerir okkur kleift að fá bot uppfærslur, þ.e. skilaboð sem honum voru send. Aðferð from_chat_id(), gerir þér kleift að fá auðkenni spjallsins sem skilaboðin voru send frá. Við þurfum þetta auðkenni til að senda skilaboð frá botni.

Auk spjallauðkennisins frá hlutnum sem fæst með aðferðinni getUpdates() þú færð líka aðrar gagnlegar upplýsingar. Til dæmis upplýsingar um notandann sem sendi skilaboðin.

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"

Svo á þessu stigi höfum við nú þegar allt sem við þurfum til að senda skilaboð frá vélmenni til Telegram. Notum aðferðina sendMessage(), þar sem þú þarft að senda spjallauðkenni, skilaboðatexta og textamerkjagerð skilaboða. Álagningargerðin getur verið Markdown eða HTML og er stillt af röksemdinni parse_mode.

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

Grunnatriði Markdown snið:

  • Feitletrað letur er auðkennt með *:
    • dæmi: *жирный шритф*
    • niðurstaða: feitletrun
  • Skáletrun er auðkennd með undirstrikun:
    • dæmi: _курсив_
    • niðurstaða: skáletrun
  • Einrúma leturgerðin, sem venjulega er notuð til að auðkenna forritskóða, er tilgreind með því að nota frávik - `:
    • dæmi: 'einrúms leturgerð'
    • niðurstaða: моноширинный шрифт

Grunnatriði um að forsníða HTML merkingu:
Í HTML pakkar þú þeim hluta textans sem þarf að vera auðkenndur í tög <тег>текст</тег>.

  • <tag> - opnunarmerki
  • - lokunarmerki

HTML merkingarmerki

  • <b> - feitletrun
    • dæmi: <b>жирный шрифт</b>
    • Niðurstaðan feitletrun
  • <i> - skáletrun
    • dæmi: <i>курсив</i>
    • niðurstaða: skáletrun
  • — моноширинный шрифт
    • dæmi: моноширинный шрифт
    • niðurstaða: моноширинный шрифт

Auk texta geturðu sent annað efni með sérstökum aðferðum:

# Отправить изображение
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"
)

Þeir. til dæmis að nota aðferðina sendPhoto() þú getur sent graf sem er vistað sem mynd sem þú bjóst til með pakkanum ggplot2.

Athugaðu Windows Task Scheduler og sendu tilkynningar um verkefni sem hafa hætt óeðlilega

Til að vinna með Windows Task Scheduler þarftu að setja upp pakkann taskscheduleR, og til að auðvelda vinnu með gögn skaltu setja upp pakkann dplyr.

# Установка пакетов
install.packages(c('taskscheduleR', 'dplyr'))
# Подключение пакетов
library(taskscheduleR)
library(dplyr)

Næst skaltu nota aðgerðina taskscheduler_ls() við óskum eftir upplýsingum um verkefni frá tímaáætlun okkar. Að nota aðgerðina filter() úr pakkanum dplyr Við fjarlægjum af lista yfir verkefni þau sem tókst að klára og hafa síðustu niðurstöðu stöðuna 0, og þau sem hafa aldrei verið ræst og hafa stöðuna 267011, óvirk verkefni og verkefni sem eru í gangi.

# запрашиваем список задач
task <- task <- taskscheduler_ls() %>%
        filter(! `Last Result`  %in% c("0", "267011") & 
               `Scheduled Task State` == "Enabled" & 
               Status != "Running") %>%
        select(TaskName) %>%
        unique() %>%
        unlist() %>%
        paste0(., collapse = "n")

Í hlutnum task Við höfum nú lista yfir verkefni sem mistókst, við þurfum að senda þennan lista til Telegram.

Ef við skoðum hverja skipun nánar, þá:

  • filter() — síar lista yfir verkefni í samræmi við skilyrðin sem lýst er hér að ofan
  • select() — skilur aðeins eftir einn reit í töflunni með heiti verkefna
  • unique() - fjarlægir tvöföld nöfn
  • unlist() — breytir völdum töfludálki í vektor
  • paste0() — tengir nöfn verkefna í eina línu, og setur línustraum sem skilju, þ.e. n.

Allt sem er eftir fyrir okkur er að senda þessa niðurstöðu með símskeyti.

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

Svo, í augnablikinu lítur botakóðinn svona út:

Kóði fyrir verkefnaskoðun

# Подключение пакета
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"
  )

}

Þegar þú notar dæmið hér að ofan skaltu skipta út vélaramerkinu þínu og spjallauðkenninu þínu í kóðann.

Þú getur bætt við skilyrðum fyrir síun verkefna, til dæmis að haka aðeins við þau verkefni sem þú bjóst til, að undanskildum verkefnum.

Þú getur líka sett ýmsar stillingar í sérstaka stillingarskrá og geymt spjallauðkenni og tákn í henni. Þú getur lesið stillingarnar, til dæmis með því að nota pakkann configr.

Dæmi ini config

[telegram_bot]
;настройки телеграм бота и чата, в который будут приходить уведомления
chat_id=12345678
bot_token=123456789:abcdefghijklmnopqrstuvwxyz"

Dæmi um að lesa breytur úr stillingu í 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

Að setja upp áætlun fyrir að keyra verkskannanir

Ferlið við að setja upp ræsingu handrita á áætlun er lýst nánar í þessu grein. Hér mun ég aðeins lýsa þeim skrefum sem þarf að fylgja fyrir þetta. Ef eitthvað af skrefunum er ekki ljóst fyrir þig skaltu vísa til greinarinnar sem ég gaf hlekk á.

Gerum ráð fyrir að við vistum lánakóðann okkar í skrá check_bot.R. Til að skipuleggja þessa skrá til að keyra reglulega skaltu fylgja þessum skrefum:

  1. Skrifaðu slóðina að möppunni sem R er sett upp í í Path kerfisbreytunni; í Windows verður slóðin eitthvað á þessa leið: C:Program FilesRR-4.0.2bin.
  2. Búðu til keyranlega kylfuskrá með aðeins einni línu R CMD BATCH C:rscriptscheck_botcheck_bot.R. Skipta um C:rscriptscheck_botcheck_bot.R að fullu leiðinni að R skránni þinni.
  3. Næst skaltu nota Windows Task Scheduler til að setja upp ræsingaráætlun, til dæmis á hálftíma fresti.

Ályktun

Í þessari grein komumst við að því hvernig á að búa til vélmenni og nota hann til að senda ýmsar tilkynningar í símskeyti.

Ég lýsti því verkefni að fylgjast með Windows Task Scheduler, en þú getur notað efnið í þessari grein til að senda allar tilkynningar, allt frá veðurspá til hlutabréfaverðs í kauphöllinni, vegna þess að R gerir þér kleift að tengjast miklum fjölda gagnagjafa.

Í næstu grein munum við reikna út hvernig á að bæta skipunum og lyklaborði við botninn þannig að hann geti ekki aðeins sent tilkynningar heldur einnig framkvæmt flóknari aðgerðir.

Heimild: www.habr.com

Bæta við athugasemd