【クラウドBOT】+【integromat】で差分検知・自動通知の仕組みを構築


今回は、「導入しているシステムの障害情報をいちはやく知りたい」という営業部からの要望で、「メーカーのニュースページを定期的に監視し、障害情報が更新されていれば、営業担当にメールで通知する」という検知の仕組みを構築しました。

毎度おなじみのクラウド型RPA 『クラウドBOT』とiPaaS『Integromat』を使用して構築しています。

自動化したフローについて

1.監視対象のWebサイトからニュース一覧を取得
2.スプレッドシートから過去のニュース一覧を取得
3.現在のニュース一覧と過去ニューズ一覧を比較
3.差分があれば、新着としてスプレッドシートに追記し、メールで通知

一見プログラムでサクッと実装してしまえそうな内容ですが、実際に運用しようとすると「比較するための過去のニュース一覧をどこに書き出しておくか」、「どうやって定期実行するか」など色々考えなければいけない事が多く、実際は結構面倒だったりします。

今回はクラウド型RPAを用いて定期的にスクレイピングを実施し、iPaaSを連携する事で差分の抽出とスプレッドシート書き込み、メール通知を行いました。

今回のポイント

・完全クラウドで全ての自動化が完結する
・サーバなどの環境構築が不要
・ノーコード(一部ローコード)で作成できる
・integromatで配列処理

フローの全体図(integromatから)

具体的な構築の手順

①クラウド型RPAでニュース記事一覧を取得するロボットを作成する

まずは、クラウド型のRPAサービス『クラウドBOT』を使用して、Webサイトからニュース一覧を取得するロボットを作成します。
(※今回はロボットの作成手順についても、詳しく書いていきたいと思います。)

1.クラウドBOTのサービスサイトにログインし、ロボットを作ります。

URL:https://console.c-bot.pro/login
ダッシュボードの「BOTを作る」ボタンをクリックすると、ロボットを作成するための画面が開きます。

2.ロボットを作成するための画面が開きます。(以降エディタ画面とします。)

このエディタ画面に操作の対象となるニュースサイトのURLを入力し、虫眼鏡ボタンをクリックします。

3.エディタ画面に操作の対象となるWebサイトが表示されます。

画面左のサイドメニューを開き、「ブラウザ操作を記録する」というボタンをクリックします。

4.操作の記録が始まります。

このあと、右側に表示されているWebサイト内で行った操作が自動的に記録されていきます。

5.ニュース一覧を取得します。

クラウドBOTは、HTML内から繰り返しになっている構造を見つけ出し、グループとして認識させる事ができるようになっています。今回のように一覧データを取得したい場合、まずはグループとして認識させた後に、取得したい項目をコピーしていく流れになります。
以下で詳しい手順を解説します。

5-1.ニュース記事の1行目の部分をクリックします。

赤い枠が表示され、クリックした部分が選択されます。
もう一度同じ場所でクリックを行うと、メニューが表示されます。
表示されたメニューの中から「グループ範囲を探す」をクリックします。

5-2.選択範囲を広げ、グループとなる構造を探します。

「選択範囲を広げる」を何度かクリックし、グループとなる構造を探します。
以下のように、選択した部分と同じ構造になっている部分が青色になって表示されるように選択範囲を広げて行きます。
※もし、広げすぎてしまったり、間違えてしまった場合は一度「キャンセル」をクリックし、5-1からやり直して下さい。

5-3.グループを作成します。

繰り返し操作したい部分をうまく見つける事ができたら、「グループを作る」をクリックし、グループを作成します。

5-4.グループが完成しました。

画面左にグループ1という青いタスクが作成されます。この中で記録した操作が、一覧の件数分繰り返されます。

5-5.一覧から日付をコピーします。

画面右のWebサイト画面から、日付をコピーします。1行目の日付の部分を選択し、メニューから「テキストをコピー」を選択します。

5-6.データの名前を入力します。

データ名を指定する必要がありますので、”日付”としておきます。

5-7.グループ処理を完了させます。

同様の手順で、タイトルもコピーします。
グループ内で操作の記録が終わったら、「グループ処理を完了」をクリックします。

5-8.一覧データが取得できます。

一覧の件数分「日付」と「タイトル」がコピーされ、以下のような画面になります。

6.データビューアを確認します。

画面左下の「ビューア」をクリックするとロボット内で扱っているデータの一覧を見る事ができます。
「グループ1」のタブに切り替える事で、ニュース一覧が取得できている事が確認できます。
「OK」を押してビューアを閉じます。

7.最後にロボットの名前をつけます。

エディタ画面左上の「保存」ボタンをクリックすると、以下のようなBOTの設定を行うウィンドウが開きます。
BOT名を入力し、画面下の「保存」ボタンをクリックします。
これで、ニュース一覧を自動取得してくれるロボットが完成しました。

8.作成したロボットを実行してみます。

作成したロボットがダッシュボードに追加されますので、「実行する」ボタンで実行してみます。

実行画面が表示されますので、このまま「実行」をクリックします。

9.実行結果を確認します。

ニュース一覧が取得、表示されていればロボットは完成です。

