会話に添付されたファイルの内容を取得する方法を調べたのでメモ。
やりたいこと
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にファイル情報が渡され、


無事ファイルが保存される。




次回はこの添付されたファイルを使用し、AI Builderとの組み合わせでマルチモーダルなエージェントを構築してみる。
コメント