Power Automate を使って Outlook に登録した会議が終わるちょっと前に通知する

こんにちは。株式会社 エーティーエルシステムズ 中村です。

最近、参加するだけではなく主催する会議が増えてきて、会議の終了時間を気にしながらスムーズに話を進められるようにいろいろ試行錯誤しています。
もともと手動でいろいろトライしていましたが自動化したいと思い Power Automate で会議の終了時間ちょっと前にデスクトップ通知を表示できるようにしてみました。

この記事では、Power Automate と Outlook を用いて Outlook の会議終了ちょっと前にデスクトップ通知を表示できるようにするための方法について解説します。

## 通知までの流れ

以下の流れで通知をするように作っています。Power Automate と Outlook の仕分けルールを組み合わせています。

1. 5分ごとにトリガー
2. Outlook から5分以内に終了する予定を取得
3. 自分自身にメールを送信
4. Outlook の仕分けルールで、受信したときにデスクトップ通知を表示

自分自身にメールを送信しなくとも、Teams のフローボットやスマートフォン通知を用いて通知を受け取ることも可能です。合わせて解説します。

## 作ってみる

### 1. Outlook の仕分けルールを作る

Outlook を開き、「ホーム」タブから、「ルール」→「仕分けルールと通知の管理」をクリックします。

![仕分けルールと通知の管理ボタン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/2702cc21-6a36-000f-4b71-abf45fd25eaf.png)

「自動仕分けウィザード」が開くので、一番上の「特定の人から受信したメッセージをフォルダーに移動する」を選択し、「次へ」をクリックします。

![自動仕分けウィザードで「特定の人から受信したメッセージをフォルダーに移動する」を選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/b2aa50b8-ba86-d8fb-94a4-c9ac89951446.png)

条件の設定画面になるので、画像のように設定します。  
ステップ 2では、リンクになる箇所2点をクリックし、次のように設定します。

- 差出人: 自分のメールアドレスを設定
- 件名または本文に特定の文字: `[通知]` という文字列を設定

![条件の設定画面で設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/0cfabcc4-249f-be44-0c9f-296e57be47fb.png)

件名または本文に特定の文字が含まれているかの設定は、以下のように行います。

1. 「本文に含まれる文字」で、`[通知]` を入力
2. 「追加」をクリック
3. 「特定の文字の一覧」に `"[通知]"` が表示されたことを確認して、「OK」をクリック

![文字の指定ウィンドウで文字を追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/b590e7ef-bb44-dab7-3f01-d26f0c4f52d1.png)

次に、さきほどの条件で抽出されたメッセージにどのような処理を適用するかを設定します。  
ここでは、メールを通知の用途に使用するため、「デスクトップ通知を表示」し、「そのメールは削除する」ようにしました。

![メッセージに対する処理を設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/17c9ad55-f4c7-7f0a-5f18-1da2edda18b3.png)

進むと、例外条件の画面が表示されますが、例外条件はないので「次へ」をクリックします。

![例外条件の設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/bebba320-f008-e62a-595d-9fe251ab162a.png)

最後に仕分けルールの名前を設定します。ここでは「通知用メール受信時にデスクトップ通知を表示」としました。

![仕分けルールの名前を設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/63c42bb5-7ca6-7893-a3de-a0df480d6480.png)

「完了」ボタンをクリックすると、以下のようなポップアップが表示されます。  
「デスクトップ通知を表示する」を有効化したことで、他の端末で確認する場合にはこの仕分けルールは動作しません。

ここまでの設定により、件名または本文に `[通知]` という文字列を含むメールを自分から受信すると、デスクトップ通知が表示されるようになりました。

### 2. フローを作成する

