拾って落とすエンジニア活動ログ

各種技術や周辺知識のTIPS、振り返り

PowerAutomateを使って、受信したメール本文内容からOutlookカレンダーへの登録(前編)

会社で採用されているグループウェアでスケジュールを管理しているのですが、スケジュールを見るのがひと手間かかるんですよね。

スマホOutlookアプリで見れればいいのに、2分前にアラームもならせればいいのに、、と考えまして、以下の仕様で動作させるようにしました。

 

※2分前というのは、Zoom接続にかかる時間です。5分前だと油断して他のことしていて大抵遅れる。1分前だとZoom会議室のパスワードがわからんなどで間に合わないことがある。というわけで自分的にはベストな時間!

 

動作仕様の概要 

グループウェアから毎朝、当日のスケジュールメールを送信する。(ここはグループウェア側の機能です)

outlookでメールを受信する。

・メールの受信をトリガーにPowerAutomateでメール本文を読み取り、2分前にアラームを鳴らす形でOutlookカレンダーに登録する。

 

 

PowerAutomate側の設定

 

まずはPowerAutomateの画面を開きます。

 

japan.flow.microsoft.com

#URLにflow(旧名称)って残ってるのですね・・・

作成から、

f:id:yb300k:20210629075942p:plain

自動化したクラウドフローを選択します。

 

f:id:yb300k:20210604081855p:plain

フローのトリガーは、 メニューから、

「新しいメールが届いたとき(V3)」です。

グループウェアのメールの条件だけにひっかかるように設定します。

 

グループウェアだと、Fromが自分のメールアドレス、件名が「〇〇さんのスケジュール 」といったメールが届きますので、詳細オプションを開いて条件に指定します。

f:id:yb300k:20210604082103p:plain

 

要注意なのはフォルダーです。自分からのメールは自動でフォルダ振り分けしている場合は、一番上のフォルダーの指定を変えてください。

 

次は読み込んだメールの本文を一行ずつ見ていきます。

こちらで紹介されていた方法を使いました。(改行で区切るためにこんな手段をとらねばならないとは・・・別サイトではHTMLをテキストに変換する関数などを駆使して1行で実装している例もみましたが、出力形式によってはうまく動作しないようだったので、確実に動作しそうなこちら)

mimulife.com

 

上記で文字列を配列に分割しましたので、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に戻す

 

f:id:yb300k:20210614083825p:plain

 

 という流れで取得した開始時刻、終了時刻、タイトルをもとに、 あとはOutlookへの登録です。

 

ここまでは動作の概略を説明しました。次の記事で後半の詳細な設定を説明します。