Power Automateでエラー発生時にTeamsに通知を送る方法:これでトラブルを見逃さない!
Power Automateで業務を自動化していると、予期せぬエラーはつきものです。しかし、エラーが発生したことをすぐに知ることができれば、問題解決までの時間を大幅に短縮し、業務への影響を最小限に抑えることができます。
Microsoft Teamsは、多くの組織で日常的なコミュニケーションツールとして利用されており、Power Automateのエラー通知をTeamsに送ることで、担当者がリアルタイムでエラーを把握し、迅速に対応できる体制を構築できます。
1. エラー通知の基本的な考え方
Power Automateでエラーを捕捉し、Teamsに通知を送るための核となるのは、以下の2つの概念です。
- 「構成:実行条件」(Run After):
- Power Automateの各アクションには「構成:実行条件」という設定があります。通常、アクションは「前のステップが成功した場合」にのみ実行されます。
- この設定を「前のステップが失敗した場合」に変更することで、エラーが発生した場合にのみ動作する特定のアクション(例:Teamsへの通知アクション)を設定できます。
- 「スコープ」アクション:
- プログラミングにおける「try-catch」ブロックのように、特定の一連の処理をグループ化し、そのグループ全体でエラーが発生したかどうかを監視するために「スコープ」アクションを使用します。これにより、フローの可読性も向上します。
result()関数:- スコープ内のどのアクションが失敗したか、どのようなエラーメッセージが出たかといった詳細情報を取得するために、
result()関数を使用します。
- スコープ内のどのアクションが失敗したか、どのようなエラーメッセージが出たかといった詳細情報を取得するために、
2. Power AutomateでTeams通知を設定する手順
ここでは、「SharePointリストのアイテムを更新する」という処理でエラーが発生した場合に、Teamsに通知を送るフローを例に解説します。
ステップ0:フローの準備
まず、エラーを監視したい既存のフロー、または新規にフローを作成します。
- トリガー: 例として「手動でフローをトリガーします」
- メインの処理: 例として「SharePointのアイテムを更新します」アクション(このアクションでエラーが発生する可能性を想定します)。
ステップ1:エラーを監視する「スコープ」アクションの追加
エラーが発生する可能性のあるアクションを「スコープ」で囲み、グループ化します。
- フローデザイナーで、監視したいアクション群の直前に「新しいステップ」を追加します。
- 検索ボックスに「スコープ」と入力し、「スコープ」アクションを選択します。このスコープの名前を「メイン処理」など、分かりやすいものに変更することをお勧めします。
- この「メイン処理」スコープの中に、エラーが発生する可能性のある既存のアクション(例:「SharePointのアイテムを更新します」)をすべてドラッグ&ドロップで移動させます。
ステップ2:エラー発生時に実行される「エラーハンドリング」スコープの追加
「メイン処理」スコープが失敗した場合にのみ実行される専用のスコープを作成します。
- 「メイン処理」スコープのすぐ下に「新しいステップ」を追加します。
- 再び「スコープ」アクションを追加します。このスコープの名前を「エラーハンドリング」など、分かりやすいものに変更します。
- この「エラーハンドリング」スコープの「構成:実行条件」を変更します。
- 「エラーハンドリング」スコープの右上にある「…」(その他のコマンド)をクリックし、「構成:実行条件」を選択します。
- デフォルトでは「前のステップが成功した場合」にチェックが入っています。これを解除し、「前のステップが失敗した場合」にチェックを入れます。
- 「完了」をクリックします。
- これで、「エラーハンドリング」スコープは、直前の「メイン処理」スコープが失敗した場合にのみ実行されるようになります。
ステップ3:エラー詳細を取得する「作成」(Compose)アクションの追加(「エラーハンドリング」スコープ内)
エラーハンドリングスコープの中に、エラー情報を取得するアクションを追加します。
- 「エラーハンドリング」スコープの中にある「アクションの追加」をクリックします。
- 検索ボックスに「作成」と入力し、「作成」(Compose)アクションを選択します。このアクションは、任意のデータを出力として保持するのに便利です。
- 「入力」フィールドにカーソルを置き、「式」タブを選択します。
- 以下の式を入力して、「OK」をクリックします。この式は、直前のスコープで失敗したすべてのアクションの結果(エラー情報を含む)を取得します。
result('メイン処理')'メイン処理'の部分は、ステップ1で作成したエラー監視対象のスコープの名前(あなたが変更したもの)に置き換えてください。正確な名前はフローデザイナー上で確認できます。
- (オプション)もう一つ「作成」アクションを追加し、今度はエラーメッセージの本文を抽出します。
- 「入力」フィールドにカーソルを置き、「式」タブを選択します。
- 以下のような式を入力します。これは、失敗したアクションの中から最初のエラーメッセージを取得する一般的な方法です。
first(body('作成')?['errors'])?['message']body('作成')の'作成'部分は、直前のresult('メイン処理')を出力している「作成」アクションの名前(通常は作成または作成_2など)に置き換えてください。- 複数のエラーメッセージをまとめて取得する高度な例:複数のアクションが失敗する可能性がある場合、以下のような式で失敗したアクション名とエラーメッセージをリストアップできます。
join( applyToEach( filter(result('メイン処理'), item()?['status'] == 'Failed'), concat(item()?['displayName'], ': ', item()?['error']?['message']) ), decodeUriComponent('%0A') )decodeUriComponent('%0A')は改行コードです。
ステップ4:エラー詳細をTeamsに通知するアクションの追加
取得したエラー情報をTeamsのチャネルまたは個人に投稿します。
- エラー詳細を取得した「作成」アクション(エラーメッセージの本文を抽出した方、または複数エラーをまとめた方)の下に「新しいステップ」を追加します。
- 検索ボックスに「Teams」と入力し、「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。
- アクションを設定します。
- 「投稿者」:
Flow bot:Power Automateのアイコンで通知されます。ユーザー:フローを作成したユーザー名で通知されます。
- 「投稿先」:
チャネル:特定のTeamsチャネルに通知を送りたい場合。チャネルを選択します。グループチャット:特定のグループチャットに通知を送りたい場合。チャットと個人:特定の個人または複数の個人に直接チャットで通知を送りたい場合。
- 「メッセージ」: エラー内容を分かりやすく記述し、先ほど取得したエラー詳細を動的なコンテンツとして挿入します。
- メッセージ入力例:
【緊急:Power Automate フロー実行エラー発生】 フロー名: @{workflow()['tags']['flowDisplayName']} 環境: @{workflow()['tags']['environmentName']} 以下の処理中にエラーが発生しました。早急にご確認ください。 --- エラー詳細 --- 発生したアクション: @{outputs('エラー詳細をまとめるComposeアクション名')?['body']} エラーメッセージ: @{outputs('エラーメッセージを抽出するComposeアクション名')?['body']} ------------------- フロー実行履歴の確認: @{workflow()['run']['webUrl']}@{workflow()['tags']['flowDisplayName']}:現在のフロー名を取得します。@{workflow()['tags']['environmentName']}:現在の環境名を取得します。@{workflow()['run']['webUrl']}:現在のフロー実行履歴へのURLを取得します。これにより、Teamsから直接エラーが発生したフローの実行履歴に飛んで詳細を確認できます。outputs('エラー詳細をまとめるComposeアクション名')?['body']やoutputs('エラーメッセージを抽出するComposeアクション名')?['body']の部分は、あなたがステップ3で作成した「作成」アクションの正確な名前(例:outputs('作成_エラー詳細')?['body'])に置き換えてください。
- 「投稿者」:
ステップ5:フローを保存してテストする
- 画面右上の「保存」ボタンをクリックします。
- 「テスト」ボタンをクリックし、「手動」を選択してテストを開始します。
- 「メイン処理」スコープ内のアクション(例:「SharePointのアイテムを更新します」)が意図的に失敗するように、設定を一時的に変更してみます。(例:存在しないアイテムIDを指定する、存在しないサイトアドレスを指定するなど)。
- フローを実行し、エラーハンドリングスコープが動作し、Teamsにエラー通知が届くか確認します。
- テストが完了したら、意図的に失敗させた設定を元に戻し、フローを正常な状態に戻しましょう。
3. エラーハンドリングをさらに堅牢にするための考慮事項
- 再試行ポリシーの活用:
- 一時的なネットワーク遅延やAPI制限によるエラーの場合は、各アクションの「設定」で「再試行ポリシー」を設定し、数秒間隔で数回再試行するようにすることで、フローが自動で復旧する可能性を高められます。これにより、Teams通知の頻度を減らすこともできます。
- 「try-catch-finally」構造の実現:
- 成功・失敗にかかわらず常に実行される処理(例:フロー実行ログの記録、リソースの解放など)が必要な場合は、「エラーハンドリング」スコープの後に、「前のステップが成功した場合」と「前のステップが失敗した場合」の両方にチェックを入れた別のスコープ(「finally」スコープ)を追加することで実現できます。
- カスタムログの記録:
- Teams通知だけでなく、エラー情報をSharePointリストやAzure Log Analyticsなどの専用のログ記録場所に自動で保存することで、エラー発生履歴の長期的な追跡と分析が可能になります。
- エラータイプによる分岐:
- 取得したエラーメッセージの内容やHTTPステータスコードによって、通知先や通知内容を変えるなど、より詳細な分岐を設定できます。例えば、特定の致命的なエラーの場合は緊急通知を、軽微なエラーの場合は日次レポートに含める、といった運用が可能です。
- 「Terminate」(フローを終了する)アクション:
- 致命的なエラーが発生した場合に、フローを強制的に停止させるために「Terminate」アクションを使用できます。エラーハンドリングスコープ内でこのアクションを「失敗」ステータスで設定することで、フローの実行履歴に「失敗」が記録され、その後の不要な処理を防げます。

