Power Automateの承認フローがタイムアウトしたときの復旧と再開方法

承認のtimeoutをrun・待機action・承認recordに分け、残存依頼、回答根拠、部分成功を照合して再開範囲を決めます。

AIものさし編集部

Power Automateの承認待ちがタイムアウトしたら、同じ申請をすぐ再送せず、flow runの状態と承認recordの状態を別に確認します。承認画面に依頼が残っていても、元のflowが回答を待ち続けているとは限りません。逆に、通知が見えなくても承認recordが作成済みの場合があります。

本稿はcloud flowの承認処理の診断・復旧設計です。実際の承認、取消・削除、再送、flow再実行、Dataverseの更新は実施していません。以下の対応表は架空例で、特定環境での復旧成功を示すものではありません。

申請ID・承認ID・run IDを結び付ける

業務上の申請ID、approval ID、flow/run ID、申請内容のバージョン、作成時刻と期限を記録します。再申請があれば、旧依頼と新依頼を区別します。同じ件名のmailやTeams cardだけで、どの承認への回答かを決めないようにします。

表は横にスクロールできます

観察した状態確認する対象まだ行わないこと
runがTimed out待機actionとrun開始時刻全体を即再実行
承認一覧にPendingが残るapproval IDと待機run有効な依頼と断定
cardだけ古い表示approvalとrunの実状態重複承認を新規作成
承認済みなのに後続未完了回答記録と失敗action承認結果の上書き

受信mailの返信やcardの見た目だけで処理済みにせず、ownerが対象runと承認状態を照合します。logへ申請本文や個人情報を丸ごと複製せず、識別子と必要な状態だけを残します。

30日と28日の資料を、同じ期限として扱わない

cloud flowのlimits資料(新しいタブで開く)は、run durationを開始時から30日とし、承認待ち等も含み、期限後のpending stepがタイムアウトすると説明しています。一方、approvalsの既知問題(新しいタブで開く)は承認flowの待機が28日を超えると失敗し、approvalがaction centerへ残る場合を案内しています。

この二つを「承認は必ず30日待てる」とまとめません。実runの開始、承認作成、待機action、表示されたerrorと設定を確認します。独自に短く設定したtimeoutがある場合も分けます。残り時間は、mailを読んだ日時だけから計算しないようにします。

期限後に残ったapprovalへ回答できても、それだけで終了したrunが再開する根拠にはなりません。承認recordの整理と、業務処理の再開を別の作業として扱います。公式の既知問題には残存approvalの管理者等による削除もありますが、証跡を保存せず一括削除する復旧手順にはしません。

timeoutと、回答後に待機が止まる問題を分ける

Create an approvalとWait for an approvalを別actionにした構成では、作成から待機に入る間のタイミングも確認します。公式の既知問題には、waitへ到達する前にすぐ回答されたとき、待機が進まなくなる場合が記載されています。単に期限を延ばす前に、同じapproval IDか、作成と待機の間に何をしているかを見ます。

承認結果をloopで待つ設計なら、ApprovedだけでなくRejected、Canceled、custom responseなど、対象の終状態を扱えているかを確認します。拒否や取消を「まだ承認されていない」と読み替えて、永遠に待つ条件にしないようにします。正常回答のrunだけでなく、未回答・拒否・取消の経路も整理します。

後続の部分成功を読んで、再開単位を決める

承認待ちが失敗しても、その前の申請record作成や通知は済んでいる可能性があります。また、回答後に台帳更新だけ成功し、通知で失敗したrunもあります。runの再送ボタンを押す前に、外部systemと申請台帳の状態を確認します。

表は横にスクロールできます

現在の事実復旧で決めること二重処理の防止
元run終了・未承認再申請するか担当者判断旧依頼を明示的に扱う
回答済み・業務未反映有効な回答と内容バージョンを確認元の回答根拠を保持
台帳更新済み・通知失敗通知だけ再開可能か更新を繰り返さない
外部処理の結果不明識別子で状態を読み戻す不明を未実施と決めない

期限切れ後の再承認では、申請内容が変わっていないかも確認します。旧バージョンへの同意を、新しい金額・対象・条件へ自動で転用しません。新しいapprovalを作る判断になった場合は、旧IDとの関係を残し、利用者がどちらへ回答すべきかを明確にします。

長く待つ業務は、run寿命と業務状態を分ける

長期申請を一つの実行中runだけへ預けるより、申請ID、内容バージョン、状態、担当者、期限、承認ID、処理済みstepを永続的に記録する設計を検討します。回答受領と後続処理を分ける場合は、二重通知や遅延回答、取消後の回答をどの状態遷移で拒否・保留するかを決めます。

これは業務設計の例で、Dataverse等のtableを直接書き換えれば復旧できるという製品手順ではありません。connectorの対応action、必要なlicense、組織の運用方式を確認し、承認者の意思決定をAIで代行しない構成にします。

再テストは四つの結果で確認する

許可された検証環境で、期限内の承認、拒否・取消、未回答によるtimeout、旧依頼への遅延回答を分けて確認します。各条件で、申請台帳、approval、run、外部更新の状態が矛盾せず、同じ業務処理が二重に進まないことを合格条件にします。

変更前のflow定義と状態対応表を保存し、問題があれば今回の差分を戻します。戻しても送信済み依頼や外部更新は残るため、残ったrecordをどう扱うかは別に確認します。完了記録には、失敗した待機段階、採用した回答根拠、再開した範囲、残存依頼、未確認の経路を残します。