Power Automateによる「検温報告」の仕組み(3) - 検温報告を受けるフロー

# 概要
[前回](https://qiita.com/mitou/items/06d7e4191408a27483ec)の続きです。
[Power Automateによる「検温報告」の仕組み(1)](https://qiita.com/mitou/items/9998329fcf3389a0f6cb)
[Power Automateによる「検温報告」の仕組み(2) - 検温報告を求めるフロー](https://qiita.com/mitou/items/06d7e4191408a27483ec)
Power Automateによる「検温報告」の仕組み(3) - 検温報告を受けるフロー

このフローは、LINE WORKSのBotからのCallbackを受けて実行されます。
Q1～Q5の５回、回答があるたびにCallbackされるので、１人の回答で計５回実行されることになります。
Q1は、前回の「検温報告を求めるフロー」でメッセージをPOSTしていますが、Q2～Q5はこのフローでメッセージをPOSTしています。
- Q1が回答されたら、Q1の回答を記録してQ2をPOST
- Q2が回答されたら、Q2の回答を記録してQ3をPOST
：

フローの全体はこんな感じです。
![2022-04-23_23h01_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/9ac95740-8d93-f456-e429-09d6fded24ca.png)

# 実行ステップ
## トリガー
LINE WORKSのBotのCallbackを受け取るため、「HTTP要求の受信時」トリガーを使用します。
![2022-04-24_19h44_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/93997447-09aa-c3ad-14fc-90ba796483d8.png)

フローを保存すると、HTTP POSTのURLが発行されるので、コピーボタンでコピーして、LINE WORKSのBotに設定します。
![2022-04-23_23h08_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/969b0754-b199-6f9b-f061-acb4efa8ad84.png)

## LINE WORKS APIのシークレット取得
前回と同じなので省略

## ユーザーリストの取得
これも前回と同様
その後、フィルター処理しているのは、回答したユーザーの情報を取得するため、絞り込んでいます。
トリガーに含まれる accountId でユーザーを特定しています。
![2022-04-24_19h50_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/e5685740-5f7b-a8f7-d87d-b9fe92c081de.png)
IDで絞り込んでいるので、フィルター処理の結果は要素数が１の配列になるはずなので、firstを使って取り出します。（定番テク）
~~~
first(body('アレイのフィルター処理'))?['name']
~~~

## 回答５、または、随時の発言
ここが一番の悩みどころでした。
Q5は「その他の自覚症状」ですが、QuickReplyのボタンではなく自由記入欄で、ただのテキストメッセージだとpostbackを付けられず、IDを付けられない。
それだけであれば、ユーザーは分かるので、そのユーザーを探してExcelに記入することもできますが、検温報告を求める以外でもユーザーからメッセージが飛んでくる恐れがあり、その場合以前のメッセージを上書きしてしまう可能性があります。
なので、Q5は任意回答として、回答があった場合はExcelの行を追加する形で対応しています。（表に行を追加アクション）
![2022-04-24_19h56_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/7cbd29cf-633b-087d-56f1-a250bcb845fa.png)
なんらかのメッセージがあれば、管理者（私）にメッセージを飛ばして、このフローは終了です。

## 質問ごとにスイッチ
次のスイッチアクションで質問ごとに処理を分岐させていますが、その前にQuick Replyで返されたPostbackを解析します（JSON の解析）
解析したJSONの"q"を基に分岐します。
![2022-04-24_20h20_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/bf0860ae-e4f1-b3ef-7766-b49d1f66d6db.png)
（スイッチは横に広がって見にくい･･･）

どの分岐も基本的に手順は同じです。
Excelに回答を記録→次の質問をPOST→基準を超えたら緊急連絡（体調不良がなければ終了）
![2022-04-24_20h23_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/f0dd69fa-29b4-d89b-59a8-334cd02635e7.png)
### Excelに記録
Excelの「行を更新」アクションで、「検温報告を求めるフロー」で追加した行に記録していきます。
ここで日時から作成したID文字列をキー値に指定します。
![2022-04-24_20h27_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/7dc030d8-4e89-265f-6a96-5f49a60ccd21.png)
### 次の質問をPOST
「検温報告を求めるフロー」と同様、ごりごりJSONを書いてPOST
postbackの"q"は、"q2"にする必要があります。（エンコードされていると2ばかりで分かりづらい･･･）
![2022-04-24_20h30_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/de4ce303-f5c4-f34d-6b5f-abff2456f215.png)
### 異常を判定
回答は文字列で返されるので、力技で判定。
異常があれば、緊急連絡メッセージを作り、異常がなければここで終了（終了しないと、異常がなくても空の緊急連絡メッセージが飛んでしまいます）
![2022-04-24_20h34_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/aca698a4-e25b-7588-e258-0abdb39cb734.png)

他の質問の分岐は文言や異常判定の条件が異なるぐらいなので、省略。
## 管理者へ緊急連絡メッセージを投稿
体調異常があった場合には、別Botで管理者へメッセージを投稿します。
同じBotでも構わないですが、その場合、緊急連絡メッセージを受け取った管理者は自分の検温報告のQuickReplyのボタンが消されてしまうので注意。
![2022-04-24_20h42_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244231/8bc533ae-344a-8e62-9e25-179d8d346c74.png)
# まとめ
Power Automateを使い始めて初期の頃に作ったフローで、今から見るとつたない所もありますが、支障はないのでこのままかれこれ１年半ぐらい使い続けてます。
それ以前は安否確認サービスで検温報告を行っていましたが、運用の手間がかかるため、何とか手間をかけずにできないかと、悪戦苦闘しながら作った覚えがあります。
APIを叩く、というのもこれが最初でした。
それまではJSONもろくに知らずに、Postmanで見よう見まねでAPIを叩いて、レスポンスが返ってきたときは、感動ものでしたね。
これならいけると、Power Automate per Userプランをぽちって、HTTPアクションにのめり込んでいくのでした。

非常に今更感のあるネタで恐縮ですが、何かの参考になれば幸いです。