Copilot Studio 添付ファイルをSharePointに保存!Power Automate不要【2026年更新版】

2025年現在、Copilot Studioは標準機能でファイルを扱えるようになりました!
以前はPower Automateを使った複雑な手順が必要でしたが、今は設定ひとつで完結します。
本記事では、最新の「標準機能を使った実装方法」を解説します。
※過去の手法(ChannelData、Power Automate経由版)は記事の後半にアーカイブとして残しています。

会話に添付されたファイルの内容を取得する方法を調べたのでメモ。

スポンサーリンク

やりたいこと

画像のように会話の中でファイルを添付して「ファイルの保存」を依頼すると、SPOドキュメントライブラリ上に保存してくれるエージェントを構築する。

構築

まずは新しいトピックを作成し、トリガーに「ファイルの保存を依頼されたときに起動」と設定。
続いて[ツールを追加]から[コネクタ]を選び、SharePointの[ファイルの作成]を選ぶ。
[送信する]を押す。
※見ての通りポップアップが消えずに前面に来てしまうので、うまい具合にこのポップアップをよけてボタンを表示させる必要がある。。
追加したツールの入力で「サイト」と「フォルダー」にファイルの保存先を設定し、[File Name]に以下の式を入力、
First(System.Activity.Attachments).Name
[File Content]に以下の式を入力する。
First(System.Activity.Attachments).Content

以上で構築は完了。

注意:
今回は「必ず1つファイルを添付する」前提で作成しています。添付ファイルが0の(操作ミスの)可能性がある場合はifを、複数添付される可能性がある場合はループを入れること。

動作確認

添付ファイルの保存を依頼すると、
接続を求められるので[許可]する。そうするとフローがエラーを起こすけど、気にしないで[新しいテストセッションを開始する]から会話を仕切りなおす。
再度同じ依頼をすると、今度はフローが成功し、
ファイルがドキュメントライブラリに保存される。

後述の「昔の方法」に比べて格段に楽になった。

ただ今回はテストだったからよかったけど、実際の運用時にはSSO構成を正しく設定するか、会話の冒頭で一度認証を求めるトピックを挟むなどの、何かしらの工夫が必要になりそう。

関連記事

おまけ:【過去の手法アーカイブ】ChannelData、Power Automate経由版

やりたいこと

Copilotとの会話で添付したファイルを取得し、後のノードやPower Automateなどで使いたいときのお話。

添付ファイルはChannelDataから取得可能

SystemのActivityに「Attachments」というプロパティがあるのでだまされるけど、以下の参考サイトによると添付ファイルの情報は「ChannelData」に存在するとのこと。
How to access user uploaded files in Copilot Studio? - Microsoft Q&A
In Microsoft Copilot Studio, how can I extract and store the text content of a Word or PDF file uploaded by an end user ...
ということでChannleDataの中身を表示してみると、OriginalAttachmentsというプロパティにファイルのデータ(base64)が入っている。

今回はこのBase64データを使用し、ファイルの保存機能をエージェントにつけてみる。

構築:添付されたファイルをSharePointに保存する

今回、前提としてファイルは最初に添付された1つだけを対象とする。
※複数対象にしたい場合はFirst関数を使用せず、Tableとして扱うまたはForeachでループしてもらえれば

Power Automateの構築

まずはファイルを保存するPower Automateを構築する。

引数としてファイル名とデータ文字列を取得し、「ファイルの作成」アクションを使用してファイルに保存する。このときデータ文字列はbase64toBinary関数でバイナリ化すること。
※File型の引数はまだCopilot Studioからの呼び出しに対応していないようなので、「文字列」で引数を作成する。

これでPower Automateの構築は完了。

Copilot Studioの構築

トピックを作成し、ChannelDataの中の最初のファイルの「contentUrl」を文字列として取得、
SplitとIndexを組み合わせて、contentUrl内のデータ文字列の部分を取得する。
そしてファイル名を取得し、
これらを先ほど作ったPower Automateに渡す。

以上で構築は完了。

// contentUrlの取得
Text(First(System.Activity.ChannelData.OriginalAttachments).contentUrl)

// データ部分の取得
Index(Split(Topic.contentUrl,","),2).Value

// ファイル名の取得
Text(First(System.Activity.ChannelData.OriginalAttachments).name)

動作確認

ファイルを送ってトピックを起動すると、Power Automateにファイル情報が渡され、
無事ファイルが保存される。

コメント

タイトルとURLをコピーしました