Skip to main content
メディアバイヤーが机に座り、それぞれ異なるデータ形式とインターフェースを表示する4つのプラットフォームダッシュボードに囲まれている Sam は Pinnacle Agency のメディアバイヤーです。クライアントが Acme Outdoor の Trail Pro 3000 向け Q2 キャンペーン ― スポーツとアウトドアライフスタイル系パブリッシャーへのプレミアム動画・ディスプレイ広告、予算 $50,000 ― をようやくGoしました。評価すべきセラーが3社。合わせるべきクリエイティブあり。配信前にはガバナンスレビューも必要です。 前回これほどの規模のキャンペーンを回したときは2週間かかりました。4つのダッシュボード。4つのログイン。決して同じフォーマットでは届かないプロポーザルを比較するためのスプレッドシート。フライト日程を4つの別々のシステムに入力しました。 このウォークスルーでは、Sam が AdCP を使って同じキャンペーンを進める様子を追います ― プラットフォームごとに異なる4つのワークフローを、ひとつのプロトコルで置き換えます。

ステップ 1: ブリーフを書く

Sam は自分が把握していることから始めます。キャンペーンの目標です。 Sam のブリーフが画面上で光り、清潔なティール色の光線として3体のセラーエージェントロボットへと放射されています。各ロボットは自分のポディウムに立ち、届いたリクエストを検討している AdCP では、ブリーフは get_products の中の自然言語です。Sam は各パブリッシャーのターゲティング分類や在庫カテゴリを覚える必要はありません ― 欲しいものを説明すれば、各セールスエージェントが自社在庫に照らして解釈してくれます。
const products = await Promise.all(
  sellers.map(seller => seller.getProducts({
    buying_mode: "brief",
    brief: "Premium video inventory on sports and outdoor lifestyle publishers. Q2 flight, $50K budget. Adults 25-54, US and Canada.",
    brand: { domain: "acmeoutdoor.com" },
    account: { brand: { domain: "acmeoutdoor.com" }, operator: "pinnacle-agency.com" }
  }))
);
ブリーフひとつ。セラー3社。返ってくるのは同じ JSON 構造です。
Sam の言い方プロトコルの呼び方
キャンペーンブリーフget_productsbrief フィールド
メディアプランget_products から返されるプロダクト
IO / 挿入指示書create_media_buy
クリエイティブのトラフィッキング各セラーへの sync_creatives
キャンペーンレポートエージェント横断での get_media_buy_delivery
フライト期間メディアバイまたはパッケージの start_time / end_time

ステップ 2: プロポーザルを比較します

3体のセラーロボットがそれぞれの提案を披露している ― 動画スレート、ディスプレイバナー、ポッドキャストの波形。Sam はひとつの清潔な画面でそれらを並べてレビューし、満足そうな表情を浮かべている プロダクトは標準フォーマットで返ってきます。Sam は初めて、価格・配信予測・ターゲティングオプション・クリエイティブ要件を ― すべて並べて ― 見ることができます。
セラープロダクトCPM予測フォーマット
StreamHausCTV スポーツ プレロール$2889万インプレッションSSAI 30s 動画
OutdoorNetアドベンチャーライフスタイル ディスプレイ$12210万インプレッション300x250, 728x90
PodTrailアウトドア ポッドキャスト ミッドロール$2234万インプレッションオーディオ 30s + コンパニオン
CSV なし。スプレッドシートなし。手入力なし。すべてのセラーが同じスキーマを返すため、プロダクトは比較可能です。 Sam は絞り込みたいと考えています。refine モードに切り替え、各エージェントに調整の指示を出します。
const refined = await seller.getProducts({
  buying_mode: "refine",
  refine: [
    {
      scope: "request",
      ask: "Only guaranteed packages. Must include completion rate SLA above 80%."
    }
  ],
  brand: { domain: "acmeoutdoor.com" },
  account: { brand: { domain: "acmeoutdoor.com" }, operator: "pinnacle-agency.com" }
});
refine 配列を使えば、最初からやり直すことなく制約を重ねられます。各リファインメントは前の結果セットをさらに絞り込みます。

ステップ 3: クリエイティブを合わせる

クリエイティブフォーマットのテンプレート ― 16:9 の動画フレーム、300x250 のバナー、コンパニオン付きのオーディオ波形 ― が小さなロボットに助けられながら実際の広告素材とパズルのピースのようにはまり合っている 各プロダクトにはクリエイティブ要件があります。Sam のプラットフォームは各セラーに list_creative_formats を呼び出し、必要なものを正確に把握します。
  • StreamHaus は SSAI 対応の 30 秒動画(MP4、特定コーデック)が必要です
  • OutdoorNet はディスプレイバナー(300x250 と 728x90)が必要です
  • PodTrail は 30 秒オーディオと 300x250 コンパニオンバナーが必要です
