Power Automateのクラウド フローで祝日を除く平日にTeamsにメッセージを送る

Power Automate

こんにちは、ソリューション開発部の柴﨑です。

私たちのチームでは、日次の朝のミーティング(以降、朝会と書きます)を実施しており、朝会で伝えたいことの準備をして欲しい旨を朝会の前にリマインドしています。しかし毎日リマインドを手作業で送るのは面倒なものです。今回は、Microsoft Power Automate(以降、Power Automateと書きます)のクラウド フローで祝日を除く平日にリマインドする方法をご紹介します。

まとめ

  • [スケジュール]の[繰り返し]トリガーで平日に実行します。
  • [Office 365 Outlook]コネクタの[イベントのカレンダー ビューの取得(V3)]アクションで「日本の休日」予定表からイベントを取得します。
  • イベントがなければ祝日を除く平日なので[Microsoft Teams]コネクタの[チャットまたはチャネルでメッセージを投稿する]アクションでメッセージを送ります。

祝日を除く平日の朝会の前にリマインドしたいだけなのに

朝会を短く終わらせるには共有したいことを事前に準備してもらうことが大切です。では朝会の前にリマインドしようとなるのですが、毎日繰り返しとなると自動化したくなるのが人の心というものです。

弊社ではMicrosoft Teamsを使っています。さっそく自動化していきましょう。Microsoft 365に対して外部から連携する場合は、Azure Active Directoryへ設定の追加が必要です。まずはリマインドを送るアプリをAzure Active Directoryへ「アプリの登録」……できませんでした。無慈悲な「アクセス権なし」です。管理する側からすれば好き勝手にアプリを登録されても困るでしょうから当然の権限制御です。事情を説明して登録してもらうことはできるでしょうが、アプリを都度登録してもらうのは手間です。

また、自前でサーバーを構築・運用するのも面倒です。構築したサーバーを誰かが保守しなければいけません。草の根の活動として自身のローカルマシンで動かすこともできるでしょうが、有給休暇中にリマインダーをどうするかなんて考えたくもありません。

自前でサーバーを用意することなく、自分が休みの日でも動き、スピード感を持って自分がやっていることを自分だけで自動化できる便利なツールはないのでしょうか。そんな方におすすめなのがPower Automateです。

Microsoft 365(旧Office 365)には、Power Automateの利用権を含むプランがあり、弊社ではPower Automateを利用できます。この記事では、Microsoft 365製品の連携が簡単なPower Automateでの自動化を試みます。Azure Active Directoryへの「アプリの登録」に権限がなく諦めてしまった方でもPower Automateを利用できる可能性があります。ぜひライセンスをご確認ください。

Power Automateとは

Power Automateは、アプリやサービスを連携したワークフローを作成し自動化する製品です。ノーコード・ローコードなプラットフォームでフローを組み立てることができます。Power Automateのクラウド フローを使えば、自前でサーバーを構築したり運用する必要はありません。Power Automateについては、以下の公式ドキュメントが詳しいので参照してください。

例えば「OneDriveのファイルが更新されたらPDFにしてメールに添付してを送信する」と言った業務でも、Power Automateのクラウド フローを使えば自動化できます。

フローを構築する

Microsoft 365のメニューからPower Automateアプリを選択しフローを作成します。一度もPower Automateを使ったことがない場合、Microsoft 365のメニューにPower Automateが表示されないことがあります。もしメニューにPower Automateが見つからなければ、Power Automateページにアクセスしてください。

今回作成するフローは、以下の通りです。

  1. 平日にトリガーを実行させる。
  2. 現在時刻を取得する。
  3. 「日本の」予定表から現在時刻に対応するイベントを取得する。
  4. イベントの有無で祝日を除く平日か判定する。
  5. イベントがある場合は、休日のため通知せず終了する。
  6. イベントがない場合は、祝日を除く平日のためリマインダー通知する。

フローの作成

[作成]から[スケジュール済みクラウド フロー]を選択しフローを作成します。

[スケジュール済みクラウド フロー]を選択すると、[フロー名]と[Recurrence]トリガーのオプションを設定できます。
[スケジュール済みクラウド フロー]を選択した直後の設定画面

平日にトリガーを実行させたいので、[繰り返し間隔]を[週]、[設定曜日]を月曜日から金曜日に設定します。[作成]をクリックするとフローの編集画面が表示されます。

フローの編集画面では、[スケジュール済みクラウド フロー]を選択した直後の設定画面に表示されていない[Recurrence]トリガーの詳細なオプションも設定できます。
[Recurrence]トリガーの設定画面

