Microsoft社が提供するローコード開発ツール「Power Platform」のフロー機能(Power Automate)を使用した、Outlookで受信した添付ファイル付きメールをTeamsのチームチャネルに投稿し、チーム内で共有する設定例を紹介します。
取引先からメール送付された請求書、外部からの問合せ受付メールの管理、会員メールの他メンバーへの共有等、様々な用途で活用できると思います。
・操作環境:
・OS:Windows 11
・Webブラウザー:Edge
・使用プラン:Microsoft 365 Business Premium(試用版)
業務シナリオを整理する
この例では、以下のような業務シナリオにもとづき、処理を実装します。
現在、複数人の請求書担当者が取引先から各々請求書を受領し、各々支払処理を行っている。担当者不在時のメールの確認漏れや担当者間のコミュニケーション不足による、支払漏れや二重支払いが時々発生しそうになる。
請求書受付用グループメールアドレスを用意するだけでは受信メールの確認漏れが発生するため、添付ファイル含めた受信メールをTeamsチャネルに自動投稿し、請求書担当者間で共有管理することで上記リスクを回避したい。
実装上の注意点を洗い出す
以下の通り、実装上の注意点を洗い出しました。
- 受信日時のタイムゾーン考慮
SharePointフォルダーに添付ファイルを保存する際、フォルダー名にメールの受信日時を使用する。Power Automate内のタイムゾーンは世界標準時のため、受信日時を日本時間に置き換えて使用する。 - フォルダー名の禁則文字の置換
SharePointフォルダーに添付ファイルを保存する際、フォルダー名にメールの件名を使用する。フォルダー名に使用できない文字があると処理に失敗するため、ハイフン等の別の文字に置き換える。
※参考にした記事:
https://qiita.com/nori790822/items/dfefdd53b8078b4933ef - メール本文の改行コードの置換
メール本文の改行コード「\r\n」がTeams投稿時に無視されるため、改行タグ「<BR>」に置き換える。
※参考にした記事:
https://qiita.com/zu_ki_/items/f652e441d060bac256b0 - Teams投稿メッセージのサイズ考慮
サイズの大きいHTMLメールをTeamsに投稿する場合、サイズ上限超えで処理に失敗することがある。失敗時は本文プレビューを投稿する処理を追加する。
※公式記事:
Microsoft Teams の制限事項と仕様 - Microsoft Teams | Microsoft Learn - Teams投稿アクションのHTML表示の不具合への対応
Teams投稿アクションの投稿内容をHTMLで記述すると、画面表示がおかしくなることがある。[データ操作(Data Operation)>作成]アクションでHTMLベースの投稿内容を定義し、Teams投稿アクションでこれを呼び出す形とする。 - ステップ名でのアンダーバー使用の回避(任意)
ステップ名にアンダーバーを使用すると、画面上半角スペースに見えて誤認識しやすい。関数内でステップを呼び出す際、ステップ名の記述誤りが発生しやすいため、代わりにハイフンを使う。
Teamsチームを用意する
システム管理者にてWebブラウザーよりMicrosoft Teams管理センターにアクセスし、左メニューの[チーム>チームを管理]を選択し、[追加]を選択します。
※Microsoft Teams管理センター:https://admin.teams.microsoft.com/
チームの名前(グループメールアドレスの@から左部分の値にもなるので要配慮)を入力し、[プライバシー]は[プライベート]を選択し、[適用]を選択します。
メンバーでは各請求書担当者を選択し、[適用]を選択します。
チームの作成が完了しました。
この後、このチームのグループメールアドレスで外部からのメールを受信できるように設定します。
Exchange管理センターにアクセスし、左メニューの[受信者>グループ]を選択し、先ほど作成したチームのグループメールアドレスを選択します。
※Exchange管理センター:
https://admin.exchange.microsoft.com/#/homepage
[メンバー]タブを選択し、次の工程で作成するフローの実行者がメンバーに含まれていることを確認します(この例ではシステム管理者)。含まれていない場合は、下のリンク[すべてのメンバーの表示と管理]から追加します。
[設定]タブを選択し、全体設定の上二つのチェックをつけ、[保存]を選択します。
Power Automateでクラウドフローを作成する
Power Automateの画面にアクセスし、左メニューの[作成]を選択し、[自動化したクラウドフロー]を選択します。
※Power Automate画面:Microsoft Power Automate
トリガーの作成
フロー名を適宜入力し、検索欄に[Outlook]と入力し、[新しいメールが届いたとき(V3)]を選択し、[作成]を選択します。
[パラメーター]タブの詳細パラメーターを以下の通り設定します。
・ToまたはCC:payments@xxxxxx.com(前の工程で作成したチームのグループメールアドレス)
・添付ファイルを含める:はい
・フォルダー:受信トレイ
※このフローに接続している受信者がメールの振り分け行っている場合、フォルダーは振り分け先フォルダーにします
変数の初期化
ここからは[+]アイコンよりアクションのステップを追加していきます。
ランタイムで[組み込み]を選択し、[Variable]を選択します。
[変数を初期化する]を選択します。
実装上の注意点の項番2の通り、禁則文字用の配列を定義します。
[パラメーター]タブの項目を以下の通り設定します。
・Name:prohibited-character
・Type:Array
・Value(関数):createArray(‘“’,‘*’,‘:’,‘<’,‘>’,‘?’,‘/’,‘\’,‘|’,‘ ’,‘#’,‘%’,‘ ‘)
※Valueの配列の最後の要素はタブ文字です
また、ステップ名を分かりやすいものに調整した方が良いですが、実装上の注意点の項番6の通り、アンダーバーが半角スペースに見えるため注意が必要です
同じ要領で、禁則文字を置き換えた後の件名を格納する変数を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Variable>変数を初期化する
[パラメーター]タブの項目を以下の通り設定します。
・Name:replaced-subject
・Type:String
・Value(項目):件名
値の変換
メールの受信日時を日本時間に変換した値を求めます。
ランタイムで[組み込み]を選択し、[Date Time]を選択します。
[タイムゾーンの変換]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・Base Time(項目):受信日時
・Source Time Zone:(UTC)Coordinated Universal Time
・Distination Time Zone:(UTC+09:00)Osaka,Sapporo,Tokyo
・Time Unit(カスタム):yyyyMMdd-HHmmss
メールの件名の禁則文字を置き換えた値を求めるにあたり、禁則文字の配列を各々処理するアクションを追加します。
ランタイムで[組み込み]を選択し、[Control]を選択します。
[それぞれに適用する]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・Select An Output From Previous Steps(項目):prohibited-character
※項目選択で設定したい項目が検索しても表示されない場合は、画面右側のように関数で項目を指定する形でも代用できます
メールの件名の禁則文字を置き換えた値を求めるにあたり、データ操作のための一時領域を追加します。
ランタイムで[組み込み]を選択し、[Data Operation]を選択します。
[作成]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・入力(項目):replaced-subject
メールの件名の禁則文字を置き換えた値を求めます。
ランタイムで[組み込み]を選択し、[Variable]を選択します。
[変数の設定]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・Name:replaced-subject
・Value(関数):replace(outputs(‘作成-replaced-subject’),item(),’-’)
※関数内の「作成-replaced-subject」は直前のステップの名前です。禁則文字を半角ハイフンに置き換え、replaced-subjectにセットしています
分岐の作成
Teams投稿内容について、添付ファイル付きのメールを受信した時のみ格納先リンクを表示します。この分岐を追加します。
ランタイムで[組み込み]を選択し、[Control]を選択します。
[条件]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・対象(項目):添付ファイルあり
・演算子:is equal to
・値(関数):true
分岐内処理:false
ここから、falseの分岐内処理を設定していきます。
まず、実装上の注意点の項番5の通り、Teams投稿内容を格納する一時領域を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Data Operation>作成
[パラメーター]タブの項目を画面イメージの通り設定します。その際、本文は実装上の注意点の項番3の通り、改行コードの置き換えを行います。
・本文(関数): uriComponentToString(replace(uriComponent(triggerBody()?['Body']), '%0D%0A', '<br>'))
Teamsチャネルの投稿用アクションを追加します。
ランタイムで[標準]を選択し、[Microsoft Teams]を選択します。
[チャットまたはチャネルでメッセージを投稿する]を選択します。
[パラメーター]タブの項目を以下の通り設定します。
・投稿者:ユーザー
・投稿先:Channel
・Team:payments
・Channel:General
・Message(項目):前のステップで作成した一時領域
・Subject(項目):件名
実装上の注意点の項番4の通り、投稿サイズ上限を考慮した失敗時の処理を追加します。
ランタイムで[組み込み]を選択し、[Control]を選択します。
[スコープ]を選択します。
[設定]タブを選択し、前のステップ名(この例では[チャットまたはチャネルでメッセージを投稿する-false])を展開し、[失敗しました]のみチェックをつけます。
これにより、スコープ内に追加したアクションは、前のステップが失敗したときのみ実行されるようになります。
分岐内処理:false:失敗時
先ほどと同じ要領で、Teams投稿内容を格納する一時領域を追加します(画面割愛)。
・ランタイム:組み込み
・アクション:Data Operation>作成
[パラメーター]タブの項目を画面イメージの通り設定します。本文に関しては、今回は本文のプレビューを選択します。
先ほどと同じ要領で、 Teamsチャネルの投稿用アクションを追加します(画面割愛)。
・ランタイム:標準
・アクション:Microfost Teams >チャットまたはチャネルでメッセージを投稿する
[パラメーター]タブの項目を以下の通り設定します。
・投稿者:ユーザー
・投稿先:Channel
・Team:payments
・Channel:General
・Message(項目):前のステップで作成した一時領域
・Subject(項目):件名
一旦ここまで作成できました。
次の記事では、フロー作成のtrueの分岐内処理と、動作確認を進めていきます。