レスポンスを作成する

アプリケーションは、Google からの入札リクエストを処理した後、レスポンスを作成して送信する必要があります。このガイドでは、レスポンスを構築するようにアプリケーションをコーディングする方法について説明します。

BidResponse メッセージを作成する

入札を送信するには、入札アプリケーションが、構成された形式の Bid を含む BidResponse で入札リクエストに応答する必要があります。JSON 形式を使用している場合、レスポンスで Content-Type ヘッダーを application/json; charset=utf-8 に設定し、本文に JSON BidResponse を含める必要があります。Protobuf 形式を使用している場合、アプリケーションは Content-Type ヘッダーを application/octet-stream に設定し、シリアル化された BidResponse を本文に含める必要があります。

Protobuf 形式の BidResponse をビルドしてシリアル化するには、openrtb.protoopenrtb-adx.proto に基づいて Protobuf ライブラリを生成して使用する必要があります。これらのライブラリは、それぞれ標準の OpenRTB BidResponse フィールドと Google 拡張機能を Protobuf で実装しています。これらは、Protos & Reference Data で確認できます。

インプレッションに入札しない場合は、空の HTTP 204 レスポンスを返す必要があります。アプリケーションは、すべての BidRequest に対してレスポンスを返す必要があります。タイムアウトと解析できないレスポンスはエラーと見なされ、エラー率の高い入札者は Google によってスロットリングされます。

クリエイティブ ID

BidResponse は、BidResponse.seatbid.bid.crid フィールド(128 バイトの上限)でクリエイティブを指定します。類似したクリエイティブであっても、サイズ、宣言された URL、クリエイティブ属性、ベンダータイプなど、注目すべき特徴が異なる場合は、このフィールドに一意の値を設定する必要があります。つまり、次の 2 つの広告には異なるクリエイティブ ID を割り当てる必要があります。

  • 外観や動作が異なる。
  • 別の画像にレンダリングします。
  • 異なる方法でレンダリングする(たとえば、一方の広告は画像で構成され、もう一方の広告は動画で構成される)。

アプリケーションを設計する際は、送信する予定のクリエイティブの種類に適した識別子を体系的に生成する方法を決定する必要があります。

広告の帰属表示

Google では、BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr の組み合わせ、または BidResponse.seatbid.bid.ext.attribute 拡張機能を使用して、広告の特性とターゲティングを説明するクリエイティブ属性を宣言することをおすすめします。属性の宣言方法について説明します。

  • VPAID
    BidResponse.seatbid.bid.apisVPAID_1 または VPAID_2 に設定します。JSON 形式の場合、それぞれ 1 または 2 に設定できます。
  • MRAID
    JSON 形式の場合は、BidResponse.seatbid.bid.apisMRAID_1 または 3 に設定します。
  • SIZELESS
    JSON 形式の場合は、BidResponse.seatbid.bid.attrRESPONSIVE または 18 に設定します。
  • PLAYABLE
    これは、BidResponse.seatbid.bid.attrUSER_INTERACTIVE に設定するか、JSON 形式の場合は 13 に設定することで示されます。

クリエイティブの検出されたプロパティに関するフィードバックを取得する方法については、クリエイティブ リソースをご覧ください。

Open Bidding のフィールド

Open Bidding に参加しているエクスチェンジとネットワークの入札者から送信される入札レスポンスは、標準のリアルタイム ビッダーに参加している認定バイヤーの入札レスポンスと似ています。Open Bidding のお客様は、少数の追加フィールドを指定できます。また、既存のフィールドの一部は別の用途で使用される場合があります。次に例を示します。

フィールド 詳細
BidResponse.imp.pmp.deals.id

この入札に関連付けられ、パブリッシャーに報告される、エクスチェンジの Namespace の取引 ID。

BidResponse.seatbid.bid.ext.exchange_deal_type

パブリッシャーに報告される取引のタイプ。オークションでの取引の扱い方に影響します。

BidResponse.seatbid.bid.ext.third_party_buyer_token Open Bidding のエクスチェンジが仲介者の場合、最終的な第三者購入者の情報を特定するために使用されるトークン。これはサードパーティの購入者から取得され、入札レスポンスで Google に変更せずに渡す必要があります。

