Создайте ответ

После обработки вашим приложением запроса на размещение ставки от Google, оно должно сформировать и отправить ответ. В этом руководстве объясняется, как написать код для формирования ответа в вашем приложении.

Создать сообщение BidResponse

Для отправки заявки ваше приложение для торгов должно ответить на запрос заявки объектом BidResponse , содержащим Bid в настроенном вами формате. Если вы используете формат JSON, ваш ответ должен установить заголовок Content-Type в application/json; charset=utf-8 и включить JSON- BidResponse в тело ответа. Если вы используете формат Protobuf, ваше приложение должно установить заголовок Content-Type в application/octet-stream и включить сериализованный объект BidResponse в тело ответа.

Для создания и сериализации BidResponse в формате Protobuf необходимо сгенерировать и использовать библиотеки Protobuf на основе openrtb.proto и openrtb-adx.proto , которые реализуют стандартные поля OpenRTB BidResponse и расширения Google в Protobuf соответственно. Их можно найти в разделе «Прототипы и справочные данные» .

Если вы не хотите участвовать в торгах за показ, вы должны вернуть пустой HTTP-ответ 204. Ваше приложение должно возвращать ответ на каждый BidRequest . Тайм-ауты и ответы, которые не могут быть обработаны, считаются ошибками, и Google ограничивает количество участников торгов с высоким уровнем ошибок.

Креативный ID

В вашем BidResponse указывается креатив через поле BidResponse.seatbid.bid.crid (ограничение 128 байт). Даже похожие креативы должны иметь уникальные значения для этого поля, если они различаются по каким-либо существенным характеристикам, включая, помимо прочего: размер, заявленный URL, атрибуты креатива и типы поставщиков. Другими словами, вы должны присвоить разные идентификаторы креативов любым двум объявлениям, которые:

  • Выглядеть или вести себя иначе.
  • Визуализация в разные изображения.
  • Визуализация может осуществляться различными способами (например, один рекламный ролик состоит из изображения, а другой — из видео).

При разработке приложения следует определиться с систематическим способом генерации идентификаторов, который будет иметь смысл для тех типов креативных материалов, которые вы планируете представить.

Атрибуты объявления

Google рекомендует указывать атрибуты креатива для описания характеристик объявления и его таргетинга, используя либо комбинацию BidResponse.seatbid.bid.apis и BidResponse.seatbid.bid.attr , либо расширение BidResponse.seatbid.bid.ext.attribute . Ниже описано, как можно указывать атрибуты:

  • VPAID
    Установите для BidResponse.seatbid.bid.apis значение VPAID_1 или VPAID_2 . Для формата JSON это значение можно установить равным 1 или 2 соответственно.
  • MRAID
    Установите для BidResponse.seatbid.bid.apis значение MRAID_1 или 3 для формата JSON.
  • SIZELESS
    Установите для BidResponse.seatbid.bid.attr значение RESPONSIVE или 18 для формата JSON.
  • PLAYABLE
    Это указывается путем установки параметра BidResponse.seatbid.bid.attr в USER_INTERACTIVE или 13 для формата JSON.

В разделе «Креативные материалы» вы найдете объяснение того, как получать обратную связь относительно обнаруженных свойств ваших креативов.

Открытые поля для торгов

Ответы на торги, отправляемые участниками биржевых и сетевых торгов, участвующими в открытом тендере, аналогичны ответам авторизованных покупателей, участвующих в стандартном тендере в режиме реального времени. Участники открытого тендера могут указать небольшое количество дополнительных полей, а некоторые существующие поля могут иметь альтернативное назначение. К ним относятся следующие:

Поле Подробности
BidResponse.imp.pmp.deals.id

Идентификатор сделки из пространства имен биржи, связанный с данной заявкой и сообщаемый издателям.

BidResponse.seatbid.bid.ext.exchange_deal_type

Тип сделки, о которой сообщается издателям, влияющий на то, как сделка будет рассматриваться на аукционе.

BidResponse.seatbid.bid.ext.third_party_buyer_token Токен используется для идентификации информации о конечном покупателе (третьей стороне), если биржа, выступающая в качестве открытого участника торгов, является посредником. Этот токен получается от стороннего покупателя и должен быть передан в Google в неизмененном виде в ответе на заявку.

