Power Automate Teams

【Power Automate】複数添付ファイルをTeamsにメンション投稿

 

相談者
メールで受信した複数添付ファイルをTeamsのチャネルに投稿できますか?
Power Automateを使えば、チームメンションしてリンクではなく、いつもと同じようにファイルを複数添付できます。
龍之介

この記事は、Power Automateで自動化するフローの作成手順になります。
フローが長くなるので、JSON、式をこの記事からコピーして作成してください(アクション名は、同じにしないとフローはエラーになります)
細かい式の説明などはありませんが、動画とブログでTeamsにチームメンションして複数ファイルを添付、投稿する自動化を作成できます。

本記事の内容

  • Teamsチーム(チャネル)、Outlook受信ボックスの確認
  • Teams添付ファイル投稿フロー作成手順

 

YouTubeの動画を見ながら、この記事を使ってフローを作成してください。
式、JSONをコピーすることができるので、Power Automateが得意でなくても作ることができます。
龍之介

 

 

Teamsチーム(チャネル)、Outlook受信ボックスの確認

 

受信したメールにある添付ファイルをどのチームのどのチャネルに投稿するかを確認します。

確認することは、大きく分けて3つあります。

確認
  • チーム名、チームID、チャネルID
  • 添付ファイルを保存するドキュメントのパス
  • 受信ボックス(個人、共有メールボックス)

 

個人にくる添付ファイルをすべてTeamsに投稿することは無いので、共有メールボックスで説明します。
トリガーアクション変更すれば、FormsからアップロードしたファイルをTeamsに投稿するときにも使えます。
龍之介

 

チーム名は、「チーム」に表示されているチーム名です(ブラウザでTeamsを開いてください)

 

チームIDは、チームの右側にある「・・・」→「チームへのリンクを取得」をクリックすると表示されます(ブラウザでTeamsを開いてください)
groupId=の後から、&tenantId=の前までをコピーしてください。

 

 

チャネルIDは、チームへのリンクを取得ではエンコードされているので、ブラウザでTeamsを開いてURLのthreadId=の後から&ctx=の前までをコピーしてください。
ここは手動になるので、コピーしたチームID、チャネルIDはテキストエディタ(メモ帳)に貼り付けておいてください。

次に受信ボックスです。ここではシステム部への問い合わせの「共有メールボックス」を使います。
システム部への問い合わせで、添付ファイル付きをメールで送信するとチームに投稿されるというフローです。

 

FormsからファイルをアップロードするとTeamsにチームメンションして投稿するフローは、YouTubeで説明しています。
龍之介

 

Teams添付ファイル投稿フロー作成手順

 

自動化したクラウドフローから「Teams添付ファイル投稿」フローを作成します。

下記のようにメールの件名、本文、複数ファイルが投稿されます。
龍之介

 

フローにある式、JSONをコピーできるようにしています。
龍之介

 

Power AutomateTeams添付ファイル投稿フロー

このフローは、チームに連携されているSharePointのドキュメントにあるチャネル名のフォルダーに、メールに届いた添付ファイルを作成して、チャネルにチームメンション付きで投稿するフローです。

step
フロー作成(トリガー)

自動化したクラウドフローから「新しいメールが共有メールボックスに届いたとき(V2)」をトリガーにします。

①「作成」→「自動化したクラウドフロー」をクリックします。

②フロー名『Teams添付ファイル投稿』を入力し、「新しいメールが共有メールボックスに届いたとき(V2)」を選択、「作成」をクリックします。

③元のメールボックスのアドレスに「共有メールボックスのアドレス」を入力し、「詳細オプションを表示する」をクリック、添付ファイル付きのみ、添付ファイルを含めるを「はい」に設定します。
新しいメールが届いたとき(V3)のトリガーでも同じようにできます。

step
SharePointのドキュメントにフォルダーを作成

Teamsのチャネルにファイルをアップロードすると保存される場所と同じところに、メールに届いた添付ファイルを保存するフォルダーを作成します。
メールには複数ファイルがあるので、フォルダーを作成してその中にファイルを作成します。

④SharePointの「新しいフォルダーの作成」を追加し、サイトのアドレス「SharePointサイト」、一覧またはライブラリ「ドキュメント」、フォルダーのパス【チャネル名/「差出人」「フロー実行日時(秒まで)」】を追加します。
フロー実行日時(秒まで)の式は、下記をコピーしてください。
チャネル名の後が作成するフォルダー名です。重ならないようなフォルダー名にしてください。

 
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy-MM-dd HH-mm-ss')

 

step
2つ変数を初期化する

Attachments変数(アレイ)とAttachmentsId変数(文字列)を初期化します。これは、最後のアクションOffice 365 groupsの「HTTP要求を送信します」の本文に追加する変数です。

⑤「変数を初期化する」を追加し、名前に『Attachments』を入力、種類「アレイ」を選択します。
アクション名は、「Attachments変数を初期化する」に変更しました。
⑥「変数を初期化する」を追加し、名前に『AttachmentsId』を入力、種類「文字列」を選択します。
アクション名は、「AttachmentsId変数を初期化する」に変更しました。

 

step
ループ処理でファイルを作成、ETag、パス