推奨事項

  • サーバーで永続的な HTTPS 接続(「キープアライブ」または「接続の再利用」とも呼ばれます)を有効にします。タイムアウトは最小で 10 秒に設定します。多くの場合、より大きな値が有効です。Authorized Buyers はリクエストを高いレートで送信し、リクエストごとに個別の TCP 接続を確立するレイテンシ オーバーヘッドを回避する必要があるため、Google はアプリケーションの初期レイテンシ テスト中にこれを確認します。
  • 入札者が落札したときではなく、インプレッションがレンダリングされたときにトラッキングする場合は、インプレッション トラッキング URL(省略可)を含めます。落札とレンダリングの間にドロップオフがあるため、トラッキング統計の精度が向上します。

  • 入札者コードで非推奨のフィールドへの依存関係がないようにしてください。依存関係があると、入札がエラーで失敗する可能性があります。
  • BidResponseBidResponse.seatbid.bid.wBidResponse.seatbid.bid.h を含めます。複数の広告サイズを含むリクエストに対する BidResponse には、これらのフィールドを含める必要があります。含めないと、オークションから除外されます。
  • レスポンス サイズを 8K 未満に制限します。レスポンスが非常に大きいと、ネットワーク レイテンシが増加し、タイムアウトが発生する可能性があります。
  • SKAdNetwork アトリビューションを必要とする iOS インベントリの入札に関するガイドラインに沿って操作します。

入札レスポンスの例

次の例は、Protobuf リクエストと JSON リクエストの人間が読めるサンプルを表しています。

OpenRTB Protobuf

OpenRTB JSON

重要: サンプルに示されている Protobuf メッセージは、人が読めるテキストとして表されています。ただし、メッセージはワイヤを介して送信されません。OpenRTB Protobuf 形式を使用する場合、シリアル化された BidResponse メッセージのみが受け入れられます。

次の C++ コードを使用して、BidResponse メッセージを作成してシリアル化できます。

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

クリエイティブを指定する

入札レスポンスでは、入札が落札された場合に配信するクリエイティブを指定します。入札には、サポートされている広告フォーマット(AMP、動画、ネイティブ)のいずれかを含める必要があります。この例では、html_snippet フィールドを使用してクリエイティブを指定します。

または、広告フォーマットに応じて、次のいずれかのフィールドを使用してクリエイティブを指定することもできます。

  • SDK でレンダリングされた広告
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • 動画
    • BidResponse.seatbid.bid.adm
  • ネイティブ
    • BidResponse.seatbid.bid.adm_native

BidResponse.seatbid.bid.adm フィールドの HTML スニペットを使用して、独自のサーバーでホストされている広告を指定します。スニペットはウェブページに挿入された iframe に囲まれており、ページが読み込まれると広告が取得されてレンダリングされます。入札する広告スロットの適切なサイズで、広告(バナーまたはインタースティシャル)が iframe 内で正しくレンダリングされるように、HTML スニペットを作成する必要があります。

また、入札レスポンスで宣言された広告サイズは、次の条件を満たす場合に、入札リクエストのサイズ組み合わせのいずれかと完全に一致している必要があります。

  • 広告は通常のバナー(動画、ネイティブ、インタースティシャルではない)。
  • ビッダーが入札レスポンスでサイズを宣言している。リクエストに複数のサイズが含まれている場合は、サイズ宣言が必要です。
  • インタースティシャル広告は例外とします。インタースティシャル広告の場合、幅は画面の幅の 50% 以上、高さは画面の高さの 40% 以上にする必要があります。

HTML スニペット クリエイティブは、正しくレンダリングされる有効な HTML コードを使用して指定できますが、入札レスポンス メッセージの作成セクションの crid フィールドの指定に関する制限事項に注意してください。この機能は、広告のレンダリングの一環としてサーバーから取得される URL の引数に、追加情報を入れるために使用できます。これにより、インプレッションに関する任意のデータを独自のサーバーに渡すことができます。

入札レスポンスで返される HTML スニペットのほとんどのポリシーは、サードパーティ広告と同じです。詳しくは、Authorized Buyers プログラムのガイドライン第三者配信に関する要件広告のクリックスルー URL を宣言するをご覧ください。

