2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アプリ登録不要で、Power Automate標準アクションからTeams投稿画像を取得できる

2
Posted at

はじめに

例えば、Teamsのチャネルの投稿を全て抜き出して
SharePoint ListやDataverseなどにナレッジとして整理して移行したいとします。
↓参考
image.png

Teamsのチャネルからデータを抽出する際、Power Automateの「チャネル内のメッセージを取得する」アクションから、投稿本文(コンテンツ)を取得することが多いと思います。

このとき、投稿がHTML形式で返されるため、画像が含まれている投稿では、HTMLの中に次のようなMicrosoft Graph APIのURLが含まれています。

<img src="https://graph.microsoft.com/beta/teams/{team-id}/channels/{channel-id}/messages/{message-id}/hostedContents/{hosted-content-id}/$value"…>

この画像まで取得しようとすると、ここで一つ壁にぶつかります。
以前は、Teamsの投稿に含まれる画像を取得するために、Azureでアプリ登録を行い、Microsoft Graph APIの権限を付与してGraph APIを呼び出す方法を利用していました。

しかし、会社によってはセキュリティ上の理由からアプリ登録やGraph APIの権限付与が制限されていることがあります。

ところが、今回検証してみたところ、以前とは少し事情が変わっていました。

  • アプリ登録を行わなくても画像を取得できる
  • Power Automateの「Microsoft Graph HTTP 要求を送信する」標準アクションを利用する
  • hostedContents/{id}/$value を呼び出して画像を取得できる
  • Teamsの投稿に含まれる画像を取得できる

つまり、これまでアプリ登録が必要だと思っていた画像取得処理を、Power Automateの標準アクションだけで実現できるようになっていました。

じゃあ何で取得できなかった?

そもそも、なぜ今までTeamsチャネルの投稿に含まれる画像を取得できなかったのでしょうか。

実は、Microsoft Graph APIの hostedContents/{id}/$value を使って画像を取得する処理には、以前、Logic AppsやPower Automateのコネクタ側で問題がありました。
問題があった出力内容は下記記事の出力結果が参考になると思います。
(記事投稿主様、参考とさせていただきました。ありがとうございます。)

Microsoft Q&Aでも同様の問題が報告されており、2024年10月にはMicrosoft側でこの問題についてバグが起票されているのが確認できました。

その後、2025年9月にはMicrosoft社員から修正された旨のコメントがあり、2026年4月には実際に正常に画像を取得できるようになったことが上記Q&Aから確認されています。

つまり、以前うまく取得できなかったのは、Graph APIの権限設定の問題ではなく、コネクタ側で画像のバイナリレスポンスを正しく扱えない問題があったためでした。

そして現在はhostedContents/{id}/$value から画像本体を取得すると、

  • $content-type
  • $content

がきちんと返ってくるようになっています。

つまり、以前からAzureでアプリ登録を行い、Microsoft Graph APIの必要な権限を付与すれば、hostedContents/{id}/$valueから画像を取得すること自体は可能でした。

一方で、Power Automateの「Microsoft Graph HTTP 要求を送信する」アクションから同じAPIを呼び出した場合には、取得した画像のバイナリレスポンスをコネクタ側で正しく扱えない問題がありました。

そのため、これまでは「アプリ登録をしてGraph APIの権限を付与する」という方法が必要になるケースがありました。

今回、このコネクタ側の問題が修正されたことで、アプリ登録を行わなくても、Power Automateの標準アクションからGraph APIを呼び出して画像を取得できるようになった、というのが今回のポイントです。

よし、検証してみよう

下記の順で、実際にSharePointの複数行に画像が表示できるかやってみます。
ChatGPT 画像 2026年10月5日 13_20_31.png

1.SharePointのListを準備

SharePointListの複数テキスト列に画像を表示できるか試したいのでListを用意しました。
image.png