Рекомендации

  • Включите постоянные HTTPS-соединения (также известные как «поддержание соединения» или «повторное использование соединения») на ваших серверах. Установите тайм-аут минимум на 10 секунд — в большинстве случаев более высокие значения будут полезны. Google проверяет это во время первоначальных тестов задержки вашего приложения, поскольку Authorized Buyers отправляет запросы с высокой частотой и должен избегать накладных расходов, связанных с установлением отдельного TCP-соединения для каждого запроса.
  • Укажите необязательный URL-адрес для отслеживания показов, чтобы отслеживать момент отображения показа, а не момент выигрыша участником торгов. Из-за разницы во времени между выигрышами и отображением это позволит получить более точную статистику отслеживания.

  • В коде участника торгов не должно быть зависимостей от устаревших полей , так как это может привести к ошибкам при подаче заявок.
  • Включите в свой BidResponse BidResponse.seatbid.bid.w и BidResponse.seatbid.bid.h . BidResponse на запрос, включающий несколько размеров объявлений, должен содержать эти поля, иначе он будет снят с аукциона.
  • Ограничьте размер ответа до 8 КБ. Слишком большие ответы могут увеличить задержку в сети и привести к таймаутам.
  • Следуйте рекомендациям по размещению ставок на рекламу в iOS-приложениях, требующим атрибуции через SKAdNetwork .

Пример ответа на заявку

Приведенные ниже примеры представляют собой удобочитаемые образцы запросов Protobuf и JSON.

OpenRTB Protobuf

OpenRTB JSON

Важно: сообщения Protobuf, показанные в примерах, представлены здесь в виде удобочитаемого текста. Однако в реальном времени сообщения передаются не так. При использовании формата OpenRTB Protobuf принимаются только сериализованные сообщения BidResponse.

Создать и сериализовать сообщение BidResponse можно с помощью следующего кода на C++:

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
  • АМП
    • BidResponse.seatbid.bid.amp_ad_url
  • Видео
    • BidResponse.seatbid.bid.adm
  • Родной
    • BidResponse.seatbid.bid.adm_native

Укажите объявление, размещенное на вашем собственном сервере (серверах), используя HTML-фрагмент в поле BidResponse.seatbid.bid.adm . Фрагмент встраивается в iFrame, который размещается на веб-странице, в результате чего объявление загружается и отображается при загрузке страницы. Необходимо составить HTML-фрагмент таким образом, чтобы объявление (баннер или межстраничная реклама) корректно отображалось внутри iFrame и имело соответствующий размер для рекламного места, на которое вы делаете ставку.

Кроме того, размер объявления, указанный в ответе на запрос ставки, должен точно соответствовать одной из комбинаций размеров в запросе ставки, если:

  • Реклама — это обычный баннер (не видео, не нативная реклама и не межстраничная реклама).
  • Участник тендера указал размер в своем ответе. Указание размера требуется, если в запросе указано более одного размера.
  • Исключение делается для межстраничной рекламы. Для межстраничной рекламы ширина должна составлять не менее 50% от ширины экрана, а высота — не менее 40% от высоты экрана.

Вы можете указать HTML-фрагмент креатива, используя любой допустимый HTML-код, который корректно отображается, но помните об ограничениях на указание поля crid в разделе сообщения Create BidResponse . Одно из применений этого — добавление дополнительной информации в аргументы URL-адресов, получаемых с ваших серверов в процессе отображения объявления. Это позволяет передавать произвольные данные о показе обратно на ваши собственные серверы.

Большинство правил для HTML-фрагментов, возвращаемых в ответах на ставки, совпадают с правилами для рекламы сторонних компаний. Дополнительную информацию см. в разделах «Руководство по программе авторизованных покупателей» , «Требования к показу рекламы сторонними компаниями» и «Указание URL-адресов переходов по ссылкам в рекламе» .

Укажите макросы

Макросы — это форматированный текст, встроенный в некоторые поля ответа на ставку, содержащий URL-адреса, которые заменяются соответствующим значением во время показа рекламы. Например, если ваша выигрышная ставка включала макрос AUCTION_PRICE в HTML-фрагменте креатива, прилагаемом к вашей ставке, макрос будет заменен значением, которое вы сможете расшифровать, чтобы определить сумму, уплаченную вами за показ на аукционе.

Макросы можно добавлять в следующие поля:

  • 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 поддерживаются только макросы WINNING_PRICE и WINNING_PRICE_ESC , специфичные для Google.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Используйте этот код вместо BidResponse.seatbid.bid.burl если вам требуется более одного URL-адреса для выставления счетов.

Например, вы можете включить макрос в HTML-фрагмент, встроив ${MACRO} в URL-адрес, используемый для загрузки креатива, где MACRO — один из поддерживаемых макросов, описанных в спецификации OpenRTB .

Макросы Google

