Power Automate でメール添付ファイルをAIで分類してSharePointに自動振り分けする

メールで届いた添付ファイルを手動で確認して保存先を振り分ける作業は、毎日繰り返すと大きな手間になります。Power Automate と AI Builder を組み合わせれば、PDF や画像の内容を AI が自動判定し、SharePoint の適切なフォルダに保存してチームへ通知するまでをフローで自動化できます。

フローの全体設計(5 ステージ)

このフローは次の 5 ステージで構成されます。全体像を先に把握しておくと、後半の各設定が頭に入りやすくなります。

  1. トリガー:新しいメールが届いたとき(添付ファイルあり)
  2. 添付取得:Get attachment V2 → 自動生成される ForEach ループ
  3. AI 分類:Run a prompt でファイルの内容を判定
  4. Switch 振り分け:AI の出力結果でフォルダを切り替え
  5. 保存 + 通知:SharePoint 保存 → Teams でチームに連絡

トリガーの設定

トリガーは、新しいメールが届いたとき(When a new email arrives V3)、を使います。設定で「添付ファイルを含める:Yes」と「添付ファイルのみ:Yes」を有効にしてください。添付なしのメールでフローが起動するのを防げます。

開発中は、送信者フィルター(From)に自分のメールアドレスを設定するとテストが安全に行えます。テスト用のメールを自分で送るだけでフローが起動するため、本番のメールボックスに影響を与えずに動作確認できます。共有メールボックスに届くメールを処理したい場合も同じトリガーのメールボックス アドレス欄を設定するだけで対応できます。

Get attachment V2 と自動生成される ForEach ループ

添付ファイルの取得(Get attachment V2)アクションを追加して、トリガーの添付ファイル ID を指定します。このとき Power Automate が自動で、それぞれに適用(Apply to each)ループを追加します。初めて見るとなぜループが増えたのかと戸惑いますが、これは正常な動作です。1 件でも複数件でも同じ構造で処理できるようになります。

Apply to each の詳細な仕組みはApply to each 完全攻略記事で解説しています。自動追加されるループを理解しておくと、後続のアクション設定で迷いが減ります。

AI プロンプトでファイルを分類する

ForEach ループ内にプロンプトを実行(Run a prompt)アクションを追加します。取得した添付ファイルをプロンプトのファイル入力に渡し、分類の指示を書きます。

You are a document classifier. Analyze the provided file and classify it as one of: resume, contract, other.
Also provide a brief summary in Japanese (2-3 sentences).
Return a JSON object with keys "category" and "summary".

JSON 出力を指定することが重要です。{"category": "contract", "summary": "..."} という形式で返すよう指示することで、後続の Switch アクションで category を直接参照できます。プロンプトを後から開き直すたびにテストファイルを再アップロードしなければならない仕様があることは把握しておくと開発時に慌てずに済みます。

AI が対応できるファイル形式の制限

Run a prompt アクションが処理できるファイル形式は現時点で PDF・JPEG・PNG・GIF(非アニメーション)に限られます。Word ファイル(.docx)や Excel ファイルはこの方法では処理できません。現実の運用でこれらのファイルが混在する場合は、Switch のその他(other)ケースで未対応ファイルとして別フォルダに保存するか、担当者に確認の通知を送る設計にしておくとよいでしょう。

AI モデルとクレジットの考え方

Run a prompt では複数の AI モデルから選択できます。最上位モデルは精度が高い一方で AI Builder クレジットの消費も大きくなります。要件を満たす最もシンプルなモデルを選ぶがコスト最適化の基本方針です。まず小規模でテストして精度を確認し、必要に応じてモデルをアップグレードする手順が安全です。

Switch 文で振り分け先を制御する

AI の出力 JSON から category を取り出し、Switch(スイッチ)アクションで分岐させます。On には outputs('プロンプトを実行')?['text'] を JSON 解析した上で category を参照します。

  1. 作成(Compose)アクションで AI 出力を確認する
  2. JSON の解析アクションで category と summary を個別変数として取り出す
  3. Switch の On に category を指定し、case を "contract" / "resume" / "other" で作る
  4. 各 case 内に SharePoint への保存アクションをコピーして配置する

Switch の case は既存のアクションをコピー&ペーストして量産できます。contract 用のアクションをコピーして resume 用に貼り付け、保存先フォルダだけ変更するという方法が最も速いです。

SharePoint へのファイル保存とメタデータ更新(2 ステップ必須)

SharePoint へのファイル保存とメタデータ(AI 要約など)の書き込みは、別々のアクションで行う必要があります。ファイルの作成(Create file)でファイルを保存した後、ファイル プロパティの更新(Update file properties)で Description 列などに AI 要約を書き込みます。

// ステップ1: ファイルを保存
Create file
  Site Address: [サイト URL]
  Folder Path: /Shared Documents/Contracts
  File Name: @{item()['Name']}
  File Content: @{items('...の添付ファイルの取得')?['contentBytes']}

// ステップ2: メタデータを更新
Update file properties
  Id: 前のステップの ItemId
  Description: @{body('プロンプトを実行')?['summary']}

ファイル作成とメタデータ更新を同時に行うアクションは存在しないため、必ず 2 ステップに分けてください。この点を知らずに 1 アクションでまとめようとして詰まるケースがよくあります。

Teams 通知への添付とリンク埋め込み

各 case の最後に、チャットまたはチャネルでメッセージを投稿(Post a message in a chat or channel)アクションを追加します。Flow Bot として投稿し、SharePoint に保存されたファイルへの直接 URL を本文に埋め込むことで、チームメンバーがワンクリックでファイルをレビューできます。

HTML モードに切り替えてハイパーリンクを設定すると、[ファイル名]を確認するのような表示になりより使いやすくなります。Teams 通知の設定の詳細についてはPower Automate Teams 通知の設定方法を参照してください。

Compose を使ったデバッグの習慣

AI の出力は構造がわかりにくいことがあります。本番フローに組み込む前に必ず作成(Compose)アクションで AI の返り値を確認してください。特に JSON 形式を指示したはずなのに、テキストとして返ってくるケースがあります。信頼するが確認するがフロー開発の鉄則で、特に AI の出力は目視確認を省略しないことをお勧めします。

フローのエラー処理や実行履歴の見方についてはPower Automate デバッグの記事も参考にしてください。AI を含む複雑なフローほど、実行履歴でのステップ別確認が問題特定の近道になります。

まとめ

メール受信 → 添付取得 → AI 分類 → Switch 振り分け → SharePoint 保存 + Teams 通知、の 5 ステージを押さえれば、添付ファイルの自動ルーティングが実現します。旧デザイナーを使うこと、Compose で AI 出力を先に確認すること、SharePoint 保存とメタデータ更新は 2 ステップに分けること、この 3 点が実装で詰まらないためのポイントです。

メール・通知系のアウトプット全体を設計する際はPower Apps / Power Automate アウトプット完全ガイドも参照してください。

Xでフォローしよう