業務ハックLab -とある情シスの備忘録-

とある情シスの備忘録的なものです。

【スポンサーリンク】

Power Automateで安否確認システムを作ってみた

皆さんこんにちは。
業務ハックLabのよ~よんです。

今日はPower Automateを利用して安否確認システムを作ってみたので
それについてご案内していきたいと思います。

概要

今回使用するのは

・Power Automate
Microsoft Teams
Microsoft Forms

の3つです。

ちなみにPower AutomateはPremiumコネクタであるHTTPコネクタを使用するので有料版のライセンス(Micosoft365付属のライセンスは不可)が必要になりますのでご注意ください。

全体の流れとしてはこんな感じ。

f:id:yo-yon:20210409083724p:plain
今回はPower Automateのフローを2パターン作りました。
一つは気象庁のホームページからxml情報を取得する方法、もう一つはP2P地震情報さんが提供されているJSON API v2を利用する方法です。
気象庁の情報取得ページはこちら

xml.kishou.go.jp


P2P地震情報さんのJSON API v2ページはこちら

www.p2pquake.net

どちらも同じ結果を返すことが出来ますが、JSON API v2を利用させて頂く形にするとPower Automateで組むアクション数が少なくでき、すっきりさせる事もできます。

注意事項

下記についてご注意願います。

  • 今回作成したこの安否確認システムでは気象庁ホームページから情報を入手しています。使用に際しては気象庁の情報を利用している旨の表示が必要となります。気象庁 | 著作権・リンク・個人情報保護について
  • あくまで個人的に作成したものですので無保証です。利用によるいかなる損害についても、一切の責任を負いません。
    また、情報の正確性も一切保証致しません

言いましたよ。言いましたからね!

Power Automateの構成

今回はフローの中のアクションに設定している関数など細かい内容は書きません。
作る際に参考にしたページがいくつか有るのですがそちらのリンクを張っておきますので是非チャレンジしてみてください。
では早速フローの構成に行ってみましょう!!

気象庁ホームページxml情報取得パターン

色々とフィルタを掛けたりしてるので結構長いフローになってます。
全体を見るとこんな感じ。

f:id:yo-yon:20210409120851p:plain


ちょっと分解しつつ、動きの部分を説明していきます

トリガー~タイムゾーンの変換

トリガーはスケジュールの「繰り返し」を使用しています。
あまり高頻度で繰り返しを設定すると気象庁のサーバーへの負荷が高くなるとともにAPIコール数も消費してしまいますのでご注意願います。
特に気象庁サーバーへの負荷に関してはしっかり考慮するようにしてください。

f:id:yo-yon:20210409095514p:plain

変数の定義

後工程で使う変数を定義します。

f:id:yo-yon:20210409100149p:plain

フィードの取得~作成-一番最初のアレイのみ

RSSコネクタで気象庁のホームページからフィード項目を取得しています。
ちなみに今回はAtomフィードの高頻度、「地震火山」の情報を使用しています。

f:id:yo-yon:20210409102354p:plain

条件分岐

フィードからデータを取得した際に様々な条件でフィルタを掛けますが条件に合致せず、データが空白だった場合に分岐するよう設定をします。

f:id:yo-yon:20210501221055p:plain

はいの場合

上記の条件に合致する(データが空白)場合は最新情報がない状態なので処理時間のみをExcelデータに更新してフローを終了します。

f:id:yo-yon:20210409103631p:plain

いいえの場合:JSONの解析-最新情報を分解~条件分岐

上記条件に合致しない(データが空白ではない)場合は最新情報がある状態ですので次の工程に進みます。
具体的には取得した情報の中に地震情報の詳細が記載されたxmlデータへのURLが存在するので、そのデータをHTTPコネクタでGETしています。
また最後に条件アクションですでに取得済みの管理ID(取得したデータが同一の地震情報なのかの判定)、安否確認を投稿する最大震度の下限値を設定します。

f:id:yo-yon:20210409104107p:plain

条件アクションの中はこのような感じになっています。

f:id:yo-yon:20210501210537p:plain

はいの場合

上記の条件に合致する(すでに取得、投稿済みのデータもしくは最大震度しきい値未満の地震)場合は最新情報がない状態なので処理時間のみをExcelデータに更新してフローを終了します。

f:id:yo-yon:20210409104140p:plain

いいえの場合:行の更新~アダプティブカード投稿

上記条件に合致しない(まだ投稿していない情報かつ最大震度しきい値以上)場合は最新情報がある状態ですので次の工程に進みます。
Excelデータへ処理日時と管理IDを更新しAdaptive cardsを特定のチャネルへ投稿します。

f:id:yo-yon:20210409104734p:plain

気象庁ホームページxml情報取得するパターンのフローは以上です。

P2P地震情報 JSON API v2利用パターン

こちらの全体フローはこんな感じ。

f:id:yo-yon:20210409121109p:plain

データの取得方法以外はほぼ同じなので割愛。

地震情報のデータ取得はここだけでやっています。

f:id:yo-yon:20210409121611p:plain