Помимо макросов, описанных в спецификации OpenRTB, Google поддерживает и другие макросы. Они имеют другой формат и при встраивании в URL-адрес будут отображаться как %%MACRO%% . В следующей таблице описаны эти макросы:

Макро Описание
ADVERTISING_IDENTIFIER Позволяет покупателям получать идентификатор iOS IDFA или рекламный идентификатор Android при показе рекламы. Подробнее см. раздел «Расшифровка идентификаторов рекламодателя» .
CACHEBUSTER Строковое представление случайного беззнакового четырехбайтового целого числа.
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 , который затем будет отвечать за перенаправление на URL, указанный в параметре google_click_url . Предполагается, что my.adserver.com деэкранирует параметр google_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 Разворачивается до http: если запрос на участие в торгах не требует SSL, или до https: если запрос на участие в торгах требует SSL.
SITE Домен контента, экранированный в URL-адресе, или анонимный идентификатор для анонимного инвентаря.
SITE_URL Устарело. Заменено макросом SITE, обеспечивающим идентичную функциональность.
TZ_OFFSET Смещение часового пояса.
VERIFICATION

Различные значения для производства и при сканировании креатива в процессе верификации. Формат: %%?VERIFICATION:true-val:false-val%% где для значений true-val и false-val можно использовать любые значения, кроме макросов, включая пустые строки. Для Open Bidding мы рекомендуем биржам использовать этот макрос; после этого платформам со стороны спроса не потребуется вносить изменения.

Например, если в рекламном объявлении будет указано %%?VERIFICATION:-1:5000%% , то при показе будет использоваться замена текста на 5000 , а в процессе проверки — -1 . Это сделано для того, чтобы различать эти два набора уведомлений.

WINNING_PRICE

Закодированная стоимость показа (то есть, CPI, а не CPM) в микросекундах валюты аккаунта. Например, выигрышная CPM в 5 долларов США соответствует 5 000 000 микросекунд 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, az, AZ) и символы из набора !()*,-./:_~ остаются без изменений.
  • Все остальные символы заменяются на %XX , где XX — шестнадцатеричное число, представляющее этот символ.

Ограничения и требования издателя

В заявке на участие в тендере содержится информация об ограничениях и требованиях, которые издатели предъявляют к авторам, участвующим в аукционе.

  • BidRequest.bcat
    • Вы можете сравнить заблокированные категории, указанные в этом поле, с категориями, обнаруженными для ваших креативов, используя поле detectedCategories в API торгов в реальном времени.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • На практике это значение всегда будет установлено true поскольку Google требует поддержки SSL для всех рекламных материалов.
  • 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

Никогда не делайте ставки с объявлением, содержащим ограниченные функции. Для разрешенных функций, таких как тип поставщика, возвращайте объявление только в том случае, если его тип поставщика находится в списке allowed_vendor_type в запросе BidRequest . В вашу ставку следует включать только форматы объявлений, указанные в запросе на ставку путем заполнения таких полей, как BidRequest.imp.banner . Дополнительные сведения см. в комментариях к этим полям в определении протокола BidRequest .

Если в BidResponse возвращается объявление, необходимо точно установить поля BidResponse.seatbid.bid.attr , BidResponse.seatbid.bid.cat и либо BidResponse.seatbid.bid.adomain , либо BidResponse.seatbid.bid.adm_native.link.url в ответе BidResponse . Если у объявления несколько подходящих значений для этих полей, необходимо указать каждое из них. Дополнительные сведения см. в комментариях к этим полям в определении протокола BidResponse . Ответы, в которых эти поля не установлены, отбрасываются.

Открытое измерение

Open Measurement позволяет указывать сторонних поставщиков, предоставляющих независимые услуги по измерению и проверке эффективности рекламы, показываемой в мобильных приложениях.

Поддерживаемые форматы рекламы включают видео, баннерную и межстраничную рекламу. Для получения дополнительной информации о том, как использовать Open Measurement в ответе на запрос ставок, содержащем эти форматы, обратитесь к статье в Справочном центре SDK Open Measurement .

Примеры ответов на тендерные предложения

В следующих разделах представлены примеры ответов на ставки для различных типов объявлений.

баннер приложения

OpenRTB Protobuf

OpenRTB JSON

Межстраничная реклама приложения

OpenRTB Protobuf

OpenRTB JSON

Вставка в приложение

OpenRTB Protobuf

OpenRTB JSON

Приложение нативное

OpenRTB Protobuf

OpenRTB JSON

Веб-видео

OpenRTB Protobuf

OpenRTB JSON

Мобильный веб-баннер для участника торгов на бирже

OpenRTB Protobuf

OpenRTB JSON