この記事は、Power Automateで自動化するフローの作成手順になります。
フローが長くなるので、JSON、式をこの記事からコピーして作成してください(アクション名は、同じにしないとフローはエラーになります)。
※細かい式の説明などはありませんが、動画とブログでTeamsにチームメンションして複数ファイルを添付、投稿する自動化を作成できます。
本記事の内容
- Teamsチーム(チャネル)、Outlook受信ボックスの確認
- Teams添付ファイル投稿フロー作成手順
式、JSONをコピーすることができるので、Power Automateが得意でなくても作ることができます。
Teamsチーム(チャネル)、Outlook受信ボックスの確認
受信したメールにある添付ファイルをどのチームのどのチャネルに投稿するかを確認します。
確認することは、大きく分けて3つあります。
確認- チーム名、チームID、チャネルID
- 添付ファイルを保存するドキュメントのパス
- 受信ボックス(個人、共有メールボックス)
トリガーアクション変更すれば、FormsからアップロードしたファイルをTeamsに投稿するときにも使えます。
チーム名は、「チーム」に表示されているチーム名です(ブラウザでTeamsを開いてください)。
チームIDは、チームの右側にある「・・・」→「チームへのリンクを取得」をクリックすると表示されます(ブラウザでTeamsを開いてください)。
groupId=の後から、&tenantId=の前までをコピーしてください。
チャネルIDは、チームへのリンクを取得ではエンコードされているので、ブラウザでTeamsを開いてURLのthreadId=の後から&ctx=の前までをコピーしてください。
ここは手動になるので、コピーしたチームID、チャネルIDはテキストエディタ(メモ帳)に貼り付けておいてください。
次に受信ボックスです。ここではシステム部への問い合わせの「共有メールボックス」を使います。
※システム部への問い合わせで、添付ファイル付きをメールで送信するとチームに投稿されるというフローです。
Teams添付ファイル投稿フロー作成手順
自動化したクラウドフローから「Teams添付ファイル投稿」フローを作成します。
Power AutomateTeams添付ファイル投稿フロー
このフローは、チームに連携されているSharePointのドキュメントにあるチャネル名のフォルダーに、メールに届いた添付ファイルを作成して、チャネルにチームメンション付きで投稿するフローです。
step
1フロー作成(トリガー)
自動化したクラウドフローから「新しいメールが共有メールボックスに届いたとき(V2)」をトリガーにします。
①「作成」→「自動化したクラウドフロー」をクリックします。
②フロー名『Teams添付ファイル投稿』を入力し、「新しいメールが共有メールボックスに届いたとき(V2)」を選択、「作成」をクリックします。
③元のメールボックスのアドレスに「共有メールボックスのアドレス」を入力し、「詳細オプションを表示する」をクリック、添付ファイル付きのみ、添付ファイルを含めるを「はい」に設定します。
※新しいメールが届いたとき(V3)のトリガーでも同じようにできます。
step
2SharePointのドキュメントにフォルダーを作成
Teamsのチャネルにファイルをアップロードすると保存される場所と同じところに、メールに届いた添付ファイルを保存するフォルダーを作成します。
メールには複数ファイルがあるので、フォルダーを作成してその中にファイルを作成します。
④SharePointの「新しいフォルダーの作成」を追加し、サイトのアドレス「SharePointサイト」、一覧またはライブラリ「ドキュメント」、フォルダーのパス【チャネル名/「差出人」「フロー実行日時(秒まで)」】を追加します。
※フロー実行日時(秒まで)の式は、下記をコピーしてください。
※チャネル名の後が作成するフォルダー名です。重ならないようなフォルダー名にしてください。
convertFromUtc(utcNow(),'Tokyo Standard Time','yyyy-MM-dd HH-mm-ss')
step
32つ変数を初期化する
Attachment変数(アレイ)とAttachmentId変数(文字列)を初期化します。これは、最後のアクションOffice 365 groupsの「HTTP要求を送信します」の本文に追加する変数です。
⑤「変数を初期化する」を追加し、名前に『Attachment』を入力、種類「アレイ」を選択します。
※アクション名は、「Attachment変数を初期化する」に変更しました。
⑥「変数を初期化する」を追加し、名前に『AttachmentId』を入力、種類「文字列」を選択します。
※アクション名は、「AttachmentId変数を初期化する」に変更しました。
step
4ループ処理でファイルを作成、ETag、パス
ループ処理でファイルを作成、配列変数、文字列変数に追加するETag、パスも生成します。
⑦SharePoint「ファイルの作成」を追加し、サイトのアドレス「SharePointサイト」、フォルダーのパス「完全パス」、ファイル名「添付ファイル名前」、ファイルコンテンツ「添付ファイルコンテンツ」を追加します。
※「添付ファイル名前」を追加すると「Apply to each」が自動で追加されます。
⑧「データ操作」の「作成」を追加し、下記式を追加します。
※アクション名は「ETag」に変更しました。
slice(outputs('ファイルの作成')?['body/ETag'],2,sub(lastindexOf(outputs('ファイルの作成')?['body/ETag'],','),1))
⑨「データ操作」の「作成」を追加し、SharePointドキュメントのチャネル名までのパスを入力し、「完全パス」「DisplayName」を追加します。
※アクション名は、「パス」に変更しました。
ファイルをアップロードした時のパスがわからない場合は、チャネルにファイルをアップロードして、「パス」をクリックしてください。
step
5ループ処理の中に文字列変数、配列変数追加
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
6ループ処理の外にチーム名、チームID、チャネルIDを追加
最後のアクションをコピペで追加できるように、データ操作の「作成」にチーム名、チームID、チャネルIDを入力してください。
テキストエディタに貼り付けしておいたチームID、チャネルIDを貼り付ける作業です。
⑫「データ操作」の「作成」を追加し、チーム名を入力します。
※アクション名は「チーム名」に変更しました。
⑬「データ操作」の「作成」を追加し、チームIDを入力します。
※アクション名は「チームID」に変更しました。
⑭「データ操作」の「作成」を追加し、チャネルIDを入力します。
※アクション名は「チャネルID」に変更しました。
step
7Office365 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に作成することで同じ、ドキュメントにファイルはアップロードされます。
それをファイルの移動のアクションで移動することをオススメします(ファイルの作成はアクションがエラーになりやすいため)。