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

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

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

Авторизованные покупатели отправляют BidRequest как тело сообщения HTTP POST . Если ваша конечная точка назначения ставок настроена на использование формата Protobuf, ваше приложение должно отправить ответ с заголовком Content-Type установленным в application/octet-stream , и телом сообщения, состоящим из сериализованного буфера протокола. Буфер протокола — это сообщение BidResponse , определенное в openrtb.proto . Ваше приложение должно возвращать анализируемый BidResponse в ответ на каждый BidRequest . Тайм-ауты и ответы, которые невозможно проанализировать, считаются ошибками, и Google ограничивает участников торгов с высоким уровнем ошибок.

Если вы не хотите делать ставку за показ, вы можете указать только поле BidResponse.ext.processing_time_ms и оставить все остальные поля пустыми. Вы можете получить openrtb.proto со страницы справочных данных .

Идентификатор объявления

В вашем BidResponse креатив указывается в поле BidResponse.seatbid.bid.crid (ограничение в 64 байта). Даже похожие креативы должны иметь уникальные значения для этого поля, если они отличаются по каким-либо заметным характеристикам, включая, помимо прочего: размер, заявленный 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.

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

Открытые поля ставок

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

OpenRTB Авторизованные покупатели Подробности
BidResponse.imp[].pmp.deals[].id BidResponse.ad[].adslot[].exchange_deal_id

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

BidResponse.seatbid[].bid[].ext.exchange_deal_type BidResponse.ad[].adslot[].exchange_deal_type

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

BidResponse.seatbid[].bid[].ext.third_party_buyer_token BidResponse.ad[].adslot[].third_party_buyer_token Токен, используемый для идентификации информации о конечном конечном покупателе, если биржа в качестве участника Open Bid является посредником. Эти данные получены от стороннего покупателя и должны быть переданы в Google в неизмененном виде в ответе на запрос ставки.

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

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

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

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

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

OpenRTB Протобуф

OpenRTB JSON

Google

Важно: Сообщения Protobuf, изображенные в примерах, представлены здесь в виде удобочитаемого текста. Однако сообщения передаются по проводам не так. При использовании формата Google или 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
  • AMP
    • 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-адресов видео и XML-форматов VAST для видео.

  • 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 RTB

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

Макрос Описание
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 .

Вы можете добавить URL-адрес с двойным экранированием после %%CLICK_URL_ESC%% . После того, как my.adserver.com выполняет деэкранирование, к google_click_url добавляется версия 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

Закодированная стоимость показа (то есть цена за установку, а не цена за тысячу показов) в микро валюте аккаунта. Например, выигрышная цена за тысячу показов в размере 5 долларов США соответствует цене за тысячу показов в 5 000 000 микрон или цене за тысячу показов в 5 000 микрон. Декодированное значение WINNING_PRICE в этом случае будет равно 5000. Выигрышная цена указана в CPI.

Чтобы проанализировать этот макрос, вам потребуется реализовать приложение, которое расшифровывает подтверждения цен. Дополнительную информацию см. на странице «Расшифровка подтверждений цен» .

WINNING_PRICE_ESC WINNING_PRICE с экранированием URL-адреса.

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.seatbid.bid.adm_native.link.url в BidResponse . Если в объявлении указано несколько применимых значений для этих полей, необходимо указать каждое значение. Дополнительную информацию см. в комментариях к этим полям в определении буфера протокола BidResponse . Ответы, в которых эти поля не установлены, отбрасываются.

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

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

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

Примеры ответов на запросы ставок

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

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

OpenRTB Протобуф

OpenRTB JSON

Google

Межстраничное объявление приложения

OpenRTB Протобуф

OpenRTB JSON

Google

Межстраничное видео приложения

OpenRTB Протобуф

Google

Приложение родное

OpenRTB Протобуф

OpenRTB JSON

Google

Веб-видео

Google

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

OpenRTB Протобуф