Skip to main content
このガイドは、非同期オペレーションや保留状態、Human-in-the-Loop を扱う AdCP オーケストレーターのベストプラクティスをまとめています。

基本設計原則

1. 非同期を前提に

AdCP プロトコルは本質的に非同期です。処理は秒〜日単位でかかることがあります。 DO:
  • すべてのオペレーションを async/await で設計
  • オペレーション状態を永続化
  • オーケストレーター再起動に耐える
  • 適切なタイムアウトを実装
DON’T:
  • 即時完了を前提にしません
  • 同期ブロッキング呼び出しを使わない
  • 状態をメモリだけに置かない
  • バックオフなしに無限リトライしません

2. ステータス駆動ロジック

オペレーションは標準化されたステータス値を通じて進行する:

3. ステートマシン設計

AdCP タスクステータスに合わせた適切なステートマシンを実装します:

オペレーションの追跡

永続ストレージ

すべてのオペレーションを詳細に追跡しながら保存します:

状態の再同期

起動時にローカル状態をサーバーと同期します:

非同期オペレーションハンドラー

レスポンスの振り分け

ステータスに応じてレスポンスを処理します:

Submitted(長時間)オペレーション

長時間の処理を扱います:

バックオフ付きポーリング

効率的なポーリングを実装します:

Webhook サポート

信頼性の高い Webhook ハンドラー

信頼性パターンを使って Webhook を実装します:

Webhook とポーリングの併用(バックアップ)

Webhook のみに依存しないようにします:

オーケストレーターの例

オーケストレーターの実装例:

キャンペーンライフサイクルにおけるガバナンス

プラン作成(sync_plans)は計画フェーズ中 — キャンペーンが存在する前に発生します。ガバナンスチェックはキャンペーン実行中に発生します。これらは別々の関心事です。 計画フェーズ(メディアプランごとに 1 回):
キャンペーン実行(メディアバイごと):
コード例付きの完全なシーケンスはメディアバイのガバナンスワークフローを、セラーの実行チェック義務はセラー統合ガイドを参照してください。

ベストプラクティス

1. 永続ストレージ

オペレーションの状態には常に永続ストレージを使用します:
  • データベース(PostgreSQL、MongoDB)
  • メッセージキュー(Redis、RabbitMQ)
  • 分散キャッシュ(Redis Cluster)

2. 冪等性

すべてのオペレーションを冪等にする:

3. タイムアウト処理

合理的なタイムアウトを実装します:

4. エラーリカバリー

サーキットブレーカー付きのリトライロジックを実装します:

5. モニタリングとアラート

主要メトリクスを追跡する:
  • タイプ別の保留オペレーション数
  • 平均承認時間
  • 拒否率
  • タスクタイムアウト率
  • API エラー率

ユーザーへの通知

保留中のオペレーションについてユーザーに知らせ続ける:

まとめ

堅牢な AdCP オーケストレーターを構築するには次のことが必要だ:
  1. 全体を通じた非同期設計
  2. 永続化を伴う適切な状態管理
  3. 保留状態の適切な処理
  4. 長時間オペレーションでのユーザーへの通知
  5. モニタリングと観測性
保留状態はエラーではなく、広告ワークフローの正常な一部です。

次のステップ

  • Task Lifecycle: ステータス処理については Task Lifecycle を参照
  • Webhooks: プッシュ通知については Webhooks を参照
  • Security: マルチテナントセキュリティについては Security を参照