[詳細オプション]を表示し、リマインダー通知を送りたい時間を設定してください。設定内容が分かるようにトリガーの名前を変えておくと可読性が上がります。

設定項目設定例説明
タイムゾーン(UTC+09:00) 大阪、札幌、東京このトリガーのタイムゾーンを選択してください。
開始日時(未入力)このフローの運用を始めたい日時を入力してください。すぐ運用を始める場合は未入力で構いません。
設定曜日月曜日,火曜日,水曜日,木曜日,金曜日このフローを実行したい曜日を選択してください。
設定時刻 (時間)9このフローを実行したい時刻の時間を入力してください。
設定時刻 (分)45このフローを実行したい時刻の分を入力してください。
「平日に実行する」の設定

現在時刻の取得

[新しいステップ]をクリックしアクションを追加します。現在時刻を取得するには[日時]コネクタの[現在の時刻]アクションを使うことができます。しかしながら、フローのテストで動作を確認する際に、現在の時刻で固定されてしまうと動作確認が難しくなります。指定した日が休日判定されるか確認しやすくするために、ここでは[Variable]コネクタの[変数を初期化する]を使います。

[変数を初期化する]アクションでは、変数の名前と種類(型)、初期値の3つを設定できます。
[変数を初期化する]アクションの設定画面
設定項目設定例説明
名前現在時刻任意の変数名を設定してください。この変数を後で参照するので名前を覚えておいてください。
種類文字列ここでは[文字列]を選択してください。
2022-01-01ここでは休日判定の検証のため一旦「2022-01-01」と入力してください。
「現在時刻を取得する」の設定(検証用)

休日の取得

休日か判定するためにOutlookの「日本の休日」予定表を使います。Outlookの予定表に「日本の休日」予定表があるか確認してください。もし予定表がない場合は、予めOutlookで予定表の追加が必要です。[Office 365 Outlook]コネクタから[イベントのカレンダー ビューの取得(V3)]アクションを追加してください。

[イベントのカレンダー ビューの取得(V3)]アクションには詳細オプションがありますが、今回、変更は不要です。
[イベントのカレンダー ビューの取得(V3)]アクションの設定画面

[開始時刻]と[終了時刻]には、[動的なコンテンツの追加]を選択し[動的なコンテンツ]から[変数]の「現在時刻」(前述の変数名) を選択して設定します。[開始時刻]と[終了時刻]の範囲にあるイベントを取得できます。

設定項目設定例説明
カレンダーID日本の休日休日が登録された予定表を選択してください。
開始時刻現在時刻動的なコンテンツでとして現在時刻を設定した変数を選択してください。
終了時刻現在時刻動的なコンテンツでとして現在時刻を設定した変数を選択してください。
日本の休日を取得する」の設定

また、アクションの名前を「日本の休日を取得する」としてください。このアクションを後で参照するので名前を覚えておいてください。

祝日を除く平日か判定

[Office 365 Outlook]コネクタの[イベントのカレンダー ビューの取得(V3)]アクションでは、0件以上のイベントを取得できます。「日本の休日」予定表から1件以上のイベントを取得した場合は、休日であると判定します。[コントロール]の[条件]アクションを追加してください。

[条件]アクションでは、指定の条件が真のときに[はいの場合]が実行され、偽のときに[いいえの場合]が実行されます。
[条件]アクションの設定画面

左側のボックスには、[動的なコンテンツの追加]を選択し[式]から休日イベントの件数を取得する式を入力します。式で使う関数は以下の通りです。