マクロを指定する

マクロは、一部の入札レスポンス フィールドに埋め込まれた書式設定済みのテキストです。このテキストには URL が含まれており、広告配信時に関連する値に置き換えられます。たとえば、落札した入札に、入札に含まれる HTML スニペット クリエイティブの AUCTION_PRICE マクロが含まれている場合、そのマクロは、オークションでインプレッションに対して支払った金額を特定するために復号できる値に置き換えられます。

次のフィールドにマクロを含めることができます。

  • BidResponse.seatbid.bid.adm

    マクロは、HTML スニペット、ネイティブ、動画 URL、動画 VAST XML の各フォーマットでサポートされています。

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    AMP クリエイティブでは、Google 固有の WINNING_PRICE マクロと WINNING_PRICE_ESC マクロのみがサポートされています。

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    複数の請求 URL が必要な場合は、BidResponse.seatbid.bid.burl の代わりにこれを使用します。

たとえば、クリエイティブの取得に使用される URL 内に ${MACRO} を埋め込むことで、HTML スニペットの一部としてマクロを含めることができます。ここで、MACROOpenRTB 仕様に記載されているサポート対象のマクロの 1 つです。

Google マクロ

Google は、OpenRTB 仕様に記載されているマクロ以外にも、追加のマクロをサポートしています。これらのマクロは形式が異なり、URL に埋め込まれている場合は %%MACRO%% と表示されます。次の表に、これらのマクロを示します。

マクロ 説明
ADVERTISING_IDENTIFIER 購入者は、インプレッションのレンダリング時に iOS IDFA または Android の広告 ID を受け取ることができます。詳しくは、広告主様の識別子の復号をご覧ください。
CACHEBUSTER ランダムな 4 バイト符号なし整数の文字列表現。
CLICK_URL_UNESC

エスケープ処理なしの広告のクリック URL。スニペットでは、エスケープ処理された第三者のクリック URL をこのマクロの直後に記述する必要があります。

たとえば、第三者のクリック URL が http://my.adserver.com/some/path/handleclick?click=clk の場合、マクロ呼び出しの後に第三者のクリック URL の単一エスケープ バージョンを記述して、次のコードを使用できます。

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

広告配信時には次のように展開されます。

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

この URL は、まず Google にクリックを登録してから、第三者のクリック URL にリダイレクトします。

CLICK_URL_ESC

エスケープ処理された広告のクリック URL。まず別のサーバーに値を渡し、そのサーバーからリダイレクトを返すようにする場合は、CLICK_URL_UNESC の代わりにこのマクロを使用します。

たとえば、次のコードを HTML スニペットで使用できます。

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

広告配信時には次のように展開されます。

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

これにより、クリックが my.adserver.com に登録され、google_click_url パラメータで渡された URL へのリダイレクトが my.adserver.com によって行われます。これは、my.adserver.comgoogle_click_url パラメータをエスケープ解除することを前提としています。

%%CLICK_URL_ESC%% の後に二重エスケープされた URL を追加できます。my.adserver.com によるエスケープ解除が完了すると、URL の単一エスケープ バージョンが google_click_url に追加されます。google_click_url が取得されると、もう一度エスケープ解除されてからリダイレクトされます。

CLICK_URL_ESC_ESC

広告の二重エスケープ処理された URL。まず別のサーバーに値を渡し、そのサーバーからリダイレクトを返すようにする場合は、CLICK_URL_UNESC の代わりにこのマクロを使用します。

たとえば、次のコードを HTML スニペットで使用できます。

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

広告配信時には次のように展開されます。

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME 入札リクエストで SSL が必要ない場合は http: に、入札リクエストで SSL が必要な場合は https: に展開されます。
SITE コンテンツ URL の URL がエスケープされたドメイン、または匿名インベントリの匿名 ID。
SITE_URL 非推奨です。同じ機能を提供する SITE マクロに置き換えられました。
TZ_OFFSET タイムゾーンのオフセット。
VERIFICATION

