外部イベントでエージェントを再開するときは案件と待機の世代を照合する
「完了した」という通知だけで会話を再開しない。通知の送信元、顧客・案件・操作ID、現在の待機状態を検証し、重複や古い試行の通知で別の処理を進めない。
用語
- 相関ID
- 通知や処理を、対応する案件・外部操作・試行へ結び付ける識別子。
- 待機の世代
- 同じ案件で繰り返した待機や試行を区別するバージョンや番号。
- コールバック
- 外部の処理から呼び出し元へ、結果などを通知する方式。
図と例
通知元と相関IDを検証 → 現在の待機世代と照合 → イベントと再開予約を記録 → 権限・状態を確認して再開
仮定の例:与信審査の試行1が期限切れになり、試行2を待っているときに試行1の承認通知が来た。案件IDが一致しても試行2の承認とは扱わず、古い試行の結果として記録する。現在の審査結果は対応する操作IDで照会し、発注を勝手に進めない。
実際のサービス・製品では
AWS Step Functions
AWS Step Functionsは、対応するStandard Workflowの連携でタスクトークンを使って待機し、コールバックで継続できる。ワークフロー種別・連携先・タイムアウトの制約がある。案件と試行の照合は、このTipの設計例。
資料を読む
解説
外部通知が届く前後に停止するケース、二重送信、順序逆転、期限超過を試す。再開できたことと外部業務が完了したことを分け、再開しなかったイベントにも調査できる状態と担当を付ける。
相関IDは通知と対象の仕事を対応させる識別子。1つの案件で外部審査をやり直すと、同じ案件IDでも待っている試行が違う。待機の世代や操作IDを保存し、現在待っている条件と一致した通知だけを条件付きで受理する。重複排除は同じ通知の再処理を防ぐが、異なる通知の順序逆転は別に扱う。イベントの保存と再開の予約を一体で記録するか、予約漏れを回収する処理を設ける。タイムアウトや人への移管後の通知は履歴として照合し、無条件に自動実行へ戻さない。再開時は現在の権限と対象状態も確認する。コールバック用の秘密はモデルの会話や通常ログに入れない。
トレードオフ
- 外部通知を検証して再開する
- 得るもの:完了を比較的早く検知し、定期照会を減らせる
- 払うもの:認証、相関、重複、遅延通知と予約漏れを扱う必要がある
- 操作IDで定期照会して待機状態を進める
- 得るもの:通知を失った場合も結果を確認できる
- 払うもの:照会量・検知遅延・外部の保持期間を管理する必要がある
さらに学ぶ
チェック
同じ案件の試行2を待っているとき、期限切れになった試行1の承認通知が届いた。適切なのは?
- 古い試行の結果として記録し、現在の待機を承認済みにしない
- 案件IDが同じなので試行2を承認済みにする
- 通知文に承認とあれば発注を進める
解答と解説
古い試行の結果として記録し、現在の待機を承認済みにしない
案件IDだけでは現在待っている試行と対応しない。試行1の通知を試行2の承認に流用しない。通知本文の意味だけで再開すると、期限切れや別の試行の結果で外部操作を進める恐れがある。