LoginSignup
9
9

Power Automate でTeams投稿に添付ファイルをつける

Posted at

はじめに

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

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

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

なお、プレミアムコネクタは必要ありません。

忙しい人向けの概要

Microsoft Graph APIを使用するために、Power Automate でTeamsコネクタの「Microsoft Graph HTTP 要求を送信する」を使用します。

下記ページの例 4: 添付ファイルを含むメッセージを送信するをご参照ください。
ただし、idにはeTagに含まれる添付ファイルID であるGUIDを使用する必要があります。

フローの解説

事前準備

メッセージを投稿するために必要な情報をあらかじめ調べておきます。

  • チームを特定するための ID
  • チャネルを特定するための ID
  • ファイルを保存しているSharePoint サイトのホームURL
  • ファイルを特定するための ID やパス

これら4つの情報が必要です。

今回のフローではあらかじめ調べて変数に文字列として格納しています。
image.png

チームIDやチャネルIDを調べるためには、下記のようなアクションを利用することもできます。
また、これらのアクションを利用して動的に投稿先を指定することも可能です。
image.png

ファイルのGUIDを取得する

APIの仕様説明では、driveIditemIdを使用し、かつ、$select=webDavUrlを使用するAPIを使って取得できることが記載されています。
もちろんその方法でも問題ありませんが、Power Automate のアクションでも情報を取得できるので、今回はそちらを使用します。

具体的には下記のようなアクションを使用します。
image.png

どちらを使っても問題ありませんが、今回はファイルの特定のためにパスを使用する関係で、「パスによるファイル メタデータの取得」を使用しています。

実行結果からEtagを確認すると、{}で囲まれたGUIDを確認することができます。
image.png

よって、文字列操作関数を利用するなどして、このGUIDを取り出すことができればOKです。

{}のそれぞれの位置を取得して、substring関数を使って取り出すのが一般的な手法だと思いますが、私はよくsplit関数を使用しています。
image.png

GUIDの取り出し
split(split(outputs('パスによるファイル_メタデータの取得')?['body/ETag'],'{')?[1],'}')?[0]

メッセージの送信

必要な情報がそろったので、いよいよ添付ファイルのついたメッセージを送ります。
「Microsoft Graph HTTP 要求を送信する」アクションを使用して、Graph API リファレンスと同じようにHTTPリクエストを送信します。
image.png

URI
https://graph.microsoft.com/v1.0/teams/@{variables('teamId')}/channels/@{variables('channelId')}/messages
本文(body)
{
    "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と、t添付ファイル(attachment)中のidを揃えることに注意しましょう。
image.png

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

余談(GUIDが必要なワケ)

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

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

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

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

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

image.png

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

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9