前段では地震詳細情報を取得するのに「フィードの取得~作成-一番最初のアレイのみ」と「JSONの解析-最新情報を分解~条件分岐」の「JSONの解析」アクション、「HTTP」アクションまで必要でした。
この部分ですね。

f:id:yo-yon:20210410110214p:plain



これがAPIを使うとたったこれだけ。

f:id:yo-yon:20210409113655p:plain

偉大ですね。JSON API!!
公開していただいているP2P地震情報さんに感謝です。

2021/4/10追記

Microsoft MVPのHiroさんからHTTPコネクタを使用しない方法があることを教えて頂きました!!
早速試してみたのですが問題なく動いたので追記しておきます!
方法ですが
HTTPコネクタを

f:id:yo-yon:20210410110237p:plain

この形にするだけ!!

f:id:yo-yon:20210410110256p:plain

今回HTTPコネクタはGETのために使用していたのでHiroさんに教えていただいた方法はドンピシャでハマりました!
こんな方法があったなんてびっくりです。
さすがHiroさん!

qiita.com

HiroさんのブログはPower Platformで何かを構築したりする上でめちゃくちゃ有用な情報が載ってるのでぜひ一度ご覧ください!!

mofumofupower.hatenablog.com

Power BIのストリーミングデータセットへデータを格納する方法

では次に安否報告結果をリアルタイムで確認するためのPower BIの作成です。
まず最初にFormsで報告した内容を格納するための、ストリーミングデータセットを作成します。

ストリーミングデータセットの作成
  1. Power BIでデータセットを作成したいワークスペースを選択し「新規」をクリックします。
    f:id:yo-yon:20210409132119p:plain
  2. 「ストリーミングデータセット」をクリックします。

    f:id:yo-yon:20210409132313p:plain

  3. API」を選択し、「次へ」をクリックします。

    f:id:yo-yon:20210409132510p:plain

  4. 安否報告フォームの設問に併せて値を入れるための枠の部分を作成します。
    (下記例参照)
    全て入力が終わったら必ず「履歴データの解析」をオンにして「作成」をクリックします。(オンにしないとリアルタイム集計できません。)

    f:id:yo-yon:20210409133502p:plain

    これで報告データを格納するための場所は完成です。
ストリーミングデータセットにデータを格納するフロー

次にPower Automate でPower BIのストリーミングデータセットにForms回答結果のデータを格納するフローを構築します。
「Formsの新しい応答が送信されるとき」というものが有るのでこれをトリガーとします。
後は応答の詳細を取得し、Formsに回答をしたユーザー情報などを検索した上で、「データセットに行を追加します」というコネクタの設定を行います。

f:id:yo-yon:20210409112622p:plain

さあ、これで設定は完了しました。
実際に動いているところですがこんな感じになります。

Teamsにはこんな感じでAdaptive cardsが送られてきます。

f:id:yo-yon:20210409194900p:plain

確認フォームの集計結果がこんな感じ。

f:id:yo-yon:20210409195030p:plain

これがリアルタイムに更新されていきます。

ストリーミングデータセットをリセットする方法

ちなみにストリーミングデータセットに格納されたデータを空にするには下記の手順を行えばリセットができます。

  1. データセットを作成したワークスペースで該当するデータセットの作成したストリーミングデータセット三点リーダーをクリックします。

    f:id:yo-yon:20210409141824p:plain

    f:id:yo-yon:20210409141841p:plain

  2. 「編集」をクリックします。

    f:id:yo-yon:20210409141857p:plain

  3. 「履歴データの解析」をオフにします。(この時点でデータがリセットされます。)

    f:id:yo-yon:20210409141915p:plain

  4.  再度「履歴データの解析」をオンにして「完了」をクリックします。

    (オンにしておかないと次の集計時に反映されないので注意!!)

    f:id:yo-yon:20210409142050p:plain

当然のことですが集計を行っている最中にここの設定をオフにするとデータが全てなくなるのでご注意を!


ざっと書きましたが今回作った安否確認システムの仕組みはこのような形で作成しました。
冒頭の注意事項でも上げたとおりあくまで個人的に作成したものですので無保証です。利用によるいかなる損害についても、一切の責任を負いません。
また、情報の正確性も一切保証致しません。
作成する際は自己責任でお願い致します。

参考とさせていただいたホームページ、ブログなど

Microsoft Docs

docs.microsoft.com

P2P地震情報さんのホームページ・ブログ

www.p2pquake.net

p2pquake.hatenablog.jp

Power BI王子ことMicrosoft MVPの清水 優吾さんのQiita記事

qiita.com

qiita.com

 

今回も結構長い記事になってしまいましたね。。。
ともあれPower Platformを組み合わせで使用すると色々なことができます。
今回はプレミアムコネクタを利用しているので完全にMicosoft365アカウント付随のライセンスのみというわけにはいきませんでしたが、簡易的とはいえ、安否確認システムまで作れちゃうなんてPower Platformのポテンシャルは計り知れないですね!

それでは本日はこのへんで!
皆さん良い業務ハックライフを~


免責事項