本番環境と、クリエイティブが検証パイプラインでスキャンされたときの値が異なります。形式は %%?VERIFICATION:true-val:false-val%% です。true-valfalse-val には、マクロ以外の任意の値(空の文字列を含む)を使用できます。オープン ビッディングでは、このマクロを使用することをおすすめします。このマクロを使用すると、デマンド サイド プラットフォームで変更を行う必要がなくなります。

たとえば、クリエイティブに %%?VERIFICATION:-1:5000%% が含まれている場合、テキストの置換は配信時に 5000、検証パイプラインで -1 になります。これは、この 2 つのピングのセットを区別するためです。

WINNING_PRICE

エンコードされたインプレッションの費用(CPM ではなく CPI)をアカウントの通貨で 100 万倍した値を返します。たとえば 5 米ドルの落札 CPM は、500 万マイクロ CPM または 5,000 マイクロ CPI に相当し、この場合、WINNING_PRICE をデコードした値は 5,000 になります。落札価格は CPI で表されます。

このマクロを解析するには、料金確認を復号するアプリケーションを実装する必要があります。詳細については、価格確認の復号のページをご覧ください。

WINNING_PRICE_ESC URL エスケープされた WINNING_PRICE

Google では、第三者配信広告のクリエイティブ内で CLICK_URL_UNESC または CLICK_URL_ESC マクロを使用することが義務付けられています。Google はクリック トラッキングに CLICK_URL マクロを使用します。

マクロでの URL エスケープには、次のスキームが使用されます。

  • スペース文字はプラス記号(+)に置き換えられます。
  • 英数字(0 ~ 9、a ~ z、A ~ Z)と !()*,-./:_~ の文字セットの文字は変更されません。
  • 他のすべての文字は %XX に置き換えられます。ここで、XX は文字を表す 16 進数です。

パブリッシャーの制限と要件

入札リクエストには、パブリッシャーがオークションのクリエイティブに課す制限や要件の種類に関する情報が含まれます。

  • BidRequest.bcat
    • このフィールドで指定されたブロック対象カテゴリは、リアルタイム ビッディング API の detectedCategories フィールドを使用して、送信されたクリエイティブで検出されたカテゴリと比較できます。
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • 実際には、Google ではすべてのクリエイティブで SSL サポートが必要であるため、常に true に設定されます。
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

制限付き機能を含む広告で入札しないでください。ベンダータイプなどの許可された機能については、ベンダータイプが BidRequestallowed_vendor_type リストに含まれている場合にのみ広告を返します。入札リクエストで BidRequest.imp.banner などのフィールドに入力して指定された広告フォーマットのみを入札に含める必要があります。詳細については、BidRequest プロトコル バッファ定義のこれらのフィールドのコメントをご覧ください。

BidResponse で広告が返された場合は、BidResponseBidResponse.seatbid.bid.attrBidResponse.seatbid.bid.catBidResponse.seatbid.bid.adomain または BidResponse.seatbid.bid.adm_native.link.url のいずれかのフィールドを正確に設定する必要があります。広告にこれらのフィールドに適用可能な値が複数ある場合は、すべての値を含める必要があります。詳細については、BidResponse プロトコル バッファ定義のこれらのフィールドのコメントをご覧ください。これらのフィールドが設定されていないレスポンスは破棄されます。

Open Measurement

Open Measurement を使用すると、モバイルアプリ環境に配信される広告の独立した測定と検証サービスを提供するサードパーティ ベンダーを指定できます。

サポートされている広告フォーマットには、動画広告、バナー広告、インタースティシャル広告が含まれます。これらの形式を含む入札レスポンスで Open Measurement を使用する方法について詳しくは、Open Measurement SDK のヘルプセンター記事をご覧ください。

入札レスポンスの例

以降のセクションでは、さまざまな広告タイプの入札レスポンスの例を示します。

アプリバナー

OpenRTB Protobuf

OpenRTB JSON

アプリ内インタースティシャル

OpenRTB Protobuf

OpenRTB JSON

アプリ内インタースティシャル動画

OpenRTB Protobuf

OpenRTB JSON

アプリ ネイティブ

OpenRTB Protobuf

OpenRTB JSON

ウェブ動画

OpenRTB Protobuf

OpenRTB JSON

エクスチェンジ ビッダー向けのモバイルウェブ バナー

OpenRTB Protobuf

OpenRTB JSON