
毎週定例会の予約のたびに、
参加者の空き時間をチェックするの面倒くさいなぁ

参加者の空き状況のチェックから予約まで、
全部Power Automateで自動化できますよ
本記事では、会議参加者の予定をチェックして会議予約を行う工程を自動化する方法を解説します。
- 会議参加者の空き時間を自動取得する方法
- 定例会のTeams会議招待状を自動送付する方法
作成するフローの内容
本記事では、下記のフローを作成します。

フロー全体のショット
今回作成するフローはこのような形です。

事前準備
空き時間を取得する際、Power AutomateはOutlookの「稼働時間」を参照するため、事前に設定しておきます。
Outlookの「ファイル」タブを開きます。

「オプション」を開きます。

「予定表」内の「稼働時間」を設定します。

スケジュール済クラウドフローの作成
フローの作成に入ります。
本フローは、毎週月曜日の10時に実行するため、「スケジュール済クラウドフロー」よりフローを作成します。

下記画面で実行頻度を設定します。

繰り返し間隔 | 「1週間」で設定 |
設定曜日 | 本フローでは「月曜日」に設定 |
「Recurrence」(繰り返し)の設定
フローの編集画面で「Recurrence」のトリガーをクリックし、タイムゾーンを設定しましょう。

「会議の時間を検索」アクションの設定
会議参加者の空き時間を取得するためのアクションを追加します。
「Office 365 Outlook」の「会議の時間を検索」を選択します。

「会議の時間を検索」アクションのパラメーターを設定していきます。

出席者の最小割合 | 参加者の最低出席率を設定します。 全員の参加が必要であれば、「100」と入力します。 |
開催者が出席しなくてもよいか? | 開催者(ここでは自分)も会議に参加する必要がある場合、「いいえ」を選択します。 |
アクティビティドメイン | 勤務時間中に会議を設定するため、「work」を選択します。 「work」では、Outlookで設定した「稼働時間」が反映されます。 |
必須出席者 | 参加者のアドレスを入力します。 複数人の場合は、「;」(半角セミコロン)でアドレスを区切ります。 例: mochipan@abc.com;mochimochi@abc.com |
会議の継続時間 | 1時間の場合は「60」と入力します。 |
開始時刻 | 本フローでは火曜~金曜日の10~18時の間で、1時間の会議を設定します。 開始時刻を火曜10時からで設定したいため、「fx」より、下記式を入力します。 addDays(utcNow(),1,'yyyy-MM-ddT01:00:00.0000000') ※月曜にフローが実行されるため、addDays(utcNow(),1)とすることで、開始日を火曜日に設定できます。 ※T01:00にすることで、開始時刻を日本時間(+9時間)の10時に設定できます。 |
終了時刻 | 終了時刻を金曜日18時までで設定したいため、「fx」より下記式を入力します。addDays(utcNow(),4) |
※「会議の時間を検索」アクションの詳細設定方法は、以下を参照ください。
「変数を初期化する」アクション追加
「会議の時間を検索」アクションでは、空き時間が複数個取得できます。
その取得した時間の内、決定日時を1つ格納するための変数を設定します。
「Variable」の「変数を初期化する」アクションを選択します。

変数のパラメータを設定します。

Name | 会議時間 |
Type | Array |
Value | 空白 |
アレイのフィルター処理
「会議の時間を検索」アクションで取得した空き時間の候補から、お昼休みの時間(12~13時)を除きます。
「Data Operation」の「アレイのフィルター処理」を選択します。

パラメータを設定します。
※「詳細設定モードで編集」をクリックしてください。

From | 動的なコンテンツより「会議時間の提案」を選択します。 |
Filter Query | 12~13時のお昼休み時間を除きます。 ※世界協定時刻の3~4時 会議の終了時間が12時以下、もしくは会議の開始時間が13時以降 でフィルタリングをかけます。 OR(lessOrEquals(ticks(item()?['meetingTimeSlot/end/dateTime']), ticks(formatDateTime(item()?['meetingTimeSlot/start/dateTime'],'yyyy-MM-ddT03:00:00.0000000'))), greaterOrEquals(ticks(item()?['meetingTimeSlot/start/dateTime']), ticks(formatDateTime(item()?['meetingTimeSlot/start/dateTime'],'yyyy-MM-ddT04:00:00.0000000')))) |
条件 空き時間の有無を判定
アレイのフィルター処理で空き時間をフィルタリングした結果、候補日時があったのか、なかったのかを判定します。
「Control」より「条件」を追加します。