Sam のクリエイティブチームはすでにライブラリに素材を持っています。プラットフォームは既存のマニフェストを各セラーのフォーマット要件に照合し、ギャップを検出します ― PodTrail にはまだ存在しないオーディオカットが必要です。
const result = await seller.syncCreatives({
  account: { brand: { domain: "acmeoutdoor.com" }, operator: "pinnacle-agency.com" },
  creatives: [
    {
      creative_id: "video_30s_trail_pro",
      name: "Trail Pro 3000 - 30s CTV Spot",
      format_id: { agent_url: "https://streamhaus.example", id: "ssai_30s" },
      assets: { video: { url: "https://cdn.pinnacle-agency.example/trail-pro-30s.mp4", mime_type: "video/mp4" } }
    },
    {
      creative_id: "display_trail_pro_300x250",
      name: "Trail Pro 3000 - Display 300x250",
      format_id: { agent_url: "https://outdoornet.example", id: "display_300x250" },
      assets: { image: { url: "https://cdn.pinnacle-agency.example/trail-pro-300x250.png", mime_type: "image/png" } }
    }
  ]
});
if (result.errors) {
  console.error('Sync failed:', result.errors);
} else {
  console.log(`Synced ${result.creatives.length} creatives`);
}

ステップ 4: キャンペーンを開始します

Sam が光るランチボタンを押すと、ホログラフィックのキャンペーン設計図が机の上に現れ、CTV・ディスプレイ・オーディオの3つのブランチが広がり、それぞれに予算額が流れている Sam はメディアバイを作成します。セラーごとに1回の呼び出し、どこでも同じ構造です。
const buy = await seller.createMediaBuy({
  account: { brand: { domain: "acmeoutdoor.com" }, operator: "pinnacle-agency.com" },
  brand: { domain: "acmeoutdoor.com" },
  start_time: "2026-04-01T00:00:00Z",
  end_time: "2026-06-30T23:59:59Z",
  packages: [{
    product_id: "streamhaus_sports_preroll_q2",
    budget: 25000,
    pricing_option_id: "cpm_standard",
    creative_assignments: [{ creative_id: "video_30s_trail_pro" }]
  }]
});
セラーはクリエイティブを検証し、バイを承認するかレビューに回します。Sam はどのダッシュボードにもログインしません ― ステータス更新はプロトコルが処理します。

ステップ 5: ガバナンスチェック

キャンペーン設計図がガバナンスロボットの配置するセキュリティチェックポイントを通過し、予算・ブランドセーフティ・ターゲティングコンプライアンスの3つのブランチそれぞれに緑のチェックマークが押されている 資金が動く前に、Sam のガバナンスエージェントがバイを検証します。
  • 予算: $25K は Sam の承認済み支出限度額の範囲内です
  • ブランドセーフティ: StreamHaus は Acme Outdoor の承認済みパブリッシャーリストに掲載されています
  • コンプライアンス: ターゲティングパラメーターは米国・カナダの規制要件を満たしています
  • クリエイティブ: すべてのクリエイティブに必要な来歴メタデータが付与されています
バイが Sam の権限を超える場合 ― たとえばセラー全体の合計が $75K に達した場合 ― ガバナンスエージェントはマネージャーにエスカレーションします。人間が承認するまでキャンペーンは pending_approval で停止します。
const check = await governance.checkGovernance({
  plan_id: "acme-q2-trail-pro",
  binding: "proposed",
  caller: "https://orchestrator.pinnacle-agency.example",
  tool: "create_media_buy",
  phase: "purchase",
  payload: buy
});

// governance_context をセラーへのメディアバイエンベロープに添付する
const governanceContext = check.governance_context;

if (check.status === "denied" || check.status === "escalated") {
  // 人間にエスカレーション ― 処理を続けてはならない
}

ステップ 6: 配信を監視します

Sam が机でリラックスして背もたれにもたれ、3社のセラーからの統合パフォーマンスチャートを表示する1つの清潔なダッシュボードを見ている ― 棒グラフが上昇し、折れ線グラフが収束し、すべてティール色で描かれている キャンペーンが動き始めました。Sam はひとつのビューで監視します ― プラットフォームは各セラーに get_media_buy_delivery を呼び出して結果をマージします。
const delivery = await seller.getMediaBuyDelivery({
  account: { brand: { domain: "acmeoutdoor.com" }, operator: "pinnacle-agency.com" },
  media_buy_ids: [buy.media_buy_id],
  include_package_daily_breakdown: true
});
すべてのセラーが同じフォーマットでレポートします: インプレッション、クリック、消化金額、完了率。Sam は4つではなく1つのダッシュボードを見ます。StreamHaus の CTV パッケージが未配信になったとき、彼は OutdoorNet に予算を再配分します ― 2つのプラットフォームにログインする代わりに、1回の update_media_buy 呼び出しで済みます。

全体像

メディアバイの5つのステージを示す横並びのパイプライン: Discovery(虫眼鏡)、Planning(設計図)、Execution(ロケット打ち上げ)、Optimization(ダイヤル調整)、Reporting(清潔なダッシュボード) Sam は4つのダッシュボードから1つのプロトコルへと移行しました。CTV 在庫を購入したのと同じタスクが、ディスプレイとオーディオも購入しました ― プラットフォーム固有のコードなし、手動のデータ変換なし、スプレッドシートの突合せなしです。
AdCP 導入前AdCP 導入後
4つのダッシュボード、4つのログイン1つのプロトコル、1つのビュー
手動 CSV 比較標準化されたプロダクトプロポーザル
プラットフォーム固有のクリエイティブ仕様任意のセラーへの list_creative_formats
4つのキャンペーン設定ワークフローどこでも create_media_buy
手動レポート突合せget_media_buy_delivery で集約

さらに深く学ぶ