PowerAutomateを使って、受信したメール本文内容からOutlookカレンダーへの登録(前編)
会社で採用されているグループウェアでスケジュールを管理しているのですが、スケジュールを見るのがひと手間かかるんですよね。
スマホのOutlookアプリで見れればいいのに、2分前にアラームもならせればいいのに、、と考えまして、以下の仕様で動作させるようにしました。
※2分前というのは、Zoom接続にかかる時間です。5分前だと油断して他のことしていて大抵遅れる。1分前だとZoom会議室のパスワードがわからんなどで間に合わないことがある。というわけで自分的にはベストな時間!
動作仕様の概要
・グループウェアから毎朝、当日のスケジュールメールを送信する。(ここはグループウェア側の機能です)
・outlookでメールを受信する。
・メールの受信をトリガーにPowerAutomateでメール本文を読み取り、2分前にアラームを鳴らす形でOutlookカレンダーに登録する。
PowerAutomate側の設定
まずはPowerAutomateの画面を開きます。
#URLにflow(旧名称)って残ってるのですね・・・
作成から、
自動化したクラウドフローを選択します。
フローのトリガーは、 メニューから、
「新しいメールが届いたとき(V3)」です。
グループウェアのメールの条件だけにひっかかるように設定します。
某グループウェアだと、Fromが自分のメールアドレス、件名が「〇〇さんのスケジュール 」といったメールが届きますので、詳細オプションを開いて条件に指定します。
要注意なのはフォルダーです。自分からのメールは自動でフォルダ振り分けしている場合は、一番上のフォルダーの指定を変えてください。
次は読み込んだメールの本文を一行ずつ見ていきます。
こちらで紹介されていた方法を使いました。(改行で区切るためにこんな手段をとらねばならないとは・・・別サイトではHTMLをテキストに変換する関数などを駆使して1行で実装している例もみましたが、出力形式によってはうまく動作しないようだったので、確実に動作しそうなこちら)
上記で文字列を配列に分割しましたので、Apply to Eachループの中で一行ずつ内容を見れるようになります。次は各行の内容から
・開始時刻
・終了時刻
・タイトル
を取得します。
※ここはグループウェアの仕様にかなり依存しますが、
「・hh:mm - hh:mm」
上記で開始時間と終了時間が表示され、その次の行に
「打ち合わせタイトル」
という形で1日分のスケジュールがまとめて送られてくる仕様だということで続けます。
・9:00 - 9:05
朝会@Zoom
・10:00 - 11:00
XXプロジェクトキックオフ
みたいな本文イメージです。
Apply to eachループで1行ずつ見て、「次の行の文字列を取得する」ができればすぐなのですが、現時点やり方に到達できなかったため、以下のやり方をします。
変数として、「開始・終了時刻を取得した次の行=タイトルを取得するべき状態にいるのか、そうではないのか」フラグを持つ。
各行で
行頭が「・」 ⇒ 開始時刻、終了時刻を取得し、上記フラグをtrueにする
上記フラグがtrueである⇒タイトルを取得する & フラグをfalseに戻す
という流れで取得した開始時刻、終了時刻、タイトルをもとに、 あとはOutlookへの登録です。
ここまでは動作の概略を説明しました。次の記事で後半の詳細な設定を説明します。