เราเขียนบอทโทรเลขในภาษา R (ตอนที่ 1): สร้างบอทและส่งข้อความไปยังโทรเลขโดยใช้มัน

ผู้ชมโทรเลขเพิ่มขึ้นอย่างทวีคูณทุกวัน สิ่งนี้อำนวยความสะดวกด้วยความสะดวกของผู้ส่งสาร ความพร้อมใช้งานของช่อง การแชท และแน่นอน ความสามารถในการสร้างบอท

สามารถใช้บอทเพื่อวัตถุประสงค์ที่หลากหลาย ตั้งแต่การสื่อสารกับลูกค้าโดยอัตโนมัติไปจนถึงการจัดการงานของคุณเอง

อันที่จริง คุณสามารถใช้โทรเลขเพื่อดำเนินการใดๆ ผ่านบอท: ส่งหรือขอข้อมูล เรียกใช้งานบนเซิร์ฟเวอร์ รวบรวมข้อมูลในฐานข้อมูล ส่งอีเมล และอื่นๆ

ฉันวางแผนที่จะเขียนบทความเกี่ยวกับวิธีการทำงานกับ R ใน R API บอตโทรเลขและเขียนบอทตามความต้องการของคุณ

เราเขียนบอทโทรเลขในภาษา R (ตอนที่ 1): สร้างบอทและส่งข้อความไปยังโทรเลขโดยใช้มัน

ในบทความแรกนี้ เราจะหาวิธีสร้างบอทโทรเลขและส่งการแจ้งเตือนไปยังโทรเลขโดยใช้มัน

ด้วยเหตุนี้ เราจึงมีบอตที่จะตรวจสอบสถานะของการดำเนินการล่าสุดของงานทั้งหมดใน Windows Task Scheduler และส่งการแจ้งเตือนถึงคุณหากมีสิ่งใดล้มเหลว

แต่จุดประสงค์ของบทความชุดนี้ไม่ใช่เพื่อสอนวิธีเขียนบอทสำหรับงานเฉพาะเจาะจงแต่เพื่อแนะนำคุณเกี่ยวกับไวยากรณ์ของแพ็คเกจโดยทั่วไป telegram.botและตัวอย่างโค้ดที่คุณสามารถเขียนบอทเพื่อแก้ปัญหาของคุณเองได้

Содержание

หากคุณสนใจในการวิเคราะห์ข้อมูล คุณอาจสนใจใน my โทรเลข и YouTube ช่อง. เนื้อหาส่วนใหญ่เกี่ยวกับภาษา R

  1. การสร้างบอตโทรเลข
  2. การติดตั้งแพ็คเกจสำหรับทำงานกับบอทโทรเลขบน R
  3. ส่งข้อความจาก R ถึง Telegram
  4. การกำหนดค่ากำหนดการเปิดตัวการสแกนงาน
  5. ข้อสรุป

การสร้างบอตโทรเลข

ก่อนอื่นเราต้องสร้างบอท ทำได้โดยใช้บอทพิเศษ บอทพ่อ, ไปที่ ลิงค์ และเขียนถึงบอท /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

ฉันถือว่าคุณได้ติดตั้งภาษา R และสภาพแวดล้อมการพัฒนา RStudio แล้ว หากไม่เป็นเช่นนั้น คุณสามารถดูสิ่งนี้ได้ บทเรียนวิดีโอ เกี่ยวกับวิธีการติดตั้ง

ในการทำงานกับ Telegram Bot API เราจะใช้แพ็คเกจ R โทรเลข.bot.

การติดตั้งแพ็คเกจใน R ทำได้โดยฟังก์ชัน install.packages()ดังนั้นในการติดตั้งแพ็คเกจที่เราต้องการให้ใช้คำสั่ง install.packages("telegram.bot").

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งแพ็คเกจต่างๆ โปรดดูที่ วิดีโอนี้.

หลังจากติดตั้งแพ็คเกจแล้ว คุณต้องเชื่อมต่อ:

library(telegram.bot)

ส่งข้อความจาก R ถึง Telegram

บอทที่คุณสร้างสามารถพบได้ใน Telegram โดยใช้ชื่อล็อกอินที่ระบุระหว่างการสร้าง ในกรณีของฉันก็คือ @my_test_bot.

