仕様
この章は、詳細な OpenRTB のトランザクションレイヤの仕様を含んでいます。明示的に指定されている、任意であるという注釈がある、もしくはベストプラクティスから参照されている場合を除いて、この章の全ての事柄が OpenRTB 準拠に必須となります。
オブジェクトモデル
次の UML クラス図は、リクエストおよびレスポンスオブジェクトが含むペイロードの全体構造を図示しています。ペイロードは Openrtb という名前のついたオブジェクトをルートとし、Openrtb オブジェクトは Request と Response の共通のルートになります。そして、Request と Response はペイロードのタイプを決める2番目のルートです。
この章を通して、属性を「必須」もしくは「推奨」として指定することがあります。その属性を省略してしまうことでプロトコルが壊れてしまい、ビジネス価値の指標として保証できなくなる属性を「必須」と指定します。また、その属性を省略してもプロトコルは壊れないものの、ビジネス価値が大きく損なわれる属性を「推奨」と指定します。
仕様準拠の観点から見れば、「推奨」か否かに関わらず「必須」と示されていない全ての属性は任意になります。任意の属性は、省略された場合にそれとみなすことができるデフォルト値を持つことがあります。デフォルト値が指定されていない場合、慣習的には値の省略を「不明」として解釈するべきです。また、空の文字列やヌル値が指定されている場合、省略されている場合と同じように解釈するべきです。(指定されていればデフォルト値、そうでなければ「不明」)
ベストプラクティス: 取引所とデマンドソースは、それがもつ拡張仕様上でどういったオブジェクトや属性を任意のオブジェクトとしてサポートしているかを、パートナーに公開することを勧めます。
このトップレベルオブジェクトは、リクエストとレスポンス両方のペイロードにとってのルートです。バージョン情報と、トランザクションのベースとなるレイヤ4ドメインモデルへの参照を含みます。OpenRTB で使われるドメインモデルは、デフォルトで広告共通オブジェクトモデル(AdCOM)となります。
注釈:このドキュメント上でのルールとして、Java のようなプログラム言語のクラス名の共通ルールに沿い、定義されるオブジェクトは大文字の頭文字で示されます。一方で、オブジェクトの実インスタンスと、ペイロード上のそこへの参照は小文字で示されます。
属性
|
型
|
定義
|
ver
|
文字列
|
OpenRTB レイヤ3仕様のバージョン(例: "3.0")。
|
domainspec
|
文字列; デフォルト “adcom”
|
販売中の商品、入札に対応するメディアなどを定義するために使われる、レイヤ4ドメインモデルの ID。
|
domainver
|
文字列; 必須
|
domainspec 属性で参照されるレイヤ4ドメインモデル仕様のバージョン。
|
request
|
オブジェクト; 必須 ※
|
入札リクエストのコンテナ。※リクエストのペイロードにのみ必須。オブジェクト:Request を参考のこと。
|
response
|
オブジェクト; 必須 ※
|
入札レスポンスのコンテナ。※レスポンスのペイロードにのみ必須。オブジェクト:Response を参考のこと。
|
属性の中には、任意指定のものも含まれます。例えば ver 属性は、このペイロードで用いられる OpenRTB 仕様のバージョンを指定します。これは HTTP ヘッダを介して、レイヤ1上でも伝えられます。実行時トランザクション情報外でペイロードをより自己文書化することで、特定の手助けとなるために有用です。
しかし domainver 属性は、レイヤ4の構造がそのバージョンの間で変わるかもしれないので、実行時ユーティリティを持ちません。この属性は、ドメインオブジェクトのパーサもしくはアンマーシャリング実装を、正しく呼び出すのに役立つものです。
入札リクエストペイロード
リクエストオブジェクトは、最低限の高レベル属性(例:ID、テストモード、オークションタイプ、最大オークション時間、買い手の制限など)と、リクエスト元および実際の販売提供をカバーする下位オブジェクトを含みます。下位オブジェクトは、提供されている商品とそれに該当する取引全てを含みます。
このモデルには、レイヤ4ドメインオブジェクトとの橋渡しとなる二つのポイントがあります。それは、Request オブジェクトと Item オブジェクトです。Request オブジェクト配下のドメインオブジェクトは、提供の全体情報を保持するオブジェクトを含むでしょう。これらは、サイト/アプリ、デバイス、ユーザなどを記したオブジェクトを含むでしょう。一方 Item オブジェクト配下のドメインオブジェクトは、提供されている商品の詳細(例:インプレッション機会)と、入札と関係するメディア上での仕様・制限を指定しているでしょう。
Request オブジェクトは、グローバルにユニークな入札リクエスト ID を含みます。これは ID 属性と呼ばれる必須なもので、一つ以上のオブジェクトを含む Item 配列(例:一つ以上の販売商品)です。そして、その他の属性は提供されている全商品に適用されるルールと制限を示しています。このオブジェクトは、ユーザ、デバイス、サイト/アプリなどといった情報を持つ、レイヤ4ドメインオブジェクトとの橋渡しもしています。
属性
|
型
|
定義
|
id
|
文字列; 必須
|
その入札リクエストにおけるユニークな ID。取引所から提供される。
|
test
|
整数; デフォルト値 0
|
オークションが入札できないテストモード中であるかを示す指示値。0 のとき本番モードで、1のときテストモード。
|
tmax
|
整数
|
取引所が入札の受信に許容するミリ秒最大値で、タイムアウトを避けるためにインターネットレイテンシを含んでいる。この値は、取引所から事前にあるガイダンスに取って代わるものである。取引所が仲介者として振る舞う場合、レイテンシと追加のインターネットホップを考慮して、受信する値よりも受け渡す tmax 値を減らすべきである。
|
at
|
整数; デフォルト値 2
|
オークションタイプ。1 のときファーストプライスで、2 のときセカンドプライス。それ以外に、取引所固有のオークションタイプとして 500 より大きい値が使われることがある。
|
cur
|
文字列 配列; デフォルト値 [“USD”]
|
ISO-4217 のアルファベットコードを使った、この入札リクエストに対する入札に認められる通貨の配列指定。特に取引所が複数の通貨を受け付ける場合は、指定が推奨される。省略された場合は、"USD" が単一の通貨として想定される。
|
seat
|
文字列 配列
|
この商品の入札における買い手シートの制限リスト。顧客やシート ID といった買い手に関する情報は、事前に当事者間で周知されていなければならない。なお、指定の省略は制限がないことを意味する。
|
wseat
|
整数; デフォルト値 1
|
seat 配列による制限指定の解釈を決めるフラグ。0 のときブロックリストで、1 のときホワイトリスト。
|
cdata
|
文字列
|
取引所がサポートしていれば、入札者は取引所の cookie の代わりとしてデータセットを取得できる(オブジェクト: Response の cdata を参考のこと)。また、文字列は base85 の cookie セーフ文字でなければならない。
|
source
|
オブジェクト
|
在庫元とどの主体が最終決定を下すかというデータを提供する Source オブジェクト。オブジェクト: Source を参考のこと。
|
item
|
オブジェクト 配列; 必須
|
(一つ以上の)item オブジェクトの配列で、提供されている商品を構成している。オブジェクト: Itemを参考のこと。
|
package
|
整数
|
ロードブロッキングをサポートするために、提供されている商品が手に入れられる商品のうちの全て(例:Web ページ上での全インプレッション、プレ/ミッド /ポストロールといった全動画スポット)であることを、取引所が確認できるかを示すフラグ。0 のとき確認できない、1 のとき確認できる。
|
context
|
オブジェクト; 推奨
|
提供されている商品の情報を保持するレイヤ4ドメインオブジェクト構造。openrtb.domainspec と openrtb.domainver で参照される仕様およびバージョンに準拠している。 AdCOM v1.x において許可されているオブジェクトは全て任意指定で、DistributionChannel サブタイプの一つ(Site、App もしくは Dooh)、User、Device、Regs、Restrictions、そして AdCOM 指定の下位オブジェクトである。
|
ext
|
オブジェクト
|
取引所固有の拡張仕様を任意指定する。
|
このオブジェクトはトランザクションの送信元についてのデータを保持していて、トランザクション自体のユニーク ID、送信元認証情報、CoC を含んでいます。
注意:ds、dsmap、cert、digest 属性は、 Ads.cert: 署名済み入札リクエスト仕様(訳注:原文よりリンク先を修正) として定義された、デジタル署名済みの入札リクエストをサポートしています。Ads.cert 仕様はまだベータ段階であり、これらの属性についてもそれに近い段階であるということを考慮すべきです。
属性
|
型
|
定義
|
tid
|
文字列; 推奨
|
このトランザクションにおける全サプライチェーンを通じて、参加者全体で共通でなければならないトランザクション ID。これは、ヘッダービディングやそれに似た配信者中心のブロードキャスト配信を通じても、参加する取引所全体で適用される。
|
ts
|
整数; 推奨
|
Unix フォーマット(エポックからのミリ秒)による、サプライチェーンの始まりでリクエストが発生した時点のタイムスタンプ。この値は後続の仲介者を通じて、不変に保たれなければならない。
|
ds
|
文字列; 推奨
|
入札リクエスト上に見つかる不変な属性のセットで構成されるダイジェスト文字列から、配信者もしくは配信者が信頼する代理人によって計算された、このリクエストの生成元を認証するために使われるデジタル署名。より詳細については「在庫認証」の章を参考のこと。
|
dsmap
|
文字列
|
ダイジェストを作成するために使用される属性を示す ID の順序つきリスト。このマップは、入札リクエストからダイジェストを再作成するための重要な指示を提供していて、これは ds 属性のデジタル署名を検査する時に必要とされる手順である。より詳細については「在庫認証」の章を参考のこと。
|
cert
|
文字列; 推奨
|
ds 属性のデジタル署名を生成するために使われる証明書(公開鍵)のファイル名。より詳細については「在庫認証」の章を参考のこと。
|
digest
|
文字列
|
デジタル署名を生成するために署名された全ダイジェスト文字列。より詳細については「在庫認証」の章を参考のこと。 注意:これは必要に応じてデバッグを行う目的でのみ用意されたものです。帯域幅への影響があるので、通常の本番トラフィックのために用意されたものではありません。
|
pchain
|
文字列
|
TAG 請求 ID プロトコルで記述された埋め込みシンタックスを含む請求 ID チェーン文字列。 注意:「ads.txt」仕様と結合した Source オブジェクトの認証機能によって、この属性が廃止されるかもしれません。
|
ext
|
オブジェクト
|
取引所固有の拡張仕様を任意指定する。
|
このオブジェクトは、公開市場もしくは非公開市場取引のいずれの上でも販売提供されている商品の枠を表します。同じ入札リクエストの中に複数の提供商品が存在してもかまいませんが、各入札は興味のある特定の商品を参照しなければならないので、id 属性が必須となります。このオブジェクトは、提供商品のより深い仕様(例:インプレッション)におけるレイヤ4ドメインオブジェクトとの橋渡しを担っています。
属性
|
型
|
定義
|
id
|
文字列; 必須
|
特定の提供におけるこの商品のユニークな ID。(通常1から始まり順に増加する)
|
qty
|
整数; デフォルト値 1
|
この提供商品のインスタンス数。(例:屋外デジタル配信における複数の同一インプレッション)
|
seq
|
整数
|
複数の商品が同じ入札リクエスト上で提供されているとき、シーケンス番号があることで配送の協調が可能になる。
|
flr
|
浮動小数点数
|
CPM で表されるこの商品の最小入札価格。
|
flrcur
|
文字列; デフォルト値 “USD”
|
ISO-4217 のアルファベットコードを使って指定される flr 属性の通貨。
|
exp
|
整数
|
オークションからフルフィルメントまでの許容経過秒数についての通告。
|
dt
|
整数
|
Unix フォーマット(エポックからのミリ秒)による、商品のフルフィルメントが期待される時間のタイムスタンプ。(例:いつ DOOH インプレッションが表示されるか)
|
dlvy
|
整数; デフォルト値 0
|
商品(例:広告オブジェクト)の求められる配送方法。0 のときいずれかの方法で、1 のとき商品はトランザクションの一部として送信されなければならず(例:入札自体の値による方法、入札に含まれる URL で取得される方法)、2 のとき事前に取引所にアップロードされているある商品をその ID で参照しなければならない。ちなみに、取引所が事前アップロードをサポートしていないと参照可能な商品がないかもしれず、デフォルト値の 0 は 1 と同じ意味になる。
|
metric
|
オブジェクト 配列
|
Metric オブジェクトの配列。オブジェクト: Metric を参考のこと。
|
deal
|
オブジェクト 配列
|
この商品に適用可能な特別な協約事項を伝える Deal オブジェクトの配列。オブジェクト: Deal を参考のこと。
|
private
|
整数; デフォルト値 0
|
Deal オブジェクトで指定される、シートがオークションに適格であるかに関する指標。0 のとき全入札を受け付け、1 のとき入札は取引(deal)としての指定とその協約事項に制限されます。
|
spec
|
オブジェクト; 必須
|
提供されている商品を指定するレイヤ4ドメインオブジェクト構造。openrtb.domainspec と openrtb.domainver で参照される仕様およびバージョンに準拠している。AdCOM v1.x において許可されているオブジェクトは Placement と AdCOM 指定の下位オブジェクトである。
|
ext
|
オブジェクト
|
取引所固有の拡張仕様を任意指定する。
|
このオブジェクトは、売り手と買い手の間で事前に取り決められた特定の取引を構成します。取引が存在する場合、この商品がその取引の協約事項の元で有効であることを示します。
属性
|
型
|
定義
|
id
|
文字列; 必須
|
その取引におけるユニークな ID。
|
flr
|
浮動小数点数
|
CPM で表されるこの商品の最小取引価格。
|
flrcur
|
文字列; デフォルト値 "USD"
|
ISO-4217 のアルファベットコードを使って指定される flr
属性の通貨。
|
at
|
整数
|
リクエストの全オークションタイプを任意で上書きする指定。1 のときファーストプライス、2 のときセカンドプライスプラス、3 のとき flr で渡される値が取引価格として合意されたものとなる。また、500 以上の値を使って、追加のオークションタイプが取引所により定義されることがある。
|
wseat
|
文字列 配列
|
この取引での入札を許可する買い手シートのホワイトリスト。シートの ID や買い手が参照する顧客といった情報は、入札者と取引所の間で事前に周知されていなければならない。なお、指定の省略は制限がないことを意味する。
|
wadomain
|
文字列 配列
|
この取引での入札が可能な広告主ドメイン(例:advertiser.com)の配列。指定の省略は制限がないことを意味する。
|
ext
|
オブジェクト
|
取引所固有の拡張仕様を任意指定する。
|
このオブジェクトは、メトリックの配列として商品に関連づけられています。これらのメトリックは最近の平均ビューアビリティや CTR などの、意思決定を支援するための洞察を提供します。各メトリックはそのタイプによって識別され、メトリックの値を報告し、値を計測した送信元もしくはベンダーを任意で識別します。
属性
|
型
|
定義
|
type
|
文字列; 必須
|
事前に入札者へ公開されるべきである取引所管理の文字列名を使って渡される、メトリックのタイプの指定。
|
value
|
浮動小数点数; 必須
|
メトリックの値を表す数値。確率値は 0.0~1.0 の範囲内でなければならない。
|
vendor
|
文字列; 推奨
|
事前に入札者へ公開されるべきである取引所管理の文字列名を使って渡される、送信元の指定。取引所自体がサードパーティにとって送信元である場合は、「EXCHANGE」値が推奨される。
|
ext
|
オブジェクト
|
取引所固有の拡張仕様を任意指定する。
|
入札レスポンスペイロード
レスポンスオブジェクトは、最低限の高水準属性(例:リクエスト ID への参照、入札通貨など)とシート入札の配列を含みます。シート入札とは、それぞれが入札の集合である買い手シートに代わるものです。
個々の入札は、リクエスト内の関連商品と購入情報を参照します。購入情報とは、価格、適用可能である場合には取引 ID、通知 URL といったものを指します。入札に関連するメディアは、各入札に含まれるレイヤ4ドメインオブジェクト(広告クリエイティブ、マークアップ)を介して伝えられます。
このオブジェクトは、Openrtb ルートの下にある入札レスポンスオブジェクトです。オブジェクトの id 属性は、入札リクエスト ID と同一になります。bidid 属性は、入札者のための任意レスポンストラッキング ID です。指定されている場合、それをマークアップや通知 URL 内に置かれる置換マクロで使用可能になるでしょう。少なくとも一つの Seatbid オブジェクトが必須であり、ある商品を表す Bid を少なくとも一つ含みます。そして、それ以外の属性は任意指定になります。
最もコンパクトに「非入札」を表すには、HTTP 204 と空レスポンスを返してください。その一方で入札者が入札しない理由を伝えたい場合は、nbr 属性に理由を表すコードを指定した Response オブジェクトを返すことが可能です。
属性
|
型
|
定義
|
id
|
文字列; 必須
|
このオブジェクトでレスポンスしている入札リクエストの ID。request.id 属性と一致していなければならない。
|
bidid
|
文字列
|
ロギング、トラッキングを支援するために入札者が生成するレスポンス ID。
|
nbr
|
整数
|
該当する場合、入札しない理由を示す(リスト: 非入札理由コード を見ること)。ちなみに、多くの取引所が非入札を示すためにシンプルな HTTP 204 レスポンスを好んでいるものの、理由コードを示すレスポンスはデバッグが必要な場面で便利なことがある。
|
cur
|
文字列; デフォルト値 「USD」
|
ISO-4217 アルファベットコードを使った、入札通貨の指定。
|
cdata
|
文字列
|
取引所がサポートする場合に、入札リクエスト上から取得可能な取引所の cookie に、入札者がデータをセットすることを許容する。(オブジェクト: Request の cdata)文字列は base85 の cookie セーフ文字で構成されていなければならない。
|
seatbid
|
オブジェクト 配列
|
Seatbid オブジェクトの配列で、入札をする場合は一つ以上必要。オブジェクト: Seatbid を参考のこと。
|
ext
|
オブジェクト
|
デマンドソース固有の拡張仕様を任意指定する。
|
入札レスポンスは、複数の Seatbid オブジェクトを含むことが可能です。それぞれが別の買い手シートを表していて、それぞれが個々の入札を複数含んでいます。そして、複数の商品がリクエスト上にある場合に、シートは勝利できるインプレッションを全て受け付けたいか(デフォルト)、それともグループとして全ての商品で勝利できる場合にのみ興味があるのかを指定するのに、package 属性が使われます。
属性
|
型
|
定義
|
seat
|
文字列; 推奨
|
この入札を生成した買い手シートの ID。
|
package
|
整数; デフォルト値 0
|
複数の商品が提供されている場合に、このフラグは入札者が全入札の一部の勝利でも受け付けたいか、それともパッケージとしてグループ全体での勝利を求めているかを示している。0 のとき個々の勝利を、1 のときパッケージでの勝利か敗北のどちらかだけを受け付ける
|
bid
|
オブジェクト 配列; 必須
|
それぞれが一つの商品と関連づけられた、一つ以上の Bid オブジェクトの配列。複数の入札が同じ商品と関連づくこともある。オブジェクト: Bid を参考のこと。
|
ext
|
オブジェクト
|
デマンドソース固有の拡張仕様を任意指定する。
|
Seatbid オブジェクトは、一つ以上の Bid オブジェクトを含んでいます。それぞれが入札リクエストで提供される特定の商品と item 属性を介して関連しており、所与の価格による商品の購入提供を構成しております。
属性
|
型
|
定義
|
id
|
文字列; 推奨
|
ロギング、トラッキングを支援するために入札者が生成する入札 ID。
|
item
|
文字列; 必須
|
関連入札リクエストの商品オブジェクト ID で、具体的には item.id である。
|
price
|
浮動小数点数; 必須
|
CPM で表される入札価格。しかし、実際のトランザクションは枠の商品だけである。なお、型は浮動小数点数となっているが、通貨を扱う場合は整数値が高く推奨される。(例:Java の BigDecimal)
|
deal
|
文字列
|
この入札が非公開市場取引と関連する場合に、入札リクエストから取引への参照を表す。具体的には deal.id である。
|
cid
|
文字列
|
キャンペーン ID もしくは類似したブランド関連広告グループ。一般に、監査手続きの効率を上げるために使用される。
|
tactic
|
文字列
|
入札が確定した時の戦略を取引所に報告するために、買い手が入札にラベルづけをするための戦術 ID。具体的な使用方法と戦術 ID の意味は、買い手と取引所の間で事前に合意しておく。
|
purl
|
文字列
|
OpenRTB 準拠のサプライチェーン(ヘッダービディングのような順序していない意思決定が存在するかもしれない)の範囲内で、入札者が決まった時に取引所から呼ばれる保留通知 URL。置換マクロが含まれることがある。
|
burl
|
文字列; 推奨
|
取引所固有のビジネスポリシーに基づいて請求可能となったとき(例:マークアップが描画された)、取引所から呼ばれる請求通知 URL。置換マクロが含まれることがある。
|
lurl
|
文字列
|
入札に負けたことがわかったとき、取引所から呼び出される敗北通知 URL。置換マクロが含まれることがある。ただし、取引所固有のポリシーにより敗北通知のサポートや清算価格の開示が阻まれ、その結果 ${OPENRTB_PRICE} マクロが削除(長さ 0 の文字列に置き換え)されることがある。
|
exp
|
整数
|
オークションからフルフィルメントの間に買い手が待つ意思のある秒数についての通告。
|
mid
|
文字列
|
ドメインオブジェクトに値として内包されるより以前にメディアが取引所にアップロードされているとき、メディアを参照で指定できるようにするための ID。
|
macro
|
オブジェクト 配列
|
入札の特定の値でマークアップを置換できるようにするための Macro オブジェクトの配列。mid 属性を通して参照される、事前アップロードされるメディアにおいて、特に有効である。オブジェクト:Macroを参考のこと。
|
media
|
オブジェクト
|
入札に勝った場合にメディアに表示されるメディアを指定するレイヤ4ドメインオブジェクト構造。openrtb.domainspec と openrtb.domainver で参照される仕様およびバージョンに準拠している。AdCOM v1.x において許可されているオブジェクトは、「Ad」と AdCOM 指定の下位オブジェクトである。
|
ext
|
オブジェクト
|
デマンドソース固有の拡張仕様を任意指定する。
|
このオブジェクトは、動的な値をメディアマークアップに挿入するのに使われる、買い手定義のキーバリューペアを構成します。どのように伝えられるかに関わらずどんなメディアマークアップにも適用されますが、基本的には、トランザクションと入札で参照される以前(例:クリエイティブ品質レビューのために事前登録された)に取引所にアップロードされたメディアで使うためのものです。そして、実行時に置換されるマクロの完全な形式は ${CUSTOM_KEY} で、「KEY」 は key 属性で与えられる名前です。OpenRTB 標準マクロとのコンフリクトは、起こらないことが確約されています。
属性
|
型
|
定義
|
key
|
文字列; 必須
|
買い手固有マクロの名前。
|
value
|
文字列
|
マークアップ内で見つかった各マクロの実体と置換する値。
|
ext
|
オブジェクト
|
デマンドソース固有の拡張仕様を任意指定する。
|
置換マクロ
イベント通知 URL とその形式は、デマンドソースによって定義されています。そして、取引所が特定の情報(例:清算価格)を伝えられるように、多くのマクロをこれらの URL に挿入することが出来ます。取引所にはその URL を呼び出す前に、マクロを解決する責任があります。置換処理はシンプルで、正しいマクロが見つかるいかなる箇所において、シンタックスが正しいかどうかに関係なく行われます。さらに、元となる値が任意指定のパラメータで、かつそれが指定されていないとき、マクロは単に削除(長さ0の文字列との置換)されるでしょう。
入札システムの実装担当者の判断で、カスタムマクロがサポートされることもあります。事前アップロード済みの広告を参照することで入札が行われる場合、動的にデータ挿入を行うカスタムマクロのサポートは一般的に必要になるでしょう。カスタムマクロは ${CUSTOM_KEY} という形式で使用され、「KEY」は大文字小文字などの変更なしに「Macro」オブジェクトで指定される特定の文字列を表します。詳細は「Macro」オブジェクトを見てください。なお、取引所はカスタムマクロをサポートするか否かを選ぶことが出来ますが、事前アップロード済み広告の配信機能を提供する取引所ではサポートされることが期待されます。
こういった置換マクロと同じものを、広告マークアップ上にも置くことが出来ます。取引所は、前述の通知 URL で行われたのと同じようなデータ置換を行うでしょう。これはマークアップをどのように取得するかに依らず行われます。例えばユースケースの一つとして、清算価格といったデータをマークアップ上に埋め込まれたトラッキング URL に挿入することがあります。
次の表では、標準的な置換マクロを定義しています。OpenRTB に準拠する取引所は、データが利用可能な全マクロをサポートしなければならず、さらにマークアップと通知 URL どちらに対する置換もサポートしなければなりません。
マクロ
|
定義
|
${OPENRTB_ID}
|
入札リクエストの ID; request.id 属性より。
|
${OPENRTB_BID_ID}
|
入札の ID; response.bidid 属性より。
|
${OPENRTB_ITEM_ID}
|
勝利した商品の ID; item.id 属性より。
|
${OPENRTB_SEAT_ID}
|
入札者シートの ID; seatbid.seat 属性より。
|
${OPENRTB_MEDIA_ID}
|
事前登録済みの配信メディアの ID; bid.mid 属性より。
|
${OPENRTB_PRICE}
|
入札と同じ通貨による清算価格。
|
${OPENRTB_CURRENCY}
|
(明示的もしくは暗黙に)入札で使われる通貨; 確認のためだけのもの。
|
${OPENRTB_MBR}
|
「清算価格 / 入札価格」で定義される市場入札率。
|
${OPENRTB_LOSS}
|
敗北理由コード(リスト:敗北理由コード を見よ)。
|
試験あるいは広告品質目的でマークアップが描画される場合、マクロによって値がわからないことがあります(例:清算価格)。こういった場合は、マクロ値として AUDIT を置換してください。
マクロ値は事前に様々な難読化・暗号化アルゴリズムを使って、セキュリティ目的でエンコードされていても構いません。これは特に、価格情報が取引所から配信者を通じて送られ、マークアップ内のトラッキングピクセルを介してデバイスのブラウザに届くようなユースケースで興味深いでしょう。
特定のマクロはエンコードされた状態で指定されています。:X というサフィックスがマクロ名に付いているはずで、X は使用されているアルゴリズムを指し示す文字列です。アルゴリズム選択についてこの仕様で定義されていることはありませんが、当事者間で相互に合意されていなければなりません。例えば、価格マクロは Base64 でエンコードされており、B64 というコードで合意されているとします。その時、マクロは次に書かれたようになるでしょう:
イベント通知
本仕様内において後述のイベントを定義します。これとは別に、ドメインオブジェクト固有のレイヤ4でイベントが定義されることがあります。イベント URL を呼び出す全主体は、まず先に OpenRTB 標準の全置換マクロの解決を確認しなければなりません。
保留通知は、ある入札が OpenRTB 準拠のサプライチェーン内で勝者として選ばれていることを示します。これは、一つの取引所が唯一の意思決定者であるようなシンプルなサプライチェーンでは、オークションに勝利したことと同義になります。複雑なサプライチェーンにおいては、このイベントはまず、OpenRTB を介してその結果を伝えていないパブリッシャーに最も近い取引所から開始されます。しかし、OpenRTB に準拠していない(例:ヘッダービディング)上流の意思決定が未だ存在するかもしれないので、このイベントを必ずしも勝利とみなすことは出来ません。取引所はこのイベントを伝えるために、bid.purl 属性でデマンドソースから提供される URL を呼び出します。
注意: このイベントは案内(入札がサプライチェーン上の全ての OpenRTB 準拠の関門をパスした)としてのみ解釈されるべきです。決して、いかなる形のフルフィルメントや請求を示すものではありません。
請求イベントは、トランザクション結果として、取引所もしくはその他の仲介者からデマンドサイドパートナーの一つへ金銭的請求が発生する場合を指します。このイベントには取引所が決めているビジネスポリシーが適用され、ビジネスポリシーはデマンドパートナーに対して明確に伝えられるべきです。さらに DSP にとって、このイベントは関連キャンペーンに対する支出を減らすことが出来ることを示します。取引所はこのイベントを伝えるために、bid.burl 属性でデマンドソースから提供される URL を呼び出します。
注意: 清算価格マクロは、マークアップ上の DSP トラッカーと同じように他のイベントで解決されても構いませんが、この URL が正しく実装されていれば、OpenRTB プロトコル上で請求イベントを伝える唯一の公式手段になります。
ベストプラクティス: 請求イベント URL の呼び出しは、取引所とそのデマンドパートナー間のビジネストランザクションのフルフィルメントを表します。クライアント用ピクセルを含んでいるので他の当事者へ委譲されるべきではありませんが、ピクセルをもって取引所が請求の開始を伝えることがあります。
ベストプラクティス: 請求可能なイベントが発生したと判断したら(例:クライアント側で発生した描画信号の受信)、取引所とそのデマンドソース間の不一致を出来るかぎり抑えるために、取引所が収益を計上する最もサーバサイドから近い箇所で請求通知を呼び出すべきです。
ベストプラクティス: 潜在的に複数のオークション決定ポイントが存在するような、複雑なサプライチェーンにおいて最も一貫性のあるアプローチとして、取引所はクライアント側で発生した描画イベント、もしくは請求イベントを元にしたそれに相当するもので標準化されることが強く勧められます。
ベストプラクティス: インターネットはノイズが多いものですが、このイベントは会計上非常に重要です。請求通知を呼び出す主体が HTTP 200 もしくは 204 以外のレスポンスを受け取った場合、リトライ方式(例:10 秒ごとに 1 分間)を検討すべきです。その逆に請求通知を受け取る主体は、二重計算を避けるためにエンドポイントを冪等になるように努めるべきです。
VAST 動画においては、IAB が VAST インプレッションイベントを、インプレッションを請求可能とする公式の信号として規定しています。bid.burl 属性が指定されている場合、取引所がこのポリシーに従うのであれば同じタイミングでそれも呼び出されるべきです。しかし、小さな技術的問題で不一致が生まれるかもしれませんので、入札者はこういったシナリオを避けるために注意してください。一つのオプションは、動画のサプライソースに最も近い取引所が請求シグナルとしてインプレッショントラッカーを使い、それからさらに前述の請求通知を使うべきです。
敗北イベントは、取引所が入札に対して勝利の可能性がないと決定した場合を指します。取引所はここで、bid.lurl 属性でデマンドソースから提供された URL を呼び出すことがあります。
注意: 敗北通知がなかったからといって、勝利したことにはなりません。
取引所による敗北通知実行のサポートは、OpenRTB 準拠に必須ではありません。デマンドパートナーはサプライサイドパートナーに確認することを勧めます。さらに、取引所固有のポリシーによって敗北通知のサポートもしくは勝利した清算価格の開示が排除されることがあり、その結果 ${OPENRTB_PRICE} マクロは削除(長さ0の文字列との置換)されます。
複雑なサプライチェーンの例では、仲介者はこれらのイベントに参加するか(受信、処理して受け渡す)、もしくは迂回させるかを選ぶことができます。例えば、入札リクエストのトラフィックシェイパーのような仲介者は、イベントを直接下流に迂回させるかどうかを選択しますし、レベニューシェアに携わる完全な取引所では介入の必要があるかもしれません。
迂回に対して介入を行う動機は、イベントタイプによっても変わることがあるでしょう。例えば、ある仲介者はほぼ常に請求通知に対して介入を行います。しかし敗北通知については、介入を行う仲介者も行わない仲介者もいます。ある取引所が、ある入札を放棄し(フロアプライス以下、ブロックリスト違反など)、入札レスポンスに含まれる残りの入札を含めるように決定することを検討すると、上流を負かすものもあるでしょう。これらの敗北を本質的に宣言しているので、その入札を放棄するもののために敗北通知を呼ぶべきですが、次の入札のサブセットを放棄すると決定した時、上流の主体が敗北通知を直接下流に呼び出せるように選んでも構いません。
所与の入札に対するイベントへの介入を行う場合、仲介者は元 URL 上のマクロを解決して、潜在的に新しいマクロのセットと合わせて(例:上流の清算価格を学ぶため)それ自身を差し戻すように、その URL を新しい URL のパラメータとしてエンコードします。、上流に返却された入札でこの新しい URL を指定します。このイベント URL を受信すると、仲介者はイベントを処理して、受信、デコード、そして元 URL の呼び出しを行います。イベントを迂回するようにした場合、仲介者は単純に上流から返された入札に含まれる元 URL を維持するでしょう。
在庫認証
入札リクエストを署名することで「在庫枠が主張通りのものである」ということを買い手に保証することが出来ます(例えば、domain-spoofer.com が domain.com に見せ掛けることを出来なくします)。そしてこの方法は、複雑なサプライチェーンにおいて買い手が全ての仲介者と信頼関係を持っているとは限らないような場合に特に重要になります。「ads.cert」として参照されるこの機能は単独で使用することも可能ですが、IAB ads.txt 仕様と組み合わせるのが最も効果的です。(iabtechlab.com/ads-txt を参考のこと)
併せて使用することで、取引所は「私は domain.dom の配信者の在庫を売ることを許可されていて、この在庫枠は本当に domain.com のものです」という保証とともに、入札リクエストを各買い手に送信することが出来ます。
デジタル署名は、配信者もしくはそれに信頼された代理人のいずれかによって、生成されなければなりません。以降、署名者は単に配信者と記すものとします。在庫認証を行うには、事前に配信者が公開鍵と秘密鍵のペアを生成しておく必要があります。秘密鍵は署名を行うために配信者によって使用されますが、秘匿にしておかなければなりません。公開鍵は ads.text 標準の指定にしたがって、アクセスを公開した同一 Web ディレクトリ上に配置する必要があります。
正当なユースケースとして仲介者によってリクエストの一部が書き換えられること(例:在庫に対する追加データ、プライバシーポリシーに基づいた IP アドレスや地理情報のボヤかし)があるので、入札リクエスト全体を署名することは出来ません。代わりに、どの仲介者によっても変更されることのないはずの在庫認証にとって重要な属性(例:配信者のサイトドメインやアプリのバンドル情報)が選択されます。そしてこれらの属性は、シンプルながら非常に特殊な方法で「ダイジェスト」と呼ばれる文字列へ変換されます。
さらに、ダイジェストはリプレイ攻撃を避けるために、これとこのトランザクションのみをデジタル署名に関連づけるための要素を含んでいなければなりません。したがって、ダイジェストはトランザクション ID (Source.tid 属性)と/もしくは少なくとも、リクエストの開始時間(Source.ts 属性)を含まなければなりません。
いずれのインプレッションリクエストにおいても配信者はダイジェストを作成し、秘密鍵と併せて使用することでデジタル署名文字列を生成します。この署名は取引所、より一般的には Source.ds 属性の存在する最初のサプライチェーンにおいて、使用可能となります。Source オブジェクトはさらに、ads.txt ディレクトリ上に置かれている配信者の公開鍵名(Source.cert 属性)と、署名済み文字列を生成するために使用したダイジェスト構造のマップ(Source.dsmap 属性)を含んでいなければなりません。
この情報を使用することで、リクエストの認証を望んでいる買い手もしくは下流の仲介者は、ダイジェストマップの規定に基づいて入札リクエスト上のフィールドからダイジェストを再生成し、その公開鍵を使ってデジタル署名を検証することが出来ます。
この属性を持つ入札リクエストを受信した仲介者は、下流の全入札リクエストにおいて不変なこの署名を、構成する全ての重要な属性とともに含めることを義務付けられています。これが出来なかった場合、在庫枠が認証できず買い手の拒否対象となるでしょう。
これらの概念を実践するためには、配信者もしくはそれが信頼する代理人が、どのように公開鍵・秘密鍵のペアを生成するか、トランザクションをダイジェスト文字列に署名するか、ダイジェストと関連する情報を直接の取引パートナーに伝えるかを知っていなければなりません。リクエストの認証を希望する配信者とそのベンダーの両方が、入札リクエストの属性からダイジェスト文字列を生成する正確な方法と、どのように与えられた公開鍵から署名を検証するかを知っていなければなりません。
詳細については、ads.cert ベータ仕様 を参照してください。
列挙子
以降のリストでは、ペイロードオブジェクト内の各属性が参照する列挙子を定義します。
次の表では、商品への入札を行わなかった理由を、入札者が取引所へ知らせるために使用する選択肢を挙げます。
値
|
定義
|
0
|
未知のエラー
|
1
|
技術的なエラー
|
2
|
無効なリクエスト
|
3
|
既知の Web クローラ
|
4
|
人間によるものでない疑いのあるトラフィック
|
5
|
クラウド、データセンター、もしくはプロキシ IP
|
6
|
サポート外のデバイス
|
7
|
ブロック済みの配信者もしくはサイト
|
8
|
一致しないユーザ
|
9
|
1日当たりの上限にユーザが達した
|
10
|
1日当たりの上限にドメインが達した
|
11
|
Ads.txt 認証が利用できない
|
12
|
Ads.txt 認証に違反している
|
13
|
Ads.cert 認証が利用できない
|
14
|
Ads.cert 認証に違反している
|
15
|
オークション時間が足りなかった
|
500+
|
取引所固有の値。この値は事前に買い手と打ち合わせておくべきである。
|
次の表では、商品を勝ち取ることが出来なかった理由を、取引所が入札者へ知らせるために使用する選択肢を挙げます。
値
|
定義
|
0
|
入札が勝利した
|
1
|
内部エラー
|
2
|
インプレッション機会が失効している
|
3
|
不当な入札レスポンス
|
4
|
不当な取引 ID
|
5
|
不当なオークション ID
|
6
|
不当な広告主ドメイン
|
7
|
マークアップが指定されていない
|
8
|
クリエイティブ ID が指定されていない
|
9
|
入札価格が指定されていない
|
10
|
最小クリエイティブ承認日時が指定されていない
|
100
|
入札がオークションのフロアプライス以下だった
|
101
|
入札が取引のフロアプライス以下だった
|
102
|
より高い入札に負けた
|
103
|
取引の入札に負けた
|
104
|
買い手シートがブロックされている
|
200
|
クリエイティブが除外された - 全般(理由不明)
|
201
|
クリエイティブが除外された - 取引所により処理が保留されている(承認、エンコード変換など)
|
202
|
クリエイティブが除外された - 取引所により承認されなかった
|
203
|
クリエイティブが除外された - 許容されないサイズである
|
204
|
クリエイティブが除外された - 誤ったクリエイティブフォーマット
|
205
|
クリエイティブが除外された - 広告主に基づく除外
|
206
|
クリエイティブが除外された - セキュアでない
|
207
|
クリエイティブが除外された - 言語に基づく除外
|
208
|
クリエイティブが除外された - カテゴリに基づく除外
|
209
|
クリエイティブが除外された - クリエイティブ属性に基づく除外
|
210
|
クリエイティブが除外された - 広告タイプに基づく除外
|
211
|
クリエイティブが除外された - アニメーションが長すぎる
|
212
|
クリエイティブが除外された - 取引において許容されない
|
500+
|
取引所固有の値。この値は事前に買い手と打ち合わせておくべきである。
|
例
JSON を使って表現されたリクエスト・レスポンスペイロードのレイヤ3の例は、次の通りです。
販売提供された単一商品とそれに関連する単一非公開市場取引を含んだ、入札リクエストのレイヤ3の例です。簡潔にするために、一部の任意指定の属性は省略されています。spec と content は AdCOM 指定のドメインオブジェクトへのインタフェイスとなっています。spec オブジェクトは、この商品において提供されているインプレッションの詳細を運ぶ placement オブジェクトを一つ持つべきです。context オブジェクトは、device、user、regs、restrictions のいずれか複数と、site(例で示されている)、app、dooh のいずれかを多くとも一つ持つことができます。
{
"openrtb": {
"ver": "3.0",
"domainspec": "adcom",
"domainver": "1.0",
"request": {
"id": "0123456789ABCDEF",
"tmax": 150,
"at": 2,
"cur": [ "USD", "EUR" ],
"source": {
"tid": "FEDCBA9876543210",
"ts": 1541796182157,
"ds": "AE23865DF890100BECCD76579DD4769DBBA9812CEE8ED90BF",
"dsmap": "...",
"cert": "ads-cert.1.txt",
"pchain": "..."
},
"package": 0,
"item": [
{
"id": "1",
"qty": 1,
"private": 0,
"deal": [
{
"id": "1234",
"flr": 1.50
}
],
"spec": {
"placement": { }
}
}
],
"context": {
"site": { AdCOM 仕様を参考のこと。 },
"user": { AdCOM 仕様を参考のこと。 },
"device": { AdCOM 仕様を参考のこと。 },
"regs": { AdCOM 仕様を参考のこと。 },
"restrictions": { AdCOM 仕様を参考のこと。 }
}
}
}
}
入札レスポンスのレイヤ3の例です。response.id が request.id と一致していることで、先述の入札リクエストの例を参照しており、bit の下にある bid.item 属性はリクエストの item.id を参照しており、bid.deal が含む取引の参照は、リクエスト内で提供される取引 deal.id を指しています。なお、media は AdCOM で指定されたドメインオブジェクトへのインタフェイスです。「media」オブジェクトは、入札が勝利した場合に配信される広告の詳細を保持する ad オブジェクトを一つ持つべきです。
この例では説明のために、動的な値を与えるマクロを含んだ事前アップロード済みメディアを参照する mid パラメータと、domain オブジェクトによる参照の両方を示しています。実際に、メディアは値(詳細をドメインオブジェクトに含んで)もしくは参照(メディア ID と任意指定のマクロを用いて)のいずれかの方法で受け渡されます。
{
"openrtb": {
"ver": "3.0",
"domainspec": "adcom",
"domainver": "1.0",
"response": {
"id": "0123456789ABCDEF",
"bidid": "0011223344AABBCC",
"seatbid": [
{
"seat": "XYZ",
"bid": [
{
"id": "yaddayadda",
"item": "1",
"deal": "1234",
"price": 1.50,
"tactic": "...",
"purl": "...",
"burl": "...",
"lurl": "...",
"mid": "...",
"macro": [
{
"key": "TIMESTAMP",
"value": "1127987134"
},
{
"key": "CLICKTOKEN",
"value": "A7D800F2716DB"
}
],
"media": {
"ad": { AdCOM 仕様を参考のこと。 }
}
}
]
}
]
}
}
}