10.ロボットを定期実行させます。

スケジュール登録を行う事で、作成したロボットを定期的に実行させる事ができます。
画面左のメニューから、「スケジュール」を選択し、「スケジュールを登録する」をクリックします。

11.定期実行の設定をします。

スケジュール設定の画面が開きますので、画面左側で実行したい間隔や条件を設定します。ここでは、毎時0分に定期実行するように設定しています。画面右側で実行するロボットを選択します。
先程作成した「障害情報の一覧を取得する」ロボットを選択します。
最後に「登録する」ボタンをクリックして設定完了です。

※クラウドBOTのスケジュール機能は有料プラン(3000円/月)への加入が必要です。

②iPaaSでニュースに新着があった場合に通知するフローを構築する

『クラウドBOT』で作成したロボットの実行完了をトリガーとして、integromatのフローを実行します。
過去の一覧と比較し、差分があった場合は新着情報として担当者にメールで通知します。

事前準備.スプレッドシートを作成します。

通知済みのニュースを書き出すためのスプレッドシートを用意しておきます。
※同じ通知を何度も送信する事を防ぐために使用します。

1.integromatのサービスサイトにログインし、シナリオを作ります。

URL:https://www.integromat.com/en/login
ダッシュボードの「Create a new scenario」ボタンをクリックすると、フローを作成するための画面が開きます。

2.クラウドBOTのモジュールを追加します。

「cloud bot」で検索し、クラウドBOTのモジュールを追加します。

2-1.クラウドBOTをトリガーとして設定します。

「Watch BOT Done」を選択します。
"BOTの実行が終了したら"という条件になります。
つまり、クラウドBOT側でロボットの定期実行が完了した時点で、このフローが実行される事になります。

2-2.Webhookの設定を行います。

integromatとクラウドBOTの連携を行い、webhookの設定を行います。

3.Google Sheetのモジュールを追加します。

「google sheet」で検索し、クラウドBOTのモジュールを追加します。

3-1.事前準備で作成したスプレッドシートからニュース一覧を取得します。

今回は「Search Rows」を使用し、事前に作成しておいた、スプレッドシート「障害情報一覧」から一覧を取得します。

3-2.モジュールの設定を行います。

スプレッドシート内から、日付が入っている行だけを取得しています。

一度ここまでを実行してみます。
・クラウドBOTから、現在Webサイトに掲載されているニュース一覧が取得できています。(以後、"現在のニュース一覧"とします。)
・スプレッドシートから過去に通知済みのニュース一覧が取得できています。(以後、"過去のニュース一覧"とします。)

3-3.スプレッドシートから取得した内容を配列に変換します。

「Array aggregator」を使用し、スプレッドシートから取得した"過去のニュース一覧"を配列に変換しておきます。

4.差分を検出します。

あとは、クラウドBOTから取得した"現在のニュース一覧"の中で、"過去のニュース一覧"に存在しない物を検出する流れになります。
"現在のニュース一覧"を「Iterator」を使用してループ処理する中で、全く同じタイトルが"過去のニュース一覧"に存在しないかを1件ずつチェックします。

4-1.Iteratorを追加します。

クラウドBOTから取得した、"現在のニュース一覧"のタイトルをIteratorでループ処理します。

設定はこんな感じです。

4-2.スプレッドシートへの書き込みモジュールを追加します。

「Add a Row」を用いて、クラウドBOTから取得した"現在のニュース一覧"を追記しています。

4-3.書き込みを新着のみに制限します。

このままでは、クラウドBOTから取得した"現在のニュース一覧"が全てスプレッドシートに追記されてしまいますので、integromatのフィルタ機能を使用して、事前に取得していた"過去のニュース一覧"に存在しない場合のみスプレッドシートへの書き込みを行うようにしています。

この部分が少々複雑であり、今回の記事の最大のポイントです。

まず、integromatのmap関数を使用してArray Agregatorで作成した"過去のニュース一覧"の配列を、配列内検索が可能な状態に整形しています。
次に比較条件で「Does not contain」を選択し、”配列内に存在しなければ”という条件を指定しています。
最後に、上で指定した"過去のニュース一覧"の配列に対して検索する文字列を指定しています。ここは、クラウドBOTから取得した"現在のニュース一覧"の配列をIteratorでループする中で、タイトルを1件ずつ参照しているイメージになります。

5.メール送信モジュールを追加する。

ここまで来ればあとは簡単です。先程設定したフィルタ以降のフローは条件を満たしている場合のみ実行されますので、最後にメール送信を行うモジュールを追加して、担当者に通知するように設定します。
Gmailの場合はこんな感じです。

メール以外にもチャットアプリなどに通知しても便利そうですね。

さいごに

差分を検知して何かアクションを行いたいという自動化の要望は案外多いのではないでしょうか。integromatを使用すると手軽に実装できるのでおすすめです。
integromat内での配列操作に関するドキュメントがあまり見当たらないので、どこかのタイミングで配列操作の部分だけをまとめて記事にしておきたいと思います。
最後まで目を通して頂き、ありがとうございました!