関数名説明
actions式で、他の JSON の名前と値のペアまたは実行時アクションの出力から値を導出できるようにします
bodyactions('actionName’).outputs.body の短縮系
lengthアレイまたは文字列内の要素の数を返します
「祝日を除く平日か判定する」で使う関数

今回は、休日イベントの件数を取得するため、「日本の休日を取得する」の出力からイベントを取得します。[Office 365 Outlook]コネクタの[イベントのカレンダー ビューの取得(V3)]アクションでは、body.value にアレイ(配列)としてイベントの情報を出力します。

actions('日本の休日を取得する') 式は、指定のアクションを返します。body('日本の休日を取得する') 式は、指定のアクションの出力データを表し、body('日本の休日を取得する').value 式は、指定のアクションのイベントのアレイを表します。イベントのアレイを length 関数に渡すことでイベントの件数を取得できます。

設定項目設定例説明
左側のボックスlength(body('日本の休日を取得する').value)休日イベントの件数を取得する式を入力します。
中央のボックス次の値に等しい左側のボックスの値が右側のボックスの値と等しい場合に[はい]となります。
右側のボックス00件であれば祝日を除く平日となります。
「祝日を除く平日か判定する」の設定

休日のため通知せず終了

イベントが1件以上ある場合は[いいえの場合]が実行されます。この時フローを終了させることでリマインダー通知しないようにします。「祝日を除く平日か判定する」アクションの[いいえの場合]に、[コントロール]の[終了]アクションを追加してください。[終了]アクションを使うことで後続のアクションを[はいの場合]に追加する必要がなくなり、条件分岐による階層が深くなることを防ぐことができます。

[終了]アクションは終了時の状態を設定できます。実行履歴の状況に表示されますので、仕様に合うように設定をしてください。
[終了]アクションの設定画面
設定項目設定例説明
状態成功通知させないために終了させますが、正常系なので状態は成功としてください。
「休日のため通知せず終了する」の設定

祝日を除く平日のためリマインダー通知

最後にリマインダーをTeamsのチャットに送信します。[Microsoft Teams]コネクタの[チャットまたはチャネルでメッセージを投稿する]アクションを追加してください。

[チャットまたはチャネルでメッセージを投稿する]アクションは、[投稿者]や[投稿先]によって設定項目が変わります。
[チャットまたはチャネルでメッセージを投稿する]アクションの設定画面

まずは検証のため自分宛にメッセージを送ってみましょう。動作に問題がないことを確認してから目的のリマインダー通知先を設定すると良いでしょう。

設定項目設定例説明
投稿者フロー ボットフロー ボットは、この Power Automate から送信したことを表す投稿者です。
投稿先Chat with Flow botChat with Flow bot は、フロー ボットから[Recipiet]にチャットでメッセージを送ります。
Recipiet(自分のアカウント)メッセージを受け取るアカウントです。動作の検証のため自分を指定してください。
Message(任意のリマインダーメッセージ)リマインドとなるメッセージを書いてください。
「リマインダー通知する」の設定(検証用)

フローのテスト

大枠のフローが構築できたのでテストしてみましょう。右上の[テスト]からフローをテストしてください。

[テスト]をクリックすると、フローで使用する接続とアクションの確認を求められます。問題なければ[フローの実行]をクリックしてください。
フローのテスト画面

今は、「現在時刻」(前述の変数) に「2022-01-01」が設定されていため、「元日」として休日判定となるはずです。

実行履歴を見ると、[終了]アクションでフローは終了しています。リマインダー通知はスキップしたことが分かります。
休日のため通知せず終了したフローのテスト結果画面

以下のページを参考に、「現在時刻」(前述の変数)の値を変えて祝日を判定できたか検証してください。

祝日でない場合は、フロー ボットからチャットにメッセージが届きます。

実行履歴を見ると、[終了]アクションは実行されず、リマインダー通知されたことが分かります。
祝日を除く平日のためリマインダー通知したフローのテスト結果画面

運用に向けて設定を変える

現在時刻」(前述の変数)にはテスト用の値を設定していましたが、運用のため現在時刻を設定しましょう。[値]には、[動的なコンテンツの追加]を選択し[式]からutcNow関数を指定します。式で使う関数は以下の通りです。

関数名説明
utcNow現在のタイムスタンプを文字列として返します
現在時刻」で使う関数

また、送信先を検証のため自分宛にしていましたが、運用に合わせた宛先を設定しましょう。運用時にはチャンネルに投稿するのが良いでしょう。

フローが保存されていることを確認し、翌日の実行を待ちましょう。明日が楽しみですね。

留意点

これで祝日を除く平日にリマインダーを送ることできました。しかし「日本の休日」予定表には問題があります。1月2日や1月3日は、国民の祝日に関する法律で定められた祝日でないため、「日本の休日」予定表に登録されていません。正月三が日で休日を期待していることが多い1月2日や1月3日は、休日の判定とならずリマインダーが送信されます。社内向けのリマインダー程度なら笑い話で済みますが、厳密な運用が必要な場合は、業務用の祝日カレンダーを用意するか、休日判定の条件を追加する必要があります。

最後に

世の中の動向を見ると、コアでないIT業務はシステムエンジニアに依頼せずお客様自身で解決する時代になっていると感じます。私たちもPower Automateといったツールを研究し、お客様と同じ目線で一緒にお仕事できるよう努めてまいります。

今後もPower Automateの魅力を発信していきます。

  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix