Sähkebotin kirjoittaminen R:ssä (osa 1): Botin luominen ja sen käyttäminen viestien lähettämiseen sähkeessä

Telegram-yleisö kasvaa eksponentiaalisesti joka päivä, tätä helpottaa lähettimen mukavuus, kanavien läsnäolo, keskustelut ja tietysti kyky luoda botteja.

Boteja voidaan käyttää täysin erilaisiin tarkoituksiin asiakkaiden kanssa viestinnän automatisoinnista omien tehtävien hallintaan.

Pohjimmiltaan voit käyttää sähkettä suorittaaksesi mitä tahansa toimintoja botin kautta: lähettää tai pyytää tietoja, suorittaa tehtäviä palvelimella, kerätä tietoja tietokantaan, lähettää sähköposteja ja niin edelleen.

Aion kirjoittaa sarjan artikkeleita työskentelystä telegram bot API, ja kirjoittaa tarpeitasi vastaavia botteja.

Sähkebotin kirjoittaminen R:ssä (osa 1): Botin luominen ja sen käyttäminen viestien lähettämiseen sähkeessä

Tässä ensimmäisessä artikkelissa selvitetään, kuinka luodaan sähkebotti ja käytetään sitä ilmoitusten lähettämiseen sähkeessä.

Tämän seurauksena meillä on botti, joka tarkistaa kaikkien Windows Task Scheduler -tehtävien viimeisen suorituksen tilan ja lähettää sinulle ilmoituksia, jos jokin niistä epäonnistuu.

Mutta tämän artikkelisarjan tarkoituksena ei ole opettaa sinulle robotin kirjoittamista tiettyä, kapeaa tehtävää varten, vaan yleisellä tasolla esitellä paketin syntaksi. telegram.bot, ja koodiesimerkkejä, joilla voit kirjoittaa botteja omien ongelmien ratkaisemiseksi.

Pitoisuus

Jos olet kiinnostunut data-analyysistä, saatat olla kiinnostunut minun sähke и youtube kanavia. Suurin osa sisällöstä on omistettu R-kielelle.

  1. Telegram-botin luominen
  2. Paketin asentaminen sähkebotin kanssa työskentelemiseen R:ssä
  3. Viestien lähettäminen R:stä Telegramiin
  4. Aikataulun määrittäminen tehtäväskannausten suorittamista varten
  5. Johtopäätös

Telegram-botin luominen

Ensin meidän on luotava botti. Tämä tehdään käyttämällä erityistä bottia BotIsä, mene linkki ja kirjoita bottiin /start.

Sen jälkeen saat viestin, jossa on luettelo komentoista:

Viesti BotFatherilta

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

Luo uusi botti lähettämällä komento /newbot.

BotFather pyytää sinua antamaan botin nimen ja kirjautumistunnuksen.

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

Voit kirjoittaa minkä tahansa nimen, mutta sisäänkirjautumisen tulee päättyä bot.

Jos teit kaiken oikein, saat seuraavan viestin:

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

Seuraavaksi tarvitset vastaanotetun API-tunnuksen, esimerkissäni se on 123456789:abcdefghijklmnopqrstuvwxyz.

Tässä vaiheessa botin luomisen valmistelutyö on valmis.

Paketin asentaminen sähkebotin kanssa työskentelemiseen R:ssä

Oletan, että sinulla on jo asennettuna R-kieli ja RStudio-kehitysympäristö. Jos näin ei ole, voit katsoa tätä video oppitunti kuinka ne asennetaan.

Työskenteleksemme Telegram Bot API:n kanssa käytämme R-pakettia telegram.bot.

Pakettien asentaminen R:hen tapahtuu funktiolla install.packages(), joten käytä komentoa asentaaksesi tarvitsemamme paketin install.packages("telegram.bot").

Saat lisätietoja eri pakettien asentamisesta osoitteesta Tämä video.

Kun olet asentanut paketin, sinun on yhdistettävä se:

library(telegram.bot)

Viestien lähettäminen R:stä Telegramiin

Luomasi botti löytyy Telegramista luomisen yhteydessä määritetyllä kirjautumistunnuksella, minun tapauksessani se on @my_test_bot.

Lähetä botille mikä tahansa viesti, kuten "Hei bot". Tällä hetkellä tarvitsemme tätä saadaksemme tunnuksen chatistasi botin kanssa.

Nyt kirjoitamme seuraavan koodin R:llä.

library(telegram.bot)

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

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

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

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

Aluksi luomme esiintymän botistamme toiminnolla Bot(), aiemmin vastaanotettu merkki on välitettävä siihen argumenttina.

Tokenin tallentamista koodiin ei pidetä parhaana käytäntönä, joten voit tallentaa sen ympäristömuuttujaan ja lukea sen siitä. Oletuksena paketissa telegram.bot Tuki seuraavien nimien ympäristömuuttujille on otettu käyttöön: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА... Sijasta ИМЯ_ВАШЕГО_БОТА korvaa luodessasi määrittämäsi nimi, minun tapauksessani se on muuttuja R_TELEGRAM_BOT_My Test Bot.

Ympäristömuuttujan luomiseen on useita tapoja; kerron sinulle yleisimmästä ja monialustaisimman. Luo kotihakemistoosi (löydät sen komennolla path.expand("~")) tekstitiedosto, jossa on nimi .Renviron. Voit tehdä tämän myös komennolla file.edit(path.expand(file.path("~", ".Renviron"))).

Ja lisää siihen seuraava rivi.

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

Seuraavaksi voit käyttää funktion avulla ympäristömuuttujaan tallennettua merkkiä bot_token(), eli kuten tämä:

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

menetelmä getUpdates()antaa meille mahdollisuuden saada bot-päivityksiä, ts. hänelle lähetetyt viestit. Menetelmä from_chat_id(), voit saada sen chatin tunnuksen, josta viesti lähetettiin. Tarvitsemme tämän tunnuksen lähettääksemme viestejä botilta.

Menetelmällä saadun objektin chat-tunnuksen lisäksi getUpdates() saat myös muuta hyödyllistä tietoa. Esimerkiksi tiedot viestin lähettäneestä käyttäjästä.

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"

Joten tässä vaiheessa meillä on jo kaikki mitä tarvitsemme lähettääksemme viestin robotista Telegramiin. Käytetään menetelmää sendMessage(), johon sinun on välitettävä chat-tunnus, viestin teksti ja viestin tekstin merkintätyyppi. Merkintätyyppi voi olla Markdown tai HTML, ja se asetetaan argumentilla parse_mode.

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

