R で電報ボットを作成する (パート 1): ボットを作成し、それを使用して電報でメッセージを送信する

Telegram の視聴者は毎日急激に増加しています。これは、メッセンジャーの利便性、チャネルの存在、チャット、そしてもちろんボットの作成機能によって促進されています。

ボットは、顧客とのコミュニケーションの自動化から自分のタスクの管理まで、まったく異なる目的に使用できます。

基本的に、テレグラムを使用すると、ボットを通じてあらゆる操作 (データの送信または要求、サーバー上でのタスクの実行、データベースへの情報の収集、電子メールの送信など) を実行できます。

の操作方法について一連の記事を書く予定です 電報ボットAPI、ニーズに合わせてボットを作成します。

R で電報ボットを作成する (パート 1): ボットを作成し、それを使用して電報でメッセージを送信する

この最初の記事では、電報ボットを作成し、それを使用して電報で通知を送信する方法を説明します。

その結果、Windows タスク スケジューラ内のすべてのタスクの最新の実行ステータスをチェックし、いずれかのタスクが失敗した場合に通知を送信するボットが作成されます。

ただし、この一連の記事の目的は、特定の狭いタスク用のボットの作成方法を教えることではなく、パッケージの構文を一般的に紹介することです。 telegram.bot、および独自の問題を解決するボットを作成できるコード例。

ページ内容

データ分析に興味がある場合は、私の記事に興味があるかもしれません。 電報 и ユーチューブ チャンネル。 コンテンツのほとんどは R 言語専用です。

  1. 電報ボットの作成
  2. R で電報ボットを操作するためのパッケージをインストールする
  3. R から Telegram にメッセージを送信する
  4. タスクスキャンを実行するスケジュールの設定
  5. まとめ

電報ボットの作成

まず、ボットを作成する必要があります。 これは特別なボットを使用して行われます ボットファザー、に行きます リンク そしてボットに書き込みます /start.

その後、コマンドのリストを含むメッセージが表示されます。

ボットファーザーからのメッセージ

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 パッケージを使用します。 テレグラムボット.

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"
)

マークダウン形式の基本:

  • 太字フォントは * で強調表示されます。
    • 例: *жирный шритф*
    • 結果: 太字フォント
  • 斜体はアンダースコアで示されます。
    • 例: _курсив_
    • 結果: 斜体
  • 通常、プログラム コードを強調表示するために使用される等幅フォントは、アポストロフィ - `: を使用して指定します。
    • 例: `等幅フォント`
    • 結果: моноширинный шрифт

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 タスク スケジューラを確認し、異常終了したタスクに関する通知を送信する

Windows タスク スケジューラを使用するには、パッケージをインストールする必要があります 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() — タスク名のフィールドを XNUMX つだけテーブルに残します。
  • unique() - 重複した名前を削除します
  • unlist() — 選択したテーブル列をベクトルに変換します
  • paste0() — タスクの名前を XNUMX 行に接続し、区切り文字として改行を入れます。つまり、 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"

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. たったXNUMX行で実行可能なbatファイルを作成する R CMD BATCH C:rscriptscheck_botcheck_bot.R。 交換 C:rscriptscheck_botcheck_bot.R R ファイルへのフルパスに。
  3. 次に、Windows タスク スケジューラを使用して、たとえば XNUMX 分ごとに起動スケジュールを設定します。

まとめ

この記事では、ボットを作成し、それを使用して電報でさまざまな通知を送信する方法を説明しました。

Windows タスク スケジューラを監視するタスクについて説明しましたが、この記事の資料を使用して、天気予報から証券取引所の株価まで、あらゆる通知を送信できます。 R を使用すると、膨大な数のデータ ソースに接続できます。

次の記事では、ボットにコマンドとキーボードを追加して、通知を送信するだけでなく、より複雑なアクションも実行できるようにする方法を説明します。

出所: habr.com

コメントを追加します