Microsoft FormsとOutlookを連携させて他人をカレンダー招待してみた

## はじめに
最近、社内でイベントを企画した時に定期的にFormsの回答を確認して、カレンダー招待するということがあったのですが、参加者が多いと面倒なのとカレンダーの招待漏れがあったので、Formsの回答からカレンダー招待されるように自動化してみました。
FormsをトリガーにPower Automateでメール通知やカレンダーに新規の予定を登録する記事はいくつか見かけたのですが、他人をカレンダーに招待する記事がなかったので、実際に設定値を調整し、試しながら実装までたどり着けました。同じことをしたい人の助けになればと思います。

## 事前準備
### フォームの作成
Formsを開いて適当なフォームを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/3f6f7965-7525-8ce6-ee7b-d8f346fbc4eb.png)

### カレンダーへの予定の登録
Outlookのカレンダーを開いて適当な予定を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/006b535a-53d4-a500-27db-24e4a5305afd.png)

## Power Automateのフローの設定
### フォームをトリガーに設定する
Power Automateを開いて適当なフローを、、、
本題なのでここはちゃんと説明します。
Power Automateを開いて「作成」→「自動化したクラウドフロー」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/5cdadeb7-6964-ef4e-731b-fc9468f364a2.png)

フロー名を入力し、「新しい応答が送信されるとき」を選択し、「作成」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/6935adec-82d7-131b-4aa3-71ec568a2c43.png)

初めてフローを作成する場合は、Microsoftアカウントの連携ができておらず、画像のように「接続が無効です。・・・」と表記され、フォームを読み込むことができません。
その時はMicrosoftアカウントを連携してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/b0369778-f1dd-81bb-307f-c4fe0b036ded.png)

アカウント連携ができたら、フォームIDをドロップダウンで選択できるようになるので、先ほど作成したフォームを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/1f81360c-3d13-4bef-a652-9ceef7958944.png)

フォームをトリガーに設定できました。

### フォームの回答情報を取得する
次は、そのフォームの回答情報を取得します。
先ほど作成したトリガーとなるアクションの下にある＋ボタンからアクションを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/4755b40c-bce4-05a2-abfd-98e939fd0881.png)

アクションの追加画面が開いたら、「Microsoft Forms」を選択し、「応答の詳細を取得する」を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/6495eee1-a007-483f-75c4-a1c722030070.png)

トリガーの下に新しいアクションが追加されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/a2d88387-7f77-2016-3c3d-c3e2d2524a69.png)

追加したアクションには、フォームIDはトリガーと同じフォームIDを選択し、応答IDには右端の⚡マークから応答IDを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/d3c72322-7c9d-39c6-2a8b-5b5d211e1bde.png)

これでフォームの回答情報を取得できるようになりました。
各質問項目の回答内容、回答者のメールアドレス、回答の送信時間が取得できます。

### 招待するカレンダーの予定情報の取得
大詰めになってきました。
さらにアクションを追加し「Outlook.com」を選択し、「イベントを取得する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/52e0b811-3e19-a881-5eea-57e301672054.png)

設定値は以下の画像の通りです。
予定表IDは対象の予定が入ったカレンダーを、詳細パラメータでは「フィルタークエリ」を選択し、以下の文を入力します。予定表IDで選択したカレンダーの全ての予定が対象となるため、そこからフィルタークエリで対象の予定だけを抽出します。
※できるだけ完全一致で抽出するようにしてください。ヒットした予定が全て変更されます。
```
contains(subject ,'（予定名）')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/61eb1300-25b0-76d4-d1f1-eb066aace7b9.png)

### 予定を更新する
これが最後のアクション追加です。
再度アクションを追加し、「Outlook.com」から「イベントを更新する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/edb37d09-7b9a-e041-ac8d-2d30b208db27.png)

「イベントを更新する」は設定項目が多いですが、基本的には直前のアクションで取得したイベントの情報を右側の⚡マークから入力していきます。詳細パラメータは必要なところのみ、✅を付けて表示させます。
注意点としては、開始時刻、終了時刻はUTCで取得しているので、時間を変更する場合はUTCで入力しないといけないです。
もう1点は必須出席者(任意出席者)の入力です。
回答者のみを入力した場合、誰かが回答する度にその回答者だけが出席者に上書きされていき、過去に回答した人のカレンダー招待が無くなってしまいます。
なので、1つ前のアクションで取得した予定の情報から既存の出席者を入力した上で、;(セミコロン)で繋いで回答者を出席者の欄に追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/e317271f-9cd4-e6e0-0610-80744cd283fb.png)

### フローの確認
これでPowerAutomateのフローの設定は完了です。全体は画像のようになります。
あとは保存して、テストを実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/1d5e0c6a-769e-8978-b55d-34f8bad9cf53.png)

## テスト
テストと言っても誰かにフォームを回答してもらうだけです。
社内のメンバーに回答してもらったところ、ちゃんと登録されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/25fb484e-091f-7d7c-ee8e-dd502e21e40d.png)

テスト時にこのフローがどのように動いたかは、作成したフローの実行履歴のところから確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/eb5cafc7-6509-e5df-5b22-ff7d42d37570.png)

実行履歴を開くと、画像のように各アクションの実行ステータスと実行時間が表示されます。
※スクリーンショット用に自分で回答した時のものなので、更新のところは動いていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/fc7d0dab-33d4-b11e-6158-4a0b968df0a8.png)

さらにアクションを選択すると、入力と出力、実行時刻などの情報も見ることができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/fe75a693-afbb-0725-bdaa-503d92e1e46f.png)

また、編集画面の右上にある「テスト」ボタンからはテストの再実行ができ、フローを調整した時に再度フォームを回答してもらわなくても動作確認ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1185845/526e0181-f47b-e95f-2615-e86e9b308fe1.png)

## おわりに
Power Automateを使って、FormsとOutlookを連携させてみました。
今回は、イベントに参加する人しかフォームを回答しない前提でフローを作成しました。
フローのアクションには「Control」というものもあり、条件分岐なども設定できるため、「参加」と回答した人だけをカレンダーに招待するといったこともできます。

みなさんもPower Automateを使用して、作業漏れの回避、自動化による効率化を実施してください！

最後までお読みいただきありがとうございます。
ぜひ「いいね♡」もよろしくお願いしますm(_ _)m