はじめに
Power Automate によるTeams投稿にファイルへの参照を付けたい場合、従来ではHTMLの<a>タグを利用して、リンクを付けることが一般的でした。

しかし、この方法では、文章が長くなった場合など、埋もれてしまって気づかれにくいとい問題がありました。

手動で添付ファイルを付けたのと同じく、添付ファイルがわかりやすいように、Power Automate でも投稿ができるようになったよ!というのが本記事の内容です。

なお、プレミアムコネクタは必要ありません。
忙しい人向けの概要
Microsoft Graph APIを使用するために、Power Automate でTeamsコネクタの「Microsoft Graph HTTP 要求を送信する」を使用します。
下記ページの例 4: 添付ファイルを含むメッセージを送信するをご参照ください。
ただし、idにはeTagに含まれる添付ファイルID であるGUIDを使用する必要があります。
フローの解説
事前準備
メッセージを投稿するために必要な情報をあらかじめ調べておきます。
- チームを特定するための ID
- チャネルを特定するための ID
- ファイルを保存しているSharePoint サイトのホームURL
- ファイルを特定するための ID やパス
これら4つの情報が必要です。
今回のフローではあらかじめ調べて変数に文字列として格納しています。

ファイルのGUIDを取得する
APIの仕様説明では、driveIdやitemIdを使用し、かつ、$select=webDavUrlを使用するAPIを使って取得できることが記載されています。
もちろんその方法でも問題ありませんが、Power Automate のアクションでも情報を取得できるので、今回はそちらを使用します。
どちらを使っても問題ありませんが、今回はファイルの特定のためにパスを使用する関係で、「パスによるファイル メタデータの取得」を使用しています。
実行結果からEtagを確認すると、{}で囲まれたGUIDを確認することができます。

よって、文字列操作関数を利用するなどして、このGUIDを取り出すことができればOKです。
{と}のそれぞれの位置を取得して、substring関数を使って取り出すのが一般的な手法だと思いますが、私はよくsplit関数を使用しています。

split(split(outputs('パスによるファイル_メタデータの取得')?['body/ETag'],'{')?[1],'}')?[0]
メッセージの送信
必要な情報がそろったので、いよいよ添付ファイルのついたメッセージを送ります。
「Microsoft Graph HTTP 要求を送信する」アクションを使用して、Graph API リファレンスと同じようにHTTPリクエストを送信します。

https://graph.microsoft.com/v1.0/teams/@{variables('teamId')}/channels/@{variables('channelId')}/messages
{
"body": {
"contentType": "html",
"content": "ファイルを送ります <attachment id=\"@{variables('GUID')}\"></attachment>"
},
"attachments": [
{
"id": "@{variables('GUID')}",
"contentType": "reference",
"contentUrl": "@{variables('contentUrl')}",
"name": "@{outputs('パスによるファイル_メタデータの取得')?['body/Name']}"
}
]
}
ここで、投稿本文(body/content)の中の<attachment>タグ中のidと、添付ファイル(attachment)中のidを揃えることに注意しましょう。

また、contentUrlはファイルへのリンクとなるURLを入力するのですが、少なくともサイトを間違えることのないように注意しましょう。

余談(GUIDが必要なワケ)
ファイルへのリンクとなるcontentUrlさえあれば、GUIDがなくても良さそうなものですが、実際に正しいcontentUrlと適当なidで投稿した添付ファイルでは、ファイルを開くことができなくなります。

逆に、ファイルのGUIDが正しければ、リンクとなるURLが間違っていてもよいのでしょうか?
実際にありそうなケースとして、『ファイルを添付した後に、保存フォルダを変更する』ということを試してみます。

ファイルを移動させても、投稿に保存されたリンクは、移動する前の元の保存場所を示しています。

間違ったリンクになっているはずですが、それでもちゃんとファイルを開くことができますし、

取得した「既存のアクセス権を持つユーザー」へのリンクには、移動した後のフォルダ名が指定されています。

公式の説明文書を見つけられていませんが、Teamsで投稿した添付ファイルの保存場所やファイル名が変わったとしても、リンクを活かすために、ファイル固有のGUIDを使って特定するという動きが組み込まれているようです。


