Plannerでバケットの期限切れタスクと本日期限タスクを特定したい
Microsoft Teamsのメッセージと通知を特定の時間に自動で送りたい
日々課題の発生と解決を繰り返す中、大切なタスクを忘れることもしばしばあるかと思います。
しかし、それは人間なら誰しもあることですが、防ぐための対策方法は存在します。
それは、「リマインド」を行うことです。
しかし、いつリマインドをするかきっかけを掴めない方もいるかと思います。
今回は、そんな方たちにぴったりの
9時と18時に、リマインド登録されたタスクが期限切れしていないか、本日期限のタスクは何かお知らせしてくれる機能
の作り方をご紹介します。
前提
Planner
今回のリマインドタスクの登録は「Planner」を使用します。
バケットの状態は下図のとおりです。
今回は、バケット【テスト1】をリマインド対象タスクとします。
この図では、本日日付が「7/26」となっています。
テスト25が期限切れタスクとなっており、テスト30はまだ期限に余裕のあるタスクになっています。
バケット【テスト2】はリマインド対象外タスクのバケットですが、こちらのタスクが出力されないことを確認するテスト用に使用します。
準備
Power Automateの導入
今回メッセージと通知を自動化するにあたり、「Power Automate」を使用します。
導入するには、左メニューの[アプリ]から「Power Automate」で検索しましょう。
※「Power」とかだけでも出ます。
各チャネルごとにもPower Automateを導入することもできますが、筆者はなぜかこの後紹介するフローを保存しても、保存されたフローの一覧に表示されませんでした。
もし、チャネルに導入したPower Automateにフローの保存と編集が可能な場合、そちらでも問題ありません。
フローの作成
今回作成するフローは、比較的長い処理工程になっています。
ざっくりとした流れとしては、
①現在時刻の取得
②必要変数の準備
③「リマインダ―」バケットIDの取得
④「リマインダー」バケットに登録されたタスクの取得
⑤期限切れタスク及び本日期限タスクの取得
⑥メッセージと通知を投稿
といった具合です。
条件式の中身はこれから説明する各セクションの詳細で紹介していますので、そちらを参考にしてください。
フローの作成画面
[ホーム] – [新しいフロー] または [作成]タブ ⇒ [一から作成]をクリックします。
トリガーの設定
初めにトリガーの設定をします。
トリガーとは、処理が実行されるタイミングを指します。
9時と18時に実行する設定を行います。
繰り返しを選択する
トリガーの詳細を設定する
項目 | 概要 | 値 |
---|---|---|
間隔 | 処理の実行間隔を設定します。 頻度が「日」の場合、’1日、2日…’といったように数値部分を設定します。 | 1 |
頻度 | 処理の頻度を設定します。 間隔が「1」の場合、’1日、1週…’といったように単位部分を設定します。 | 日 |
タイム ゾーン | タイムゾーンの設定です。 | (UTC+09:00)大阪、札幌、東京 |
開始時刻 | トリガーをいつから開始するかを設定します。 即時開始する場合は、現在日付よりも前の時間を設定します。 | 2023-01-01T00:00:00Z |
設定時刻(時間) | トリガーを実行する時刻(hour)を設定します。 | 9,18 |
設定時刻(分) | トリガーを実行する分(minutes)を設定します。 | 0 |
現在の時刻を取得する
「現在の時刻」を選択します。
タイムゾーンの設定をします。
「現在の時刻」で取得できる時刻は、「協定世界時」なのでタイムゾーンを変更しないと正しい時刻を取得できません。
「タイム ゾーンの変換」は、’タイム’と’ゾーン’の間に半角スペースがあるため、’タイムゾーン’と検索すると検索にヒットしません。
‘タイム’や’タイム ゾーン’で検索する必要があります。
項目 | 概要 | 値 |
---|---|---|
基準時間 | 変換元の時刻を設定します。 | 現在の時刻 |
書式設定文字列 | 変換後のフォーマットを設定します。 (例)yyyy/MM/dd ⇒ 2023/07/28 | yyyy/MM/dd |
変換元のタイムゾーン | 変換元変数のタイムゾーンを設定します。 | (UTC-11:00)協定世界時-11 |
変換先のタイムゾーン | 変換後変数のタイムゾーンを設定します。 | (UTC+09:00)大阪、札幌、東京 |
各種変数を初期化する
必要な変数を初期化(定義)します。
「変数」で検索 ⇒ [変数を初期化する]を選択します。
それぞれの定義は下図のとおりです。
変数 | 種類 | 初期値 | 使用用途 |
---|---|---|---|
バケットID | 文字列 | null | 対象バケットのIDを保持するための変数です。 今回はバケット「リマインダー」のIDが設定されます。 |
期限日時 | 文字列 | null | タスクの期限日時を保持するための変数です。 |
本日課題リスト | 文字列 | null | 本日期限の課題をリスト形式で保持するための変数です。 |
期限切れ課題リスト | 文字列 | null | 期限切れ課題をリスト形式で保持するための変数です。 |
送信テキスト | 文字列 | null | 送信用テキストを保持するための変数です。 |
バケットIDを取得する
特定のバケットに設定されたタスクを取得するため、まず対象のバケットIDを取得します。
取得する手順は、
①バケット一覧を取得する
②バケット一覧をループさせ、バケット名が「リマインダー」のバケットIDを取得します。
バケット一覧を取得する
「Planner」で検索 ⇒ [バケットを一覧表示する]を選択する
[バケットを一覧表示する]の設定値は、今回使用するPlannerのチャネルとプランを選択します。
バケット名「リマインダ―」のバケット名を取得する
「Planner」で検索 ⇒ [バケットを一覧表示する]を選択する
ループ処理でバケット一覧を処理します。
設定値:値
ループ処理に使用する「値」はバケット自体の情報になります。
ループ内で[アクションの追加]から条件を追加します。
条件の内容は下図のとおりです。
条件は、「値 名前」 「次の値に等しい」 「リマインド」 になります。
はいの場合
「変数」で検索 ⇒ [変数の設定]を選択する
[変数の設定]の設定値は下表のとおりです。
項目 | バケットID |
値 | 値 ID |
「文字列変数に追加」は使用しません。
「文字列変数に追加」は一致するバケット名のIDが文字列結合するため、正しいバケットIDが取得できません。
いいえの場合
特に処理は追加しません。
期限切れタスク一覧と本日期限のタスク一覧を取得する
最重要の処理になります。
処理手順は、
①タスク一覧を取得する
②タスクをループで処理し、対象のタスクをリストへ追加する。
タスクの一覧を取得する
「Planner」で検索 ⇒ [タスクを一覧表示する]を選択する
[タスクを一覧表示する]の設定値は、今回使用するPlannerのチャネルとプランを選択します。
タスクの期限日時を取得する
期限日時を日本時間で取得するために、タイムゾーンの変換を行います。
[変数の設定]の設定値
項目 | 値 |
---|---|
名前 | 期限日時 |
値 | 値 期限日時 |
[タイム ゾーンの変換]の設定値
項目 | 値 |
---|---|
基準時間 | 期限日時 |
書式設定文字列 | yyyy/MM/dd |
変換元のタイムゾーン | (UTC-11:00)協定世界時-11 |
変換先のタイムゾーン | (UTC+09:00)大阪、札幌、東京 |
書式設定文字列は任意の形式ですが、
①「年」「月」「日」が取得できる
②[現在の時刻]のタイムゾーン変更時の書式と同じ
とする必要があります。
期限切れタスクと本日期限のタスクを一覧追加する
手順としては、
①期限切れタスクと本日期限のタスク両方を取得する
②期限切れタスクと本日期限のタスクを分離して一覧に追加する
期限切れタスクと本日期限のタスク両方を取得するための条件は下表のとおりです。
値① | 比較 | 値② | 意味 |
---|---|---|---|
値 バケット | 次の値に等しい | バケットID | タスク.バケットID = 文字列変数.バケットID |
値 達成率 | 次の値未満 | 100 | タスク.達成率 < 100 |
タイム ゾーンの変換.期限日時 | 次の値以下 | タイム ゾーンの変換.現在の時刻 | 変換後期限日時 < 変換後現在の時刻 |
こちらの条件式は、「いいえの場合」に処理はありません。
期限切れタスクと本日期限のタスクを分離取得するための条件は下表のとおりです。
値① | 比較 | 値② | 意味 |
---|---|---|---|
タイム ゾーンの変換.期限日時 | 次の値に等しい | タイム ゾーンの変換.現在の時刻 | 変換後期限日時 < 変換後現在の時刻 |
はいの場合
本日課題リストに追加します。
「変数」で検索 ⇒ [文字列変数に追加]を選択する
項目 | 名前 |
---|---|
名前 | 本日課題リスト |
値 | 値 タイトル |
いいえの場合
期限切れ課題リストに追加します。
「変数」で検索 ⇒ [文字列変数に追加]を選択する
項目 | 名前 |
---|---|
名前 | 期限切れ課題リスト |
値 | 値 タイトル |
リスト0件の処理を追加する
期限切れ課題リスト
期限切れ課題リストが空か判定するための条件は下表のとおりです。
値① | 比較 | 値② | 意味 |
---|---|---|---|
空チェック | 次の値に等しい | ture | 空チェック = 空 |
empty(variables('期限切れ課題リスト'))
本日期限課題リスト
本日期限課題リストが空か判定するための条件は下表のとおりです。
値① | 比較 | 値② | 意味 |
---|---|---|---|
空チェック | 次の値に等しい | ture | 空チェック = 空 |
empty(variables('本日課題リスト'))
メッセージを送信する
リストが取得できたので、リストをメッセージでチャネルに投稿します。
「Teams」で検索 ⇒ [チャットまたはチャネルでメッセージを投稿する]を選択する
設定値は下表のとおりです。
項目 | 概要 | 値 |
---|---|---|
投稿者 | 投稿するユーザーを指定します。 ※「フロー ボット」はプライベートチャネルの投稿はできません。 | ユーザー |
投稿先 | 投稿する場所を指定します。 | Channel |
Team | 投稿先のチーム名を指定します。 ※投稿先を「Channel」にすると表示 | (チーム名) |
Channel | 投稿先のチャネルを指定します。 ※投稿先を「Channel」にすると表示 | (チャネル名) |
Message | 投稿メッセージを指定します。 | 下図に例を表示 |
Subject | 投稿メッセージの件名を指定します。 | (指定しない) |
メッセージ例
通知を送信する
メッセージを送信したら、メッセージを投稿したことをお知らせする必要があります。
そのために対象者に通知を送信します。
「Teams」で検索 ⇒ [フィート通知を投稿する]を選択する
設定値は下表のとおりです。
項目 | 概要 | 値 |
---|---|---|
投稿者 | 投稿するユーザーを指定します。 | フロー ボット |
通知の種類 | 通知先の種別を指定します。 | チーム |
受信者 | 受信者のメールアドレスを指定します。 ※アカウントに登録されているメールアドレスを指定 | (メールアドレス) |
通知テキスト | 通知テキストを指定します。 | 本日の課題を確認する |
Team | 通知先のチーム名を指定します。 ※投稿先を「Channel」にすると表示 | (チーム名) |
Channel | 通知先のチャネルを指定します。 ※投稿先を「Channel」にすると表示 | (チャネル名) |
メッセージID | 通知をクリックしたときにリンクするメッセージを指定します。 | メッセージID |
動作検証
テストを実行します。
テストで使用するデータは前提セクションのPlannerタスクデータとします。
通知が受信されます
受信した通知をクリックすると、投稿されたメッセージまで画面が遷移します。
メッセージが投稿されます
期限が切れている課題が表示されます。
今回はテスト25だけが期限切れになっているので、正常に動作しています!