パラメータを設定します。

左辺 | length関数で、アレイ内の要素数をカウントします。length(outputs('アレイのフィルター処理')['body']) |
演算子 | 「以上」を意味する「is greater or equal to」を選択します。 |
右辺 | アレイ内の要素数は1つ以上かどうかを判定するため、「1」と入力します。 |
Trueの場合の設定
条件に合致した場合(=候補日が1つ以上あった場合)のアクションを、Trueの下に設定していきます。
「変数の設定」アクションの追加
取得した候補日の内、1つの決定日時を格納するために、「Variable」の「変数の設定」アクションを追加します。
パラメータを設定します。

Name | 変数を初期化するアクションで作成した「会議時間」変数を選択します。 |
Value | [](アレイ)の中にfirst関数を入力します。[first(outputs('アレイのフィルター処理')['body'])] |
「JSONの解析」アクションの追加
変数の設定で取得した会議の決定日を解析するために、「Data Operation」より「Jsonの解析」を選択します。

パラメータを設定します。

Content | 動的なコンテンツより変数の「会議時間」を選択します。 |
Schema | テストを実行することで取得できる「変数の設定」のValueを、「サンプルのペイロードを使用してスキーマを生成する」にコピーペーストします。![]() |
「タイムゾーンの変換」アクションの追加
変数の設定で絞った会議の決定日を日本時間に変換するために、「Date Time」より「タイムゾーンの変換」アクションを追加します。

パラメータを設定します。

Base Time | 動的なコンテンツより「Body datetime」を選択します。 |
Source Time Zone | 世界協定時刻の「Coordinated Universal Time」を選択します。 |
Destination Time Zone | 変換先のタイムゾーンは「Osaka, Sapporo, Tokyo」にします。 |
※動的なコンテンツよりJsonの解析からdateTimeを選択すると、自動でFor eachアクションが追加されます。

For each内に、会議の終了時間を日本時間に変換するための「タイムゾーンの変換」アクションも同様に追加します。

※Base Timeでは、下にある「dateTime」を選択してください。

「Teams会議の作成」アクションの追加
「Microsoft Teams」の「Teams会議の作成」アクションを追加します。

パラメータを設定します。

件名 | 会議名を「Power Automate定例会」とします。 |
本文 | 適当なメッセージを入力します。 改行やリンクの挿入にはHTMLコードが必要です。 ※今回は改行コードの<br>を利用しました。 |
タイムゾーン | Tokyo Standard Timeに設定します。 |
開始時刻 | 「タイムゾーンの変換」で取得した会議の開始時間を動的なコンテンツより選択します。 |
終了時刻 | 「タイムゾーンの変換」で取得した会議の終了時間を動的なコンテンツより選択します。 |
カレンダーID | 予定を登録する予定表を選択します。 |
必須の出席者 | 定例会議に参加するメンバーのアドレスを入力します。 複数人指定する際は、アドレスを「;」(半角セミコロン)で区切ります。 |
Falseの場合の設定
条件に合致しない場合(=候補日が1つもない場合)のアクションを、Falseの下に設定していきます。
Teamsの個別チャットで「今週の候補日が1つもない」旨を自分に通知します。
「マイプロフィールの取得」アクションの追加
自分のメールアドレスを取得するため、「Office 365 ユーザー」の「マイプロフィールの取得」アクションを追加します。

「チャットまたはチャネルでメッセージを投稿する」アクションの追加
候補日がなかったことを通知するため、「Microsoft Teams」の「チャットまたはチャネルでメッセージを投稿する」アクションを追加します。

パラメータを設定します。

フローの保存とテスト
保存をし、テストを実行してみてください。
こんな形でOutlookに登録されたら成功です。

コメント