WinActorでAmbientに登録されたデータを集計してみた①
はい、かーでぃです。
今回は、2024/2/9に開催予定のRPACommunityのLTのために作ったWinActorシナリオの紹介と説明です。
が、こちら、LT会では登場しません!(笑)
LT会のタイトルを「LINE x ChatGPT」としたため、OpenAI APIを使うのは違うかな、と思いまして…
でも、折角作ったので、note記事にします。
長くなるため、Ambientからデータを取得する①と、取得したデータを集計する②に記事を分けたいと思います。
※本記事は①になります。②はこちら。
解説動画もYoutubeにしましたので、よかったらどうぞー。
1.イベント情報
RPACommunityのYoutubeチャネル登録者数1万人突破記念イベントです。
お祝いしたくての登壇です。決して、アマギフ1万円に目がくらんだわけではありません!
2.登壇資料
時間の関係上割愛した宣伝コーナーが後ろに数ページあったりしますw
3.全体像
全体像としては、こんな感じです。
①GASでLINEボットを作成し、送られたメッセージをAmbientに送る
②WinActorでAmbientのAPIを叩いて、メッセージを取得する
③メッセージを成形してプロンプトを作る
④OpenAI APIを叩いて、プロンプトの問合せを実施
⑤得られた結果をJSON解析
⑥エクセルに転記
流れとしては、こんな感じです。
WinActorで操作するのは②~⑥のところですね(結構、盛りだくさん!)
4.Ambientとは
WinActor側の操作の説明の前に、そもそもAmbientってなに?という話もあろうかと思います。
Ambientは、IoT系のデータ蓄積のクラウドサービスになります。
今回、LINEの先はGASなので蓄積だけならスプシでもよかったのですが、Ambientでつながってるプログラムを以前作ったので、そのまま流用しちゃいました。
5.Ambientにたまったデータを取得
WinActorから、HTTPライブラリを使ってAPIを叩くことになります。今回は、HTTP(詳細)ライブラリを使ってみました。
基本設定タブ
メソッド:GET
URL:ambientのドキュメントを見てもらえればわかると思います。
要求タブ
特に設定事項ありません(デフォルト値でOKです)
応答タブ(ボディタブのみ設定)
ボディを取得:取得先変数名(ここでは、jsonAmb)
ということで、設定としてはこれだけです。簡単ですね。
得られる結果は、変数名からもわかるように、JSON形式になります。
フローとしては、下記のようにしました。
例外処理を作ってあります。
Ambient側がタイムアウトした場合、異常系に処理が移りシナリオが終了するようにしてあります。
続いて、JSONの解析になります。
今回、得られるJSONは以下のようになります。
[
{"cmnt":"ジョジョ","created":"2024-02-02T14:28:57.747Z"},
{"cmnt":"お疲れ様","created":"2024-01-11T11:57:07.353Z"},
{"cmnt":"ChatGPT様〜","created":"2023-10-14T11:26:59.538Z"},
{"cmnt":"スライドに送る方法","created":"2023-10-14T11:26:08.825Z"},
{"cmnt":"スライドに送る方法","created":"2023-10-14T11:25:36.978Z"},
…
{"cmnt":"これ、おもしろい!","created":"2023-10-14T11:25:29.630Z"}
]
よって、繰り返し処理で1レコードずつ取得していきます。
そして、ここでも例外処理にしてあります。
取り出す件数が20件に固定してあるため、20回の繰り返しでもよかったのですが、例外を発生させてループを抜ける処理は、RPAでは結構便利なので、ドシドシ使ってもらいたい。
6.取得したJSONから欲しい値を取り出す
さて、ループの中身の説明です。
ライブラリとしては、02_JSON内にある「JSONオブジェクト 配列指定 値の取得」になります。
設定は下記のようになります。
JSONオブジェクト:APIで取得したJSONを格納した変数
対象配列キー:なし
インデックス:カウンタ変数(変数の初期化で宣言済の初期値0の変数)
区切り文字:なし
文字列取得後の操作:何も付けない
取得した値:1レコードの値({"cmnt":"xx","created":"yy"})を格納
ポイントは対象配列キーは何も指定しないこと。です。
今回配列のキーが指定されてないJSON配列が返ってきているため、ブランクになります。
次に、取得した1レコードから、必要な「cmnt」の値を取り出します。
{"cmnt":"ジョジョ","created":"2024-02-02T14:28:57.747Z"}
取得したJSONは上記のように配列構成にはなっていないため、使用するライブラリは、02_JSONにある「JSONオブジェクト 値の取得」になります。
先ほど取得したレコードを格納した変数(ここではstrJOJO)をJSONオブジェクトに指定し、取得したいキーである”cmnt"を、取得対象キーに設定し、取得した値を、strCMNTに格納しています。
最後は、プロンプトを作成するための文字列結合をするだけです。
こちらで、Ambientから取得したJSONの値を取得し、ChatGPTに問合せためのプロンプトの準備まで整えました。
7.まとめ
Ambientは冒頭に話をしたように、IoT関連でよくつかわれるサービスになります。それらのデータをWinActorで取得することで、これまでデータの取得や集計を手作業でやられていたところを、自動化することもできそうですね。
今回、Ambientから取得したレコードは作成日を除けば1項目のみでしたが、Ambientでは数値項目を10個まで持たせることができます。
IoTデバイスなどで取得したセンサーデータを、Ambientに送り、その先をWinActor(やその他RPA)で実行できれば、少し作業が楽になりませんか?
この記事が気に入ったらサポートをしてみませんか?