はじめに
Power Automate を使ってTwitter にワクチン接種後の体調を報告するシステムを作成してみたので、そのフローの仕組みを纏めたいと思います。
実際にツイートされたものはこんな感じ。
・体温
— コルネ (@koruneko32767) September 18, 2021
36.8℃
・体調
頭痛い
・腕の痛み
触ると痛い
食用はある
ワクチン後体調報告Bot#PowerAutomate
・体温
— コルネ (@koruneko32767) September 18, 2021
35.9℃
・体調
頭が痛い
・腕の痛み
触ったりしなければなんともない
ワクチン後体調報告Bot#PowerAutomate
・体温
— コルネ (@koruneko32767) September 19, 2021
測るのめんどくさかったです
・体調
よく寝たから頭痛治まってした
・腕の痛み
触ると痛い
よく寝た
ワクチン後体調報告Bot#PowerAutomate
[Request Timeout]
— コルネ (@koruneko32767) September 19, 2021
ただいま寝ているか、更新するのがめんどくさくなったようです。
ワクチン後体調報告Bot#PowerAutomate
フローの概要
フローの全体図
フローの全体図はこんな感じ。
トリガー
トリガーにはスケジュールの「繰り返し」を用いています。
このフローは
- 2h 毎に実行
- (日本時間で)2021/09/17 16:00:00 以降に実行
- 9時以降のみ実行(夜間は実行しない)
となっています。
「2h 毎に実行」は「間隔」と「頻度」の設定ですね。
「(日本時間で)2021/09/17 16:00:00 以降に実行」は「タイムゾーン」と「開始時刻」の設定です。
ここで「開始時刻」を設定するときに一つ注意が必要です。
例ではタイムフォーマットの末尾に Z
がついていますが、
JST(日本時間)を扱う場合はこの Z
をつけてはいけません。
2021-09-17T16:00:00
末尾に Z
をつけてしまうとUTC(世界協定時間)として扱われてしまいます。
なので日本時間を利用するときは Z
をつけないようにしましょう。
最後に「9時以降のみ実行(夜間は実行しない)」という設定ですが、これはフローの設定の「トリガー条件」で設定しています。
右上の3点リーダより、「設定」を選択すると、
以下のような画面が表示されます。
ここのトリガー条件に '@' + [式]を設定すると、その式が true
になったときのみ、そのトリガーが実行される。という設定になります。
@greaterOrEquals(int(formatDateTime(addHours(utcNow(), 9), 'HH')), 9)
例えば上の式だと int(formatDateTime(addHours(utcNow(), 9), 'HH'))
で日本時間で現在の時間を取得して greaterOrEquals
でその時間が9より大きいかを判断しています。
この式の記載に自信がない場合はテスト用のフローなどで、変数などを用意してその式の結果がどうなるのか動作確認したうえで設定するといいでしょう。
アクション
後続のアクションでは2種類のアクションを並列に実行するようにしています。
1つは、体調のツイートするアクションで、
もう1つは、体調報告をさぼったときなどにタイムアウトツイートをするアクションです。
体調をツイートする
現在の体調を報告するための質問をTeams でAdaptive Cards を送信して確認しています。
Adaptive Cards は以下のようになっています。
メッセージ
{ "type": "AdaptiveCard", "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "version": "1.2", "body": [ { "type": "TextBlock", "text": "現在の体温は?", "wrap": true }, { "type": "Input.Text", "placeholder": "36.2", "id": "temperature" }, { "type": "TextBlock", "wrap": true, "text": "現在の体調は?" }, { "type": "Input.Text", "placeholder": "元気", "id": "physical" }, { "type": "TextBlock", "wrap": true, "text": "腕の痛みは?" }, { "type": "Input.Text", "id": "pain", "placeholder": "痛い" }, { "type": "TextBlock", "wrap": true, "text": "その他" }, { "type": "Input.Text", "placeholder": "なにかあれば", "id": "other" } ], "actions": [ { "type": "Action.Submit", "title": "Tweet", "style": "positive", "data": { "res": "tweet" } } ] }
実際に送られてくるメッセージはこんな感じ。
このAdaptive Cards は以下のサイトで作成することができます。
このAdaptive Cards での入力内容は id
に記載の値で取得できるので、次のツイートを行うアクションでは、それを参照することでツイートに入力内容を埋め込みます。
ツイート テキスト
・体温 @{if(empty(outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/temperature']), '測るのめんどくさかったです', concat(outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/temperature'], '℃'))} ・体調 @{outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/physical']} ・腕の痛み @{outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/pain']} @{if(empty(outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/other']), '', Concat(uriComponentToString('%0A'), uriComponentToString('%0A'), outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/other'], uriComponentToString('%0A'), uriComponentToString('%0A')))} ワクチン後体調報告Bot #PowerAutomate
このツイートを行ったあとは、このフローは終了としたいので最後に「終了」アクションを設定しています。
タイムアウト
タイムアウトには並列アクションの最初に待ち時間を設定して、指定時間待機するようにします。
今回は30分で設定しました。
その後、タイムアウトツイートを行ってフローを終了アクションで終了しています。
おわりに
以上でPower Automate でワクチン後体調報告システムの完成です。
お手軽にできますね。
この仕組み利用して、PJメンバーに進捗確認用システムとか、新人向けに困っていることないか確認するシステムの作成とか作れないかな?
ただ技術ありきで業務システムなどをつくると大抵ろくなことにならないので、要注意です。