画像を含むHTMLを保存したいので、「その他のオプション」から「拡張リッチテキストを使用する」をONにして、msg列を作成します。

次にPower Automateのフローを作成します。

2.「チャネル内のメッセージを取得する」で投稿内容を取得する

まず、「チャネル内のメッセージを取得する」アクションで、画像のURIが含まれている投稿を取得します。
image.png
実行履歴から、body>contentの中の画像データの所を確認し https://graph.microsoft.com/ ~ $value の部分をコピーしておきます。

https://graph.microsoft.com/beta/teams/{team-id}/channels/{channel-id}/messages/{message-id}/hostedContents/{hosted-content-id}/$value

3.「Microsoft_Graph_HTTP_要求を送信する」にURIを設定する

「Microsoft_Graph_HTTP_要求を送信する」アクションに上記のURIを設定します。
image.png

このURLを「Microsoft Graph HTTP 要求を送信する」アクションのURIに設定します。

4.実行する

image.png
フローを実行をしてみると、contentに画像データがBase64形式で返されていることが確認できました。
また、content-typeには画像のMIMEタイプが返されています。
この2つの値を使えば、取得した画像をファイルとして保存できます。

5.Teamsの画像を「ファイルの作成」でSharePointのドキュメントフォルダに保存

image.png

「ファイルの作成」アクションでは、以下を設定します。

  • サイトのアドレス:保存先のSharePointサイト
  • フォルダーのパス:画像を保存するフォルダー
  • ファイル名:$content-typeから画像の拡張子を取得
  • ファイルコンテンツ:$contentをbase64ToBinary()関数でバイナリに変換した値

※画像は白抜きしています。

image.png

ファイル名:

test.@{last(split(
  body('Microsoft_Graph_HTTP_要求を送信する')?['$content-type'],
  '/'
))}

ファイルコンテンツ:

base64ToBinary(body('Microsoft_Graph_HTTP_要求を送信する')?['$content'])

これで、Teamsから取得した画像をSharePointのドキュメントフォルダに保存できます。

6.「項目の作成」アクションで複数行列に画像を埋め込む

最後に、SharePointのドキュメントフォルダに保存した画像を、SharePoint Listの複数行テキスト列に表示させます。

image.png

<p class="editor-paragraph">これは説明文です。</p>

<a href="@{concat(actions('ファイルの作成')?['inputs']?['parameters']?['dataset'],outputs('ファイルの作成')?['body/Path'])}">
  <img src="@{concat(actions('ファイルの作成')?['inputs']?['parameters']?['dataset'],outputs('ファイルの作成')?['body/Path'])}" width="400">
</a>

<p>続きの文章です。</p>

ここでは、「ファイルの作成」アクションで保存した画像のSharePointサイトURLと画像ファイルのPathを組み合わせて、画像のフルパスを作成しています。
そのフルパスをimgタグのsrcに指定することで、複数行列の本文中に画像を表示できます。

また、aタグで画像を囲んでいるため、縮小された画像をクリックすると元サイズの画像ファイルを開くこともできます。

結果

項目の複数行テキスト内に画像をきちんと表示できました。
image.png

まとめ

現在は、Microsoft Graph APIから$content-typeと$contentを取得できるため、Power Automateの「Microsoft Graph HTTP 要求を送信する」アクションを使って、取得した画像をSharePointなどに保存できます。
つまり、アプリ登録ができない環境でも、Teamsの投稿を画像付きで移行できる可能性があります。
※テナント設定や権限などによって動作が異なる場合があると思いますので要検証です

Teamsへの投稿は手軽ですが、ナレッジとして残すのであれば、画像も含めて投稿時の情報をそのまま再利用できるほうが便利です。

今回、それができるようになったことは、私にとって今年の検証の中でも一番うれしい発見のひとつでした。
検証していても面白かったので筆が乗りました。

次回は、取得した画像をDataverseへ登録するところまで試してみたいと思います!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?