ส่งข้อความถึงบอท เช่น "สวัสดีบอท" ในขณะนี้ เราต้องการสิ่งนี้เพื่อรับรหัสการแชทของคุณกับบอท

ตอนนี้ใน 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 ของการแชทที่ส่งข้อความ เราต้องการตัวระบุนี้เพื่อส่งข้อความจากบอท

นอกเหนือจากรหัสแชทจากวัตถุที่ได้รับโดยวิธีการ 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"

ดังนั้น ในขั้นตอนนี้ เรามีทุกสิ่งที่จำเป็นในการส่งข้อความจากบอทไปยังโทรเลขแล้ว ลองใช้วิธี sendMessage()ซึ่งคุณจะต้องส่ง ID การแชท ข้อความ และประเภทมาร์กอัปของข้อความ ประเภทมาร์กอัปสามารถเป็น Markdown หรือ HTML และถูกกำหนดโดยอาร์กิวเมนต์ parse_mode.

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

พื้นฐานการจัดรูปแบบ Markdown:

  • ตัวอักษรหนามีเครื่องหมาย *:
    • ตัวอย่างเช่น: *жирный шритф*
    • ผลลัพธ์: สคริปต์ตัวหนา
  • ตัวเอียงถูกกำหนดโดยขีดล่าง:
    • ตัวอย่างเช่น: _курсив_
    • ผลลัพธ์: ตัวเอียง
  • แบบอักษรที่มีช่องว่างคงที่ ซึ่งโดยปกติจะใช้เพื่อเน้นรหัสโปรแกรม ระบุโดยใช้เครื่องหมายอะพอสทรอฟี - `:
    • ตัวอย่าง: `แบบอักษรโมโนสเปซ`
    • ผลลัพธ์: моноширинный шрифт

พื้นฐานการจัดรูปแบบมาร์กอัป HTML:
ใน HTML คุณจะตัดส่วนของข้อความที่คุณต้องการเน้นในแท็ก เช่น <тег>текст</тег>.

  • <แท็ก> — แท็กเปิด
  • - แท็กปิด

แท็กมาร์กอัป 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 ตอนนี้เรามีรายการงานที่จบลงด้วยข้อผิดพลาด เราต้องส่งรายการนี้ไปที่โทรเลข

หากเราพิจารณาแต่ละคำสั่งโดยละเอียดแล้ว:

  • 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

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

ตัวอย่างการอ่านตัวแปรจาก config ใน 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. เขียนเส้นทางไปยังโฟลเดอร์ที่ติดตั้ง R ไว้ในตัวแปรระบบ Path บน Windows เส้นทางจะเป็นดังนี้: C:Program FilesRR-4.0.2bin.
  2. สร้างไฟล์ค้างคาวปฏิบัติการที่มีเพียงบรรทัดเดียว R CMD BATCH C:rscriptscheck_botcheck_bot.R. แทนที่ C:rscriptscheck_botcheck_bot.R ไปยังเส้นทางแบบเต็มไปยังไฟล์ R ของคุณ
  3. จากนั้น ใช้ Windows Task Scheduler เพื่อตั้งค่ากำหนดเวลาเริ่มต้น เช่น ทุกครึ่งชั่วโมง

ข้อสรุป

ในบทความนี้ เราได้ทราบวิธีสร้างบอทและใช้เพื่อส่งการแจ้งเตือนต่างๆ ไปยังโทรเลข

ฉันได้อธิบายงานในการตรวจสอบ Windows Task Scheduler แต่คุณสามารถใช้เนื้อหาในบทความนี้เพื่อส่งการแจ้งเตือนใด ๆ ตั้งแต่การพยากรณ์อากาศไปจนถึงราคาหุ้นในตลาดหลักทรัพย์ เนื่องจาก R ช่วยให้คุณเชื่อมต่อกับแหล่งข้อมูลจำนวนมาก

ในบทความถัดไป เราจะหาวิธีเพิ่มคำสั่งและแป้นพิมพ์ให้กับบอทเพื่อให้ไม่เพียงส่งการแจ้งเตือนเท่านั้น แต่ยังดำเนินการที่ซับซ้อนมากขึ้นอีกด้วย

ที่มา: will.com

เพิ่มความคิดเห็น