- このフローの前提となる運用
- このフローで実現する事
- 実行イメージ
- フロー全体
- フロー解説
- さいごに
このフローの前提となる運用
とある架空の職場での下記の運用を自動化するためのフローです。
- 在宅勤務の際はOutlook予定表に"在宅勤務"として勤務時間(開始時刻〜修了時刻)を登録する
- 勤務開始・終了時に上司にメールで報告する
- ワーケーションNG あくまで在宅勤務
Teamsのチャネルでオープンにしてメンバー間のコミュニケーション促進に繋げる案・PowerAppsでアプリ化し手間を軽減する案等を提案したものの、あくまでTo上司のメールで運用するということになっています。コミュニケーション目的ではなくただ監視のためのルールですので、自動化で対応をしてみましょう。
このフローで実現する事
「在宅勤務」という予定の時間が近づいたら...
- 「在宅勤務」予定開始10分前に自分にリマインド
- 「在宅勤務」開始時間180秒前に上司にメール送信
- 「在宅勤務」終了時間180秒前に自分にリマインド
- 「在宅勤務」終了の5分後に上司にメール送信
という作業を自動化します。ただし完全自動化ではなく、フロー実行者本人の意思を確認するステップを入れています。
実行イメージ
[在宅勤務開始時刻のおよそ10分前]
アダプティブカードで自分にリマインドメッセージが届きます。
メールを送信 or フローキャンセルを選択します。
メールを送信する場合はコメントも入力できます。
※5分でタイムアウトし開始ボタン押下扱いとしています。
[在宅勤務開始時刻のおよそ180秒前]
上司にメールが送信されます。
[在宅勤務終了時刻の180秒前]
再び自分にリマインドメッセージが届きます。
開始時と同様に操作すると...
[在宅勤務修了時刻の300秒後]
上司にメールが送信されます。
フロー全体
フロー解説
1.トリガー-Office365 Outlook - 予定しているイベントが間もなく開始されるとき (V3)
- カレンダーID
- 監視するカレンダーを選択
- ルックアヘッドタイム
- 10
ルックアヘッドタイムを10分に変更することで、イベント開始時間の10分前(多少ばらつきあり)にフローが起動します。
また、トリガーの条件で件名が「在宅勤務」のイベントでのみこのフローが実行されるように制限をかけています。
@contains(triggerOutputs()?['body/subject'],'在宅勤務')
2.Office 365 Users - マイプロフィールの取得(V2)
後続処理でフロー実行ユーザーにチャットを送信するため、プロフィール情報を取得します。
3.スコープ-イベント開始処理
3-1.Microsoft Teams - オプションの選択をフローボットとしてユーザーに投稿する
- オプション項目-1
- 在宅勤務開始(✉送信)
- オプション項目-2
- キャンセル
- 受信者
- @{outputs('マイ_プロフィールの取得_(V2)')?['body/mail']}
- メッセージ
- 「在宅勤務【開始】時間が近づいています。」
- ヘッドライン
- 「在宅勤務【開始】アラート」
- 概要
- 「在宅勤務開始アラート」
設定でタイムアウト期間を「PT5M」と設定することで、アダプティブカードに5分間なにも操作しないとタイムアウトするようにしています。
フロー実行者に在宅勤務開始が通知されます。
3-2.条件-タイムアウト or 開始ボタン押下
- 条件:または
- 条件式1
- 式:equals(outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する'), null)
- 次の値に等しい
- true
- 条件式2
- @{outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する')?['body/selectedOption']}
- 次の値を含む
- 「在宅勤務」
直前のアダプティブカードで何もクリックせずタイムアウト(条件式1)または在宅勤務開始ボタンをクリック(条件式2)、もしくはキャンセルをクリックしたかで分岐します。
3-3.「はいの場合」スケジュール -延期期限-開始時間間際まで待つ
イベント開始時刻の180秒前まで待機しています。
タイムスタンプには次のような式で180秒前の日時を設定しています。
トリガーの出力に含まれる開始時刻はそのままの書式では日付関数ではエラーになってしまうため、書式を変換した上での180秒前を計算しています。
addSeconds( formatDateTime(triggerOutputs()?['body/start'],'yyyy-MM-ddTHH:mm:ssZ'), -180, 'yyyy-MM-ddTHH:mm:ssZ' )
3-4.「はいの場合」Office 365 Outlook - メールの送信 (V2)
- 宛先
- メールを送信する上司のメールアドレス
- 件名
- 「在宅勤務を開始します」
- 式:convertFromUtc(UTCNow(), 'Tokyo Standard Time', 'MM/dd')
- 本文
- 「お疲れ様です。在宅勤務を開始します」
- @{outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する')?['body/comments']}
- ※アダプティブカードで入力したコメント
3-5.「いいえの場合」コントロール-終了
- 状態
- 取り消し済み
アダプティブカードでキャンセルボタンをクリックした場合は以後の処理をすべて中止します。"上司にメールを送信してはまずい事態"を想定したフェイルセーフです。
4.スケジュール-延期期限-終了時刻まで待機
3-3.とほぼ同じでこちらはイベント終了時刻の180秒前まで待機しています。
タイムスタンプには次のような式で180秒前の日時を設定しています。
addSeconds( formatDateTime(triggerOutputs()?['body/end'],'yyyy-MM-ddTHH:mm:ssZ'), -180, 'yyyy-MM-ddTHH:mm:ssZ' )
5.スコープ-終了処理
5-1.Microsoft Teams-オプションの選択をフローボットとしてユーザーに投稿する 2
- オプション項目-1
- 「在宅勤務終了(✉️送信)」
- オプション項目-2
- 「キャンセル」
- 受信者
- @{outputs('マイ_プロフィールの取得_(V2)')?['body/mail']}
- メッセージ
- 「在宅勤務【終了】時間が近づいています。」
- ヘッドライン
- 「在宅勤務【終了】アラート」
- 概要
- 「在宅勤務終了アラート」
設定でタイムアウト期間を「PT5M」と設定することで、アダプティブカードに5分間なにも操作しないとタイムアウトするようにしています。
処理内容は3-1.とほぼ同じです。在宅勤務終了時刻が近づいたらアダプティブカードを送信します。
5-2.コントロール-条件-タイムアウト or 開始ボタン押下2
- 条件:または
- 条件式1
- 式:equals(outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する_2'), null)
- 次の値に等しい
- 式:true
- 条件式2
- @{outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する_2')?['body/selectedOption']}
- 次の値を含む
- 「在宅勤務」
処理内容は3-.2と同じです。
5-3.スケジュール-「はいの場合」延期期限-開始時間間際まで待つ2
処理内容は3-3とほぼ同じです。
イベント終了時刻の300秒後まで待機しています。
addSeconds( formatDateTime(triggerOutputs()?['body/end'],'yyyy-MM-ddTHH:mm:ssZ'), 300, 'yyyy-MM-ddTHH:mm:ssZ' )
5-4.「はいの場合」Office 365 Outlook -メールの送信 (V2)2
- 宛先
- メールを送信する上司のメールアドレス
- 件名
- 「在宅勤務を開始します」
- 式:convertFromUtc(UTCNow(), 'Tokyo Standard Time', 'MM/dd')
- 本文
- 「お疲れ様です。在宅勤務を開始します」
- @{outputs('オプションの選択をフロー_ボットとしてユーザーに投稿する_2')?['body/comments']}
- ※アダプティブカードで入力したコメント
処理内容は3-4.と同じです。
さいごに
慣れてくるとリマインドメッセージに気づかなくなる点に注意が必要そうです。