Markdown-muotoilun perusteet:

  • Lihavoitu fontti on korostettu *:
    • esimerkiksi: *жирный шритф*
    • tulos: lihavoitu kirjasin
  • Kursivointi on merkitty alaviivalla:
    • esimerkiksi: _курсив_
    • tulos: kursivoitu
  • Monospace-fontti, jota yleensä käytetään korostamaan ohjelmakoodia, määritetään heittomerkeillä - `:
    • esimerkki: "monospace font".
    • tulos: моноширинный шрифт

HTML-merkintöjen muotoilun perusteet:
HTML:ssä kääritään korostettava osa tekstistä esim. tageihin <тег>текст</тег>.

  • <tag> - avaustunniste
  • - sulkeva tag

HTML-merkintätunnisteet

  • <b> - lihavoitu kirjasin
    • esimerkiksi: <b>жирный шрифт</b>
    • tulos lihavoitu kirjasin
  • <i> - kursivoitu
    • esimerkiksi: <i>курсив</i>
    • tulos: kursivoitu
  • — моноширинный шрифт
    • esimerkki: моноширинный шрифт
    • tulos: моноширинный шрифт

Tekstin lisäksi voit lähettää muuta sisältöä erikoismenetelmin:

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

Nuo. esimerkiksi käyttämällä menetelmää sendPhoto() Voit lähettää paketilla luomasi kuvana tallennetun kaavion ggplot2.

Windowsin Tehtävien ajoituksen tarkistaminen ja ilmoitusten lähettäminen tehtävistä, jotka ovat päättyneet epänormaalisti

Jotta voit työskennellä Windows Task Schedulerin kanssa, sinun on asennettava paketti taskscheduleR, ja asenna paketti tietojen käsittelyn helpottamiseksi dplyr.

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

Seuraavaksi funktion avulla taskscheduler_ls() pyydämme tietoa tehtävistä aikataulutajaltamme. Toiminnon käyttäminen filter() paketista dplyr Poistamme luettelosta tehtävät, jotka suoritettiin onnistuneesti ja joiden viimeisen tuloksen tila on 0, ja ne, joita ei ole koskaan käynnistetty ja joiden tila on 267011, poistetut tehtävät ja tällä hetkellä käynnissä olevat tehtävät.

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

Objektissa task Meillä on nyt luettelo epäonnistuneista tehtävistä, meidän on lähetettävä tämä luettelo Telegramille.

Jos tarkastelemme jokaista komentoa yksityiskohtaisemmin, niin:

  • filter() — suodattaa tehtäväluettelon edellä kuvattujen ehtojen mukaisesti
  • select() — jättää taulukkoon vain yhden kentän, jossa on tehtävien nimi
  • unique() - poistaa päällekkäiset nimet
  • unlist() — muuntaa valitun taulukon sarakkeen vektoriksi
  • paste0() — yhdistää tehtävien nimet yhdelle riville ja asettaa rivinsiirron erottimeksi, ts. n.

Meidän tarvitsee vain lähettää tämä tulos sähkeenä.

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

Joten tällä hetkellä botin koodi näyttää tältä:

Tehtävän tarkistusbotin koodi

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

}

Kun käytät yllä olevaa esimerkkiä, korvaa koodiin bot-tunnus ja chat-tunnuksesi.

Voit lisätä ehtoja tehtävien suodattamiseen, esimerkiksi tarkistaa vain itse luomasi tehtävät, pois lukien järjestelmätehtävät.

Voit myös laittaa erilaisia ​​asetuksia erilliseen asetustiedostoon ja tallentaa chat-tunnuksen ja -tunnuksen siihen. Voit lukea konfiguraation esimerkiksi paketin avulla configr.

Esimerkki ini config

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

Esimerkki muuttujien lukemisesta R:n konfiguraatiosta

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

Aikataulun määrittäminen tehtäväskannausten suorittamista varten

Ajoitettujen skriptien käynnistysten määrittäminen on kuvattu yksityiskohtaisemmin tässä статье. Tässä kuvailen vain vaiheet, jotka on suoritettava tätä varten. Jos jokin vaiheista ei ole sinulle selvä, katso artikkeli, johon annoin linkin.

Oletetaan, että olemme tallentaneet bot-koodimme tiedostoon check_bot.R. Voit ajoittaa tämän tiedoston toimimaan säännöllisesti seuraavasti:

  1. Kirjoita Polku-järjestelmämuuttujaan sen kansion polku, johon R on asennettu; Windowsissa polku on suunnilleen seuraava: C:Program FilesRR-4.0.2bin.
  2. Luo suoritettava bat-tiedosto yhdellä rivillä R CMD BATCH C:rscriptscheck_botcheck_bot.R. Korvata C:rscriptscheck_botcheck_bot.R R-tiedostosi koko polkuun.
  3. Määritä seuraavaksi käynnistysaikataulu esimerkiksi puolen tunnin välein Windowsin Tehtävien ajoituksen avulla.

Johtopäätös

Tässä artikkelissa selvitimme, kuinka luoda botti ja käyttää sitä erilaisten ilmoitusten lähettämiseen sähkeessä.

Kuvasin Windows Task Schedulerin valvonnan tehtävää, mutta tämän artikkelin materiaalin avulla voit lähettää ilmoituksia sääennusteesta pörssin pörssikursseihin, koska R:n avulla voit muodostaa yhteyden valtavaan määrään tietolähteitä.

Seuraavassa artikkelissa selvitetään, kuinka lisätä komentoja ja näppäimistöä bottiin, jotta se ei voi vain lähettää ilmoituksia, vaan myös suorittaa monimutkaisempia toimintoja.

Lähde: will.com

Lisää kommentti