Создайте ответ
Оптимизируйте свои подборки
Сохраняйте и классифицируйте контент в соответствии со своими настройками.
После обработки вашим приложением запроса на размещение ставки от 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
Тип сделки, о которой сообщается издателям, влияющий на то, как сделка будет рассматриваться на аукционе.
Токен используется для идентификации информации о конечном покупателе (третьей стороне), если биржа, выступающая в качестве открытого участника торгов, является посредником. Этот токен получается от стороннего покупателя и должен быть передан в Google в неизмененном виде в ответе на заявку.
Рекомендации
Включите постоянные HTTPS-соединения (также известные как «поддержание соединения» или «повторное использование соединения») на ваших серверах. Установите тайм-аут минимум на 10 секунд — в большинстве случаев более высокие значения будут полезны. Google проверяет это во время первоначальных тестов задержки вашего приложения, поскольку Authorized Buyers отправляет запросы с высокой частотой и должен избегать накладных расходов, связанных с установлением отдельного TCP-соединения для каждого запроса.
Укажите необязательный URL-адрес для отслеживания показов, чтобы отслеживать момент отображения показа, а не момент выигрыша участником торгов. Из-за разницы во времени между выигрышами и отображением это позволит получить более точную статистику отслеживания.
В коде участника торгов не должно быть зависимостей от устаревших полей , так как это может привести к ошибкам при подаче заявок.
Включите в свой BidResponseBidResponse.seatbid.bid.w и BidResponse.seatbid.bid.h . BidResponse на запрос, включающий несколько размеров объявлений, должен содержать эти поля, иначе он будет снят с аукциона.
Ограничьте размер ответа до 8 КБ. Слишком большие ответы могут увеличить задержку в сети и привести к таймаутам.
Важно: сообщения 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-адресов, получаемых с ваших серверов в процессе отображения объявления. Это позволяет передавать произвольные данные о показе обратно на ваши собственные серверы.
Макросы — это форматированный текст, встроенный в некоторые поля ответа на ставку, содержащий URL-адреса, которые заменяются соответствующим значением во время показа рекламы. Например, если ваша выигрышная ставка включала макрос AUCTION_PRICE в HTML-фрагменте креатива, прилагаемом к вашей ставке, макрос будет заменен значением, которое вы сможете расшифровать, чтобы определить сумму, уплаченную вами за показ на аукционе.
Макросы можно добавлять в следующие поля:
BidResponse.seatbid.bid.adm
Макросы поддерживаются для HTML-фрагментов, исходного кода, URL-адресов видео и форматов VAST XML для видео.
Используйте этот код вместо 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-адреса клика стороннего сервиса, экранированной одним символом, после вызова макроса:
Сначала URL-адрес зарегистрирует клик в Google, а затем перенаправит на URL-адрес клика третьей стороны.
CLICK_URL_ESC
Экранированный URL-адрес клика по объявлению. Используйте его вместо CLICK_URL_UNESC если вам необходимо сначала передать значение на другой сервер, который затем вернет перенаправление.
Например, следующий код можно использовать в HTML-фрагменте:
Это зарегистрирует клик на 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-фрагменте:
Различные значения для производства и при сканировании креатива в процессе верификации. Формат: %%?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 .
Примеры ответов на тендерные предложения
В следующих разделах представлены примеры ответов на ставки для различных типов объявлений.
id:"550102L8So5v6gi4C00T36"seatbid{bid{id:"U796oSA426V3U666ue8"impid:"1"price:1.057860016822815crid:"test_creative_id_395811"dealid:"0"adm_native{ver:"1.2"assets{id:6img{url:"https://native.test.com/logo?id=123456"w:200h:200type:LOGO}}assets{id:5img{url:"https://native.test.com/image?id=123456"w:800h:800type:MAIN}}assets{id:4data{value:"Galactic Luxury Cruises"type:SPONSORED}}assets{id:3data{value:"Book today"type:CTATEXT}}assets{id:1title{text:"Luxury Mars Cruises"}}assets{id:2data{value:"Visit the planet in a luxury spaceship."type:DESC}}link{url:"https://www.google.com"}}[com.google.doubleclick.bid]{impression_tracking_url:"https://test.com/impression?id=123456"impression_tracking_url:"https://test.com/impression?id=123456"ad_choices_destination_url:"https://test.com/preferences"event_notification_token{payload:"token"}billing_id:73917825312dsa{adrender:true}clickurl:"google.com"}}}cur:"JPY"[com.google.doubleclick.bid_response]{processing_time_ms:17}
OpenRTB JSON
Покажите мне пример
{"id":"550102L8So5v6gi4C00T36","seatbid":[{"bid":[{"id":"U796oSA426V3U666ue8","impid":"1","price":1.057860016822815,"crid":"test_creative_id_395811","dealid":"0","ext":{"impression_tracking_url":["https://test.com/impression?id=123456","https://test.com/impression?id=123456"],"ad_choices_destination_url":"https://test.com/preferences","event_notification_token":{"payload":"token"},"billing_id":"73917825312","dsa":{"adrender":1},"clickurl":["google.com"]},"adm":"{\"ver\":\"1.2\",\"assets\":[{\"id\":6,\"img\":{\"url\":\"https://native.test.com/logo?id=123456\",\"w\":200,\"h\":200,\"type\":2}},{\"id\":5,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":800,\"h\":800,\"type\":3}},{\"id\":4,\"data\":{\"value\":\"Galactic Luxury Cruises\",\"type\":1}},{\"id\":3,\"data\":{\"value\":\"Book today\",\"type\":12}},{\"id\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\",\"type\":2}}],\"link\":{\"url\":\"https://www.google.com\"}}"}]}],"cur":"JPY","ext":{"processing_time_ms":17}}
[null,null,["Последнее обновление: 2026-02-23 UTC."],[],["Applications must respond to each `BidRequest` with a parsable `BidResponse`, using Protobuf or an HTTP 204 for no bids. Creatives are identified by a unique `crid`. Ad attributes, such as VPAID and MRAID, are declared in specific fields. Utilize impression tracking URLs and avoid deprecated fields. Open Bidding bid responses are similar to Authorized Buyers. Ad sizes in the response must match the request. Macros are used in URLs. Publisher requirements are specified in the `BidRequest`. The response must accurately reflect these requirements and provide the accurate ad attributes and links.\n"]]