Microsoft Power Automate (Flow) で Outlook の予定表を自動承諾する
2019年12月16日 月曜日
CONTENTS
Twitterフォロー&条件付きツイートで「バリーくんぬいぐるみ」を抽選で20名にプレゼント!
応募期間は2019/11/29~2019/12/31まで。詳細はこちらをご覧ください。
今すぐツイートするならこちら→ フォローもお忘れなく!
【IIJ 2019 TECHアドベントカレンダー 12/16(月)の記事です】
かつて「スケジューラ」というと国内には、様々なグループウエアが選択肢としてありましたが、Office 365 の登場で Outlook を採用するケースが増えています。IIJ でもサイボウズ ガルーンを利用していましたが、紆余曲折を経て、現在は Office 365 の Outlook を利用しています。
しかし、それまで他社のスケジューラに浸かっていると、Outlook の予定表にはいくつか馴染まない点があり(※1)、なかでも他人が入れたスケジュールは、出席を依頼された「仮の予定」状態であり、自分で「承諾」状態にするまで確定ではない、というステータスです(※2)。
それはそれで良いのですが、このシステムで最も困るのは、スマートフォンの Outlook アプリで予定表を月間表示にしたときに「仮の予定」が表示されず、いちいち「承諾」しないと表示されなかったり、予定を調整していた段階だったときにうっかりダブルブッキングしてしまうことです。今まで「見たよ」通知をするつもりで、個々の予定を承諾していましたが、ちょっと長い休みに入るとあっという間に承諾依頼のメールでいっぱいになってしまいます。
困った。
よし、もう承諾するのは諦めよう。いや、いっそのこと自動で「承諾」状態にしておけばよい。
ステータス云々よりも、アプリに表示されなくて、会議の存在に気付かないことのほうが問題なのだ。
そもそも手作業でやらなければならない、というところがエンジニア精神に反する。
承諾したかの応答を気にするくらいそのミーティングに必要な重要人物なら、最初からスケジュールアシスタントで調整すれば良い。それに承諾したあとでも辞退はできる。
うむ、早速設定しよう。
手順
1. Power Automate (Flow) にサインインする
https://flow.microsoft.com/ja-jp/
2. 「マイフロー」→「新規」→「自動─一から作成」を選択
3. フロー名を適当に入れて、トリガーは「イベントが作成されたとき (V3)」を選択
ここで似たようなコネクタが出てくるので注意が必要です。
Office 365 は、「Office 365 Outlook」の方を選択します。(※3)
4. 「予定表 ID」に、自分の「予定表」を選択
ここですぐに承諾のステップを追加しても良いのですが、自分が作成した予定を承諾しようとすると、「失敗」ステータスになります。そこで、「開催者」が自分以外の場合にだけ反応するよう、条件分岐を追加することにします。
5. 「新しいステップ」をクリックし、ここで条件分岐を 1つ追加
「組み込み」→「制御」から「条件」を選びます。
6. 反応しない条件を入力
ここでは左辺に動的なコンテンツの追加から「開催者」を選択して入力、右辺に自分のメールアドレスを直接入力します。
なお、この条件分岐を応用して、特定の人物だけ自動承諾の挙動を変えることもできます。例えば、
- 上司が入れた予定はすぐに吟味しておきたいので、自動承諾はせずスマホにプッシュ通知だけする。
- キライな人からの予定には応答したくないので、何もせず正常終了させる。
- 「アイツは Outlook ステータス原理主義者なので、rand() 関数を使って 12〜90分くらい sleep(※4) を入れたあとに自動承諾してやるぜ」
などといった、とても人間味があふれたフローも理論的には作成可能ですが、そういうフローを組むかどうかはアナタ次第です。
7. 「はい」側は、「終了」をセット
「アクションの追加」→「制御」→「終了」
終了の状態は「成功」を返すようにしておきます。
今回のような単純なフローの場合、終了ステータスを返す手順はなくても構いません。ただし複数の条件分岐を入れていき、想定通りに動かなかったとき、成功終了・失敗終了を入れておくと、どこで分岐を失敗したのか分かりやすくなり、デバッグが容易になります。
8. 「いいえ」側には、「イベント招待への応答 (V2)」を追加
「アクションの追加」→「標準」→「Office 365 Outlook」→「イベント招待への応答 (V2)」
9. 自動承諾するパラメータを入力
- 「イベント ID」は、「動的なコンテンツの追加」から「ID」を入力。
- 応答は、「承諾」を選択します。
もし、自動承諾のときにコメントを入れたい場合は任意のメッセージを入力することができます。上記は、自動承諾であることを示すとともに、そのタイムスタンプも入れておく例です。タイムスタンプは、「動的なコンテンツの追加」→「式」から、「addHours(utcNow(),9)」と入力します。(※5)
以上で保存すると、完成形は以下のようになります。
以上で保存ボタンを押して終わり。忘れずにフローを「オン」にしておきます。
他人から予定が入ったときに、ほどなく承諾状態になれば OK!(※6)
ちなみに、Windows の Outlook 2016 なら自動承諾の機能があるようですが、予定の開催者によって動作を変えたり、例外処理をすることはできないようです。それに、Power Automate の方が PC の電源を常時入れておく必要がなく、地球環境にも優しいのでオススメです。
おっと、早速予定が入ったようですね。どれどれ見てみましょう。
しまった!!
本記事は技術的興味と皆さまの便宜のために提供しているものであり、本手順を利用して発生した、いかなる不利益、損害、人間関係の悪化について、筆者は一切の責任を負いかねますので、各自の責任において楽しくご利用ください。
最後に
最後に私がいつも大切にしている格言を紹介して、この記事を締めさせていただきます。
(1) エンジニアは常に楽することを考えるべきである
(2) ただし、(1) を達成するための努力を除く
(3) ただし、(2) を達成するための努力を除く
脚注
- Outlook に移行した当初、同じ部署の人の予定を閲覧・編集することができない、という点が大きな違和感でした。これは「Outlook の予定表はメールボックスの一部であり、予定(イベント)は 1通のメールと考えることができる」というのを社内の Office 365 ソリューション担当の部隊から教えていただき、なるほど、他人のメールボックスを読むことができないのと同じだ、と思えるようになりました。[↑]
- 自分の予定は自分で決めるものであり、出席するなら「承諾」、出席するつもりがないのならスケジューラ上で「辞退」を表明すべし、という思想に基づいているものと思われます。Microsoft お膝元の欧米では、そっちのほうがしっくりくるのかもしれませんが、過去使っていたスケジューラでは、「出席は求めないけど、この時間にこういう会議をしているよ」という情報共有的に入れていたこともあり、あまり馴染まないものでした。[↑]
- Outlook.com は、Windows Live Hotmail (旧 MSN) の流れを組むコンシューマ向けのコネクタです。プライベートでも Outlook を使っている場合、一部の表現が異なりますが、同じように設定できます。当初違いが分からず、社内の方から指摘されて気づきました。[↑]
- sleep に相当するアクションは「組み込み」→「スケジュール」→「待ち時間」にあります。乱数の生成方法は rand(最小値, 最大値) です。相手の気持ちを逆撫でする可能性もある高等テクニックであり、諸刃の剣です。[↑]
- 日本時間(JST)表記にするため UTC に +9時間しています。フローの中で扱う時刻を全て JST にしたい場合は、トリガーの次に「組み込み」→「日付と時刻」→「タイムゾーンの変換」で JST にしておくこともできます。例えば、こんな感じです。[↑]
- Power Automate は Office 365 のライセンス形態によって、実行できる API コール数が決められています。フローでうっかりループを作成してしまうと、あっという間に API コール数を消費してしまうので気をつけてください。例えば、「イベントが変更されたとき(V3)」や、「イベントが追加、更新、削除されたとき(V2)」をトリガーにして、Power Automate で予定を変更するフローを組むと無限ループします。私はこれでうっかり無限ループさせてしまって、隣の部署の上司に 1000通近くのメールを送ってしまいました。。。この場を借りて陳謝いたします。大変申し訳ございません。[↑]