[Power Automate のページ](https://make.powerautomate.com/) にアクセスし、左側ナビゲーションバーから「作成」をクリックします。  
「一から開始」で、「スケジュール済みクラウド フロー」をクリックします。

![「スケジュール済みクラウド フロー」をクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/4273caa1-3eae-a86c-2045-2113d9a65603.png)

「スケジュール済みクラウド フローを構築する」という画面になるので、フロー名と繰り返し間隔を設定し、「作成」をクリックします。  
ここでは、フロー名を「会議終了5分前にデスクトップ通知のメールを送る」としました。

![フロー名を設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/2da58146-b0f2-7547-3f56-a0940c7fa50b.png)

### 3. 「イベントの取得 (V4)」を追加する

画面が切り替わり、フローの中身を作成する画面になります。  
「アクションの追加」で、検索欄に「イベントを取得」と入力し、Office 365 Outlook の「イベントの取得 (V4)」をクリックします。

![「イベントの取得 (V4)」を追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/be84cc42-c846-f6f3-2d3f-1f8fbf9abe57.png)

作成した「イベントの取得 (V4)」の設定で、以下を設定します。

- 予定表 ID: メインで利用している予定表を選択します。ここでは「予定表」を選択
- 詳細パラメーター: 「フィルター クエリ」を追加
- フィルター クエリ: 以下を入力。現在時刻～5分後を対象とするフィルタ条件です

```
end/DateTime gt '@{formatDateTime(utcNow(), 'yyyy-MM-ddTHH:mm:ss')}' AND end/DateTime lt '@{addMinutes(utcNow(), 5)}'
```

![「イベントの取得 (V4)」を設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/6b6405d7-74b2-0f54-38da-90ee164859a0.png)

### 4. 「メールの送信 (V2)」を追加する

通知用メールを送信するアクションを作成します。「アクションの追加」で、検索欄に「メールの追加 outlook」と入力し、Office 365 Outlook の「メールの送信 (V2)」をクリックします。

![「メールの送信 (V2)」を追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/880d41cb-fa64-4a8d-821c-66abedd7a480.png)

作成した「メールの送信 (V2)」の設定で、以下のように設定します。

- 宛先: 自分自身のメールアドレスや名前を入力し、選択
- 件名: 任意の分かりやすいテキストを入力します。イベントの件名を表示するために、画像のように件名欄を追加します
- 本文: こちらも任意の分かりやすいテキストを入力します。Outlook の仕分けルールで設定したように、`[通知]` という文字列を含ませておきます

![「メールの送信 (V2)」を設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/89373426-c2be-1c3f-2292-a3d059f607f0.png)

### 5. 動作テスト

ここまで作成できると、Outlook の会議終了ちょっと前にデスクトップ通知を表示できるようになりました。以下の手順で動作確認ができます。

1. 右上の「テスト」をクリック、「手動」でテスト
2. Outlook で数分後に終了する予定を作成
3. 少し待ってデスクトップ通知が表示されたら成功

## Teams のフローボットなどで通知する

「メールの送信 (V2)」を使用せず、Microsoft Teams の「チャットまたはチャネルでメッセージを投稿する」などを使うことで自分自身に通知を送ることも可能です。  
以下のように設定することで、自分自身へメッセージが送信されるようになります。

![「チャットまたはチャネルでメッセージを投稿する」の設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3659670/96a6ef15-46ef-2383-0e3c-84d2a91e09ce.png)

## 「予定しているイベントが間もなく開始されるとき」を使うのはダメなのか？

他の記事で、「予定しているイベントが間もなく開始されるとき」をトリガー条件とし、会議時間を計算して待ち処理を入れてから通知するというものがありました。  
これでも実現はできるのですが、会議時間が伸びたり、開始後リスケした場合に対応できないという問題点があります。

したがって、一見わかりにくいフィルター クエリを書いて5分以内に終了する予定を取得して通知する実装としています。

## さいごに

Power Automate を利用して会議終了ちょっと前にデスクトップ通知を表示されるようになりました。

次の記事ではこのフローを改良し、予定に紐づいている会議室が次の時間帯も空いているかチェックし、延長可能かを合わせて通知する機能を追加する方法について解説する予定です。

この記事の内容が参考になったら「いいね」をお願いします:star: