ドラフト仕様 — このプロトコルは開発中です。最終リリースまでに API やスキーマが変更される可能性があります。
本ドキュメントでは Sponsored Intelligence (SI) プロトコルの仕様を定義します。本文中の “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” の語は RFC 2119 に従って解釈します。
Protocol Overview
SI プロトコルは、AI アシスタント(ホスト)がブランドエージェントのエンドポイントを呼び出し、会話型のブランド体験を提供する方法を定義します。プロトコルは次で構成されます。
- ディスカバリー - ホストがブランドエージェントとその機能を発見する方法
- 提供内容の照会 - セッション引き継ぎ前の匿名チェック
- セッション管理 - 開始、メッセージ交換、終了
- 機能ネゴシエーション - 利用できる機能の決定
- UI コンポーネント - 描画用の標準的なビジュアル要素
Transport Requirements
サポートするトランスポート
ブランドエージェントは、以下のうち少なくとも 1 つのトランスポートをサポートしなければなりません。
| Transport | Protocol | Description |
|---|
| MCP | Model Context Protocol | JSON-RPC によるツールベースのやり取り |
| A2A | Agent-to-Agent | メッセージベースのやり取り |
推奨トランスポートとして MCP をサポートすることが望まれます。
トランスポートの宣言
ブランドエージェントは get_adcp_capabilities でサポートするトランスポートを宣言します。
{
"adcp": { "major_versions": [2] },
"supported_protocols": ["sponsored_intelligence"],
"sponsored_intelligence": {
"endpoint": {
"transports": [
{ "type": "mcp", "url": "https://brand.example/mcp" }
],
"preferred": "mcp"
},
"capabilities": { ... },
"brand_manifest_url": "https://brand.example/.well-known/brand-manifest.json"
}
}
複数のトランスポートを宣言する場合、レスポンスには preferred フィールドを含めることが望まれます。
Discovery
機能ディスカバリー
ブランドエージェントは SI 対応を宣言するために get_adcp_capabilities タスクを実装しなければなりません。ホストがこのタスクを呼び出したとき、レスポンスには次を必ず含めます。
supported_protocols 配列内の sponsored_intelligence
- 次を含む
sponsored_intelligence オブジェクト:
endpoint - トランスポートの設定(必須)
capabilities - サポートするモダリティとコンポーネント(必須)
レスポンスには以下を含めることが望まれます。
brand_manifest_url - ブランドアイデンティティの参照
Get Offering
Purpose
si_get_offering タスクはセッション引き継ぎ前に提供内容と提供可否を取得します。ホストはブランドとのエンゲージメントに同意を求める前に、価格や在庫などの情報をユーザーへ提示できます。
Requirements
ホストはセッション開始前に si_get_offering を呼び出してもかまいません。
si_get_offering を呼び出す場合:
- リクエストにユーザーの PII を含めてはいけません
- リクエストには
offering_id を含める必要があります
- パーソナライズ結果のために
context を含めてもかまいません(例: “mens size 14 near Cincinnati”)
- 一致する商品を得るために
include_products: true を設定してもかまいません
- ブランドエージェントは可能であれば
offering_token を返さなければなりません
- ブランドエージェントは有効期限を示す
ttl_seconds を返すことが望まれます
Offering Token Flow
ホストが offering_token を受け取った場合:
- 後続の
si_initiate_session リクエストにこのトークンを含めることが望まれます
- ブランドエージェントはトークンを使って照会とセッションを関連付けることができます
- ホストはトークンを不透明な値として扱わなければなりません
{
"offering_token": "offering_abc123xyz"
}
Matching Products
include_products が true で context が与えられている場合、レスポンスに一致する商品を含めてもかまいません。
{
"available": true,
"offering_token": "offering_abc123xyz",
"offering": {
"title": "Nike Summer Sale",
"summary": "Up to 50% off summer collection",
"price_hint": "from $89"
},
"matching_products": [
{
"product_id": "nike-air-max-90",
"name": "Nike Air Max 90",
"price": "$129",
"availability_summary": "Size 14 in stock"
}
],
"total_matching": 12
}
これにより、セッション開始前にリッチなプレビューを提示できます。
Session Lifecycle
Session States
SI セッションには次の状態があります。
| State | Description |
|---|
active | セッションが進行中 |
pending_handoff | ブランドがコマースフローへのハンドオフを要求 |
complete | セッションが正常終了 |
Initiate Session
si_initiate_session タスクは新しい SI セッションを確立します。
Request Requirements
ホストは次を必ず含めなければなりません。
context - ユーザー意図の自然言語説明
identity - 同意状態を含むユーザーのアイデンティティ
ホストは次を含めることが望まれます。
supported_capabilities - ネゴシエーション用のホスト側機能セット
offering_token - si_get_offering を実行した場合のトークン
ホストは次を含めてもかまいません。
media_buy_id - 広告起点の場合の AdCP メディアバイ ID
offering_id - 適用するブランド固有のオファー
placement - セッションがトリガーされた場所
Response Requirements
ブランドエージェントは次を必ず返さなければなりません。
ブランドエージェントは次を返すことが望まれます。
response.message - 最初の会話メッセージ
negotiated_capabilities - ブランドとホストの機能の交差集合
Send Message
si_send_message タスクはアクティブなセッション内でメッセージをやり取りします。
Request Requirements
ホストは次を必ず含めなければなりません。
session_id - アクティブなセッション ID
さらに次のいずれかを必ず含めます。
message - ユーザーのテキストメッセージ
action_response - UI アクションへの応答
Response Requirements
ブランドエージェントは次を必ず返さなければなりません。
session_id - セッション ID
session_status - 現在のセッション状態(active、pending_handoff、complete)
ブランドエージェントは次を返すことが望まれます。
session_status が pending_handoff の場合、レスポンスには必ず次を含めます。
handoff - コマースフローへのハンドオフ設定
Terminate Session
si_terminate_session タスクは SI セッションを終了します。
Request Requirements
ホストは次を必ず含めなければなりません。
session_id - 終了するセッション ID
reason - 終了理由
Termination Reasons
| Reason | Description |
|---|
handoff_transaction | ユーザーが購入に進む |
handoff_complete | 会話が正常に完了した |
user_exit | ユーザーがセッションを終了した |
session_timeout | 非アクティブによるタイムアウト |
host_terminated | ホストがポリシー/エラーで終了した |
Capability Negotiation
Negotiation Process
- ブランドが SI マニフェストで機能を宣言する
- ホストがセッション開始時にサポート機能を送る
- ブランドがレスポンスでネゴシエート済み(交差)の機能を返す
- セッションは交差した機能のみを使用する
Capability Categories
Modalities
モダリティはインタラクションのモードを定義します。
| Modality | Description | Required Support |
|---|
conversational | テキストでのやり取り | すべての実装で必須 |
voice | 音声によるインタラクション | 任意 |
video | 動画コンテンツの再生 | 任意 |
avatar | アバターによる動画プレゼンス | 任意 |
すべての SI 実装は conversational モダリティをサポートしなければなりません。
Standard Components
準拠するすべてのホストは次のコンポーネントを描画できなければなりません。
| Component | Purpose |
|---|
text | 会話メッセージ |
link | ラベル付き URL |
image | 単一画像 |
product_card | CTA を含む商品表示 |
carousel | カード/画像の配列 |
action_button | コールバックをトリガーする CTA |
Extension Components
ホストは追加コンポーネントをサポートしてもかまいません。
| Component | Purpose |
|---|
app_handoff | プラットフォーム固有アプリへのハンドオフ |
integration_actions | MCP/A2A 追加のプロンプト |
ブランドエージェントはコア機能を拡張コンポーネントに依存してはいけません。
UI Element Requirements
Standard Component Data
各スタンダードコンポーネントは si-ui-element.json で定義された必須フィールドを含めなければなりません。
text: message(必須)
link: url, label(必須); preview(任意)
image: url, alt(必須); caption(任意)
product_card: title, price(必須); subtitle, image_url, description, badge, cta(任意)
carousel: items(必須); title(任意)
action_button: label, action(必須); payload(任意)
Action Handling
ユーザーが action_button を操作した場合:
- ホストは
si_send_message を介して action_response を送信しなければなりません
action_response には action 識別子を含めなければなりません
payload が提供されている場合、action_response に含めることが望まれます
Integration Actions
integration_actions コンポーネントは、ブランドエージェントが恒久的な接続を提案するためのものです。
{
"type": "integration_actions",
"data": {
"actions": [
{ "type": "mcp", "label": "Add as MCP Tool", "highlighted": true },
{ "type": "a2a", "label": "Connect via A2A" }
]
}
}
ホストは、その統合タイプをサポートしている場合に限り integration actions を描画してもかまいません。
Identity and Privacy
Consent Requirements
ホストはブランドエージェントとアイデンティティを共有する前に、ユーザーの明示的な同意を得なければなりません。
同意フローでは次を必ず行います。
- 共有するデータを明示する
- ブランドのプライバシーポリシーを参照させる
- ユーザーに拒否する選択肢を提供する
Identity Object
同意が得られた場合、identity オブジェクトには次を必ず含めます。
consent_granted: true
consent_timestamp - 同意を取得した時刻
consent_scope - 同意したデータ種別の配列
privacy_policy_acknowledged.brand_policy_url
user オブジェクトには次を含めてもかまいません。
email
name
locale
shipping_address
Anonymous Sessions
同意が得られない場合:
identity.consent_granted は必ず false
identity.anonymous_session_id を提供することが望まれます
- PII を送信してはなりません
Commerce Integration
ACP Handoff
session_status が pending_handoff で handoff.type: "transaction" の場合:
- ホストは ACP のチェックアウトフローを開始することが望まれます
handoff.intent には購入意図を記述しなければなりません
handoff.context_for_checkout には会話コンテキストを含めてもかまいません
Commerce Actions
action_button コンポーネントにはコマースアクションを含めてもかまいません。
| Action | Description |
|---|
acp_checkout | ACP チェックアウトを開始 |
add_to_cart | 永続カートに追加 |
Error Handling
Error Response
ブランドエージェントは標準のエラースキーマを使い、errors 配列でエラーを返さなければなりません。
{
"errors": [
{
"code": "session_not_found",
"message": "セッションが期限切れ、または存在しません"
}
]
}
Error Codes
| Code | Description |
|---|
session_not_found | セッション ID が無効または期限切れ |
offer_unavailable | 参照されたオファーが利用不可 |
capability_unsupported | 必要な機能が利用不可 |
rate_limited | リクエストが多すぎる |
Security Considerations
Transport Security
すべての SI 通信は TLS 1.2 以上の HTTPS を使用しなければなりません。
Token Security
- Availability トークンは不透明かつ予測不能でなければなりません
- セッション ID は一意で予測不能でなければなりません
- トークンは妥当な期間内に期限切れにすることが望まれます
Data Minimization
- 同意なしにホストは PII を送信してはなりません
- ブランドエージェントはデータ収集を最小限にすることが望まれます
- セッション終了後はセッションデータを削除することが望まれます
準拠する SI ホストは次を満たさなければなりません。
- MCP トランスポートをサポートする
- すべてのスタンダードコンポーネントを描画する
- セッションライフサイクル(開始、送信、終了)を実装する
- アイデンティティ共有前に同意を取得する
- 機能ネゴシエーションをサポートする
準拠する SI ブランドエージェントは次を満たさなければなりません。
- SI マニフェストを公開する
- 指定されたトランスポートの少なくとも 1 つをサポートする
- 会話モダリティをサポートする
- 有効なセッション ID を返す
- すべての終了理由を処理する
Version History
| Version | Date | Changes |
|---|
| 1.0.0 | 2025-01 | 初版 |