見出し画像

メールトリガーロボ。

こんにちは。Tokoです。
BizRobo!で作ってみたメールトリガーロボのトリガー部分の覚え書です。

BizRoBo!は開発画面でDSとDAの二つの顔をもっています。
DSは軽くて速くて作りやすいし安定!!なのですが、外部アプリを動かせなかったり(Excelもどきを内臓しているのでExcelは機能限定で動かせるけど)ガードのきついサイトに入れなかったりするのでDAがその部分を補佐してくれます。
私はDAは初めは苦手でした。使ってるうちにこの連携が健気に思えてきて、ロボが二人いてバトンを受け渡ししてせっせと頑張るイメージです。

◯メールトリガーロボとは。

[指定したタイトルのメール]が届いたら、「処理」を実行するロボです。

メールアカウントにログイン、受信箱のメールタイトルをループしてチェック、[指定タイトルのメール]がなければ、また受信箱へを繰り返す。

タイトルがなかったとき

[指定タイトルのメール]が届けば実行ルートへ入り「処理」後、終了する。

タイトルがあったとき

※BizRobo!は基本的に左から右へ進み、行き止まると手前の分岐から下軸に進むのでこのような配置になります。私は最初は見慣れず混乱しましたが、俯瞰しやすい構造だと思います。

◯DA(Chromium)部分

DA色分け

DA(Chromium)部分を色つけてみました。BizRobo!は複数の内臓ブラウザを持っています。DSのブラウザで動かない場合、DAのChromiumブラウザに切り替えると動かせることがあり、その結果このような形になります。
★Aでメールログイン→Bで受信箱にいって情報をとってくる。
★[指定タイトル]値判定が通らなかった場合、Cで5分待機して受信箱をリロード
★[指定タイトル]値判定が通った場合、Dでメールログアウト。
このようにメールサイトでの操作をChromiumが担当しています。

◯DA(Chromium)の設定

ChromiumはDAアクションの中で展開されます。

補記。DAアクションはBizRobo!のバージョンによって「デバイスオートメーション」or「ディスクトップオートメーション」2種類の表記があります、どちらもDAと呼ぶ習わしです。

まず、DAアクションの下準備。
デザインモードを「スマート再実行フル」にします。

スマート実行フル

DAアクションのセット例
★DSからDAに持っていきたい値がある場合は「入力値」にその変数をセット。
★持って帰りたい値がある場合は、受け皿の変数を「出力マッピング」にセットします。
★「必要なデバイス」はデスクトップなどの外部アプリを動かす時に使う設定です、Chromiumは内臓ブラウザなので空欄です。↓

DA.設定PNG

↑編集ボタンを押して開きます。

★ログインDAアクション(A)を開いた画面。
「入力値」にセットした変数を使ってサイトを開く設定部分。↓

DAログインのコピー


★受信箱の情報を抽出するDAアクション(B)を開いた画面。
(ピンク部)はDAアクション内で変数を作ってXMLを抽出する設定の部分。
(イエロー部)は「出力マッピング」の変数に受け渡す設定の部分。↓

DAXML抽出


補記1(ブルー部)は複数ウィンドウが開いている時に指定が必要な箇所。
補記2 XML抽出のステップは抽出したい部分を選択して右クリック→「XML文字列として・・抽出」を選ぶと自動的に生成されます。↓

XMLコード抽出

◯DS部分

一方、DSの部分を色つけするとこのようになります。

DS色分け

BizRobo!はDSが速くて安定しています。DAアクション内でもループなどはできますが、DSでできることはDSでするのが基本です。
Chromiumで抽出した受信箱の情報をXMLでDSに持ってくるのはそのためです。

(A)「変数を開く」アクションでXML変数を開くとブラウザにロードされますので、ブラウザから(B)ループを作って↓

DSXMLタグ繰り返し

今回はメールのタイトル部分を変数に抽出(C)↓

DSタイトル抽出

※↑コードで目がチカチカですが、やってることは選択して右クリックしているだけです。

(D)値判定アクション
抽出したタイトルが指定タイトル(「投稿トリガー」)と一致するかチェック。↓

次のイテレへテスト判定

★一致しなかった場合はエラー処理に指定された通り(ここでは次のループへ(B)と設定)

全てのタイトルをループしても一致がない場合は下軸に入り、
「ネクスト」(E)→「リピート」(F)
※「リピート」は「ネクスト」を踏んでくりかえされる・・・ 
こうして[指定タイトルのメール](=トリガー)を受信するまでループをリピートし続けます。

★受信箱に[指定タイトルのメール]が届いた場合。値判定を通過し、実行ルートに入り処理を実行。「実行完了の印」を変数に入れます。↓

画像13

下軸の値判定(H)は変数に「実行完了の印」(ここでは「1」)があればリピートを終了と設定。=ロボットが終了します。
※「実行完了の印」を入れる変数は分岐先に値を維持するグローバル変数。

補記。今回1リピート50ループしていますがタイトルチェックは50件を1秒未満で終えてしまうのでループ回数指定を入れていません、もしループ回数を指定する必要がある場合はイテレーション(ループ数)で値判定する方法があります。
★関数 iteration()でイテレーションが任意の数に達したらループを抜ける設定です。 ↓

イテレ判定

◯できたこと。

デバッグでは1時間半放置。リピート→ループを繰り返して指定メールをトリガーに処理実行完了。正常終了。

◯できなかったこと。

■トリガーになるメールをGメールで設定しようとしたところ、ChromiumでGメールにログインできなくなっていた。以前はuser agent設定をしたChromiumで入れた。。

→DSのバージョンを最新にするか、user agentを変更すればできるかもしれないが不明。
→ナレッジによるとBizRobo!でGoogleドライブのApiは使えるがBizRobo!Basic(MC)が必要(20201208時点)
→DAはディスクトップアプリを操作できるのでChromiumではなく、ChromeやIEを使う方法はあるが、私のBizRobo!はmpfで借用しているもので、外部アプリを動かすマッピングができないため未確認。
→RPAツールを変更。UiPathでGoogleのApiを使えるところは確認。しかしUiPathの操作は私には復習が必要だったので
→→別のメールを使ってBizRobo!で作りました。

◯トリガーメールの使い道。

Advent Calendarに参加するのに、当日0:00の投稿ができるかの実験として。noteの時間指定投稿は有料オプションなので不正義ですが、この一度しか時間指定を使う予定がないので作ってみました。
メールの送信予約機能を使い[指定タイトルのメール]を指定時間に受信して、ロボを動かしてます。
デバッグではテスト投稿ができましたが、noteログイン時にロボット避け画像がランダムにでるため安定はしません。時間指定投稿するなら有料へという当たり前の結果です。

そもそも一度しか使わないのにロボを作るのは効率化でもなんでもなく、ただメールトリガーの部品を作ってみたかっただけです。
ちょうど作っている日は「はやぶさ2」の帰還日でリアルタイム配信をみながら、デバッグするのは規模は遥かに違えど「遠隔操作」の成功がリンクして面白かったです

RPAツールはスケジューラーで動かすのが一般的なので、時間指定にメールトリガー部品を使う場面はないと思います、考えられる想定は。。。ある一定時間範囲に届くメールを待ってなにかを処理する???ということはあるかもしれません。

読んでくださってありがとうございました。
BizRobo!の中身が気になる方へ伝わるものがあればと思います。


この記事が気に入ったらサポートをしてみませんか?