ループ処理でファイルを作成、配列変数、文字列変数に追加するETag、パスも生成します。

⑦SharePoint「ファイルの作成」を追加し、サイトのアドレス「SharePointサイト」、フォルダーのパス「完全パス」、ファイル名「添付ファイル名前」、ファイルコンテンツ「添付ファイルコンテンツ」を追加します。
「添付ファイル名前」を追加すると「Apply to each」が自動で追加されます。

 

⑧「データ操作」の「作成」を追加し、下記式を追加します。
アクション名は「ETag」に変更しました。

 
slice(outputs('ファイルの作成')?['body/ETag'],2,sub(lastindexOf(outputs('ファイルの作成')?['body/ETag'],','),1))

⑨「データ操作」の「作成」を追加し、SharePointドキュメントのチャネル名までのパスを入力し、「完全パス」「DisplayName」を追加します。
アクション名は、「パス」に変更しました。

ファイルをアップロードした時のパスがわからない場合は、チャネルにファイルをアップロードして、「パス」をクリックしてください。

 

step
ループ処理の中に文字列変数、配列変数追加

AttachmentId変数(文字列)は文字列変数に追加、Attachment変数(アレイ)は配列変数に追加のアクションを追加します。
AttachmentId変数は、ETagが入り、Attachment変数は添付ファイルのJSONを追加します。
どうしてこのようなJSONになるかは、添付ファイル付きでチャネルに投稿して「メッセージの詳細を取得する」のアクションの出力のbodyを見るとわかります。

⑩Apply to eachの中の中に「文字列変数に追加」を追加し、名前に「AttachmentId」を選択、値に下記を追加します。
アクション名は「AttachmentId文字列変数に追加」に変更しました。

<attachment id=\"@{outputs('ETag')}\"></attachment>

⑪「配列変数に追加」を追加し、名前に「Attachment」を選択、値に下記を追加します。
アクション名は、「Attachment配列変数に追加」に変更しました。

{
  "id": "@{outputs('ETag')}",
  "contentType": "reference",
  "contentUrl": "@{outputs('パス')}",
  "name": "@{outputs('ファイルの作成')?['body/DisplayName']}"
}

 

step
ループ処理の外にチーム名、チームID、チャネルIDを追加

最後のアクションをコピペで追加できるように、データ操作の「作成」にチーム名、チームID、チャネルIDを入力してください。
テキストエディタに貼り付けしておいたチームID、チャネルIDを貼り付ける作業です。

⑫「データ操作」の「作成」を追加し、チーム名を入力します。
アクション名は「チーム名」に変更しました。
⑬「データ操作」の「作成」を追加し、チームIDを入力します。
アクション名は「チームID」に変更しました。
⑭「データ操作」の「作成」を追加し、チャネルIDを入力します。
アクション名は「チャネルID」に変更しました。

 

step
Office365 GroupsのHTTP要求を送信するを追加

最後はチームにメンションして添付ファイルを投稿します。
添付ファイル付きの投稿というアクションが無いので、Graph REST APIを使ってHTTP要求します。
メールの件名、メールの本文をそのまま投稿の件名、メッセージにして投稿します。

⑮「Office365 groups」の「HTTP要求を送信します」を追加し、URI、メソッド「POST」、本文を追加選択します。
アクション名は、「チームにチームメンションして添付ファイルを投稿」に変更しました。

 
https://graph.microsoft.com/v1.0/teams/@{outputs('チームID')}/channels/@{outputs('チャネルID')}/messages

 

{
  "subject": "@{triggerOutputs()?['body/subject']}",
  "body": {
    "contentType": "html",
    "content": "<div><at id=\"0\">@{outputs('チーム名')}</at><br>@{uriComponentToString(replace(uriComponent(triggerOutputs()?['body/bodyPreview']), '%0A', '<br>'))}</div>@{variables('AttachmentId')}"
  },
  "attachments": 
   @{variables('Attachment')},
  "mentions": [
        {
            "id": 0,
            "mentionText": "@{outputs('チーム名')}",
            "mentioned": {
            "conversation": {
                    "id": "@{outputs('チャネルID')}",
                    "displayName": "@{outputs('チーム名')}",
                    "conversationIdentityType": "team"
                }
            }
        }
    ],
    "reactions": []
}

 

 

⑯「保存」をクリックします。

 

フローの手順は以上です。
YouTubeにも同じ内容を公開しています。
龍之介

 

まとめ

 

今回は、共有メールボックスに添付ファイル付きのメールを受信したら、Teamsに添付ファイル付きで投稿するフローを作成しました。

Teamsへファイルを投稿すると連携されているSharePointコミュニケーションサイトにアップロードされるので、それと同じようにファイルをドキュメントにアップロードして、メッセージを投稿するときに、そのファイルを参照するようなアクションにしています(contentTypeがreference)。

このフローは、トリガーをFormsに変えてることもできます。

Formsは同じSharePointに作成することで同じ、ドキュメントにファイルはアップロードされます。

それをファイルの移動のアクションで移動することをオススメします(ファイルの作成はアクションがエラーになりやすいため)。

-Power Automate, Teams

© 2022 越後屋ブログ店