見出し画像

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)で実行できれば、少し作業が楽になりませんか?

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