Crea la respuesta

Después de que tu aplicación procese la solicitud de oferta de Google, debe generar y enviar una respuesta. En esta guía, se explica cómo codificar tu aplicación para compilar la respuesta.

Crea un mensaje de BidResponse

Para enviar una oferta, tu aplicación de ofertas debe responder a una solicitud de oferta con un objeto BidResponse que contenga un objeto Bid en el formato que configuraste. Si usas el formato JSON, tu respuesta debe establecer el encabezado Content-Type en application/json; charset=utf-8 y, luego, incluir el objeto BidResponse JSON en el cuerpo. Si usas el formato de Protobuf, tu aplicación debe establecer el encabezado Content-Type en application/octet-stream y, luego, incluir el BidResponse serializado en el cuerpo.

Para compilar y serializar un BidResponse para el formato de Protobuf, debes generar y usar bibliotecas de Protobuf basadas en openrtb.proto y openrtb-adx.proto, que implementan los campos estándar de OpenRTB BidResponse y las extensiones de Google en Protobuf, respectivamente. Puedes encontrarlos en Protos & Reference Data.

Si no quieres ofertar por una impresión, debes devolver una respuesta HTTP 204 vacía. Tu aplicación debe devolver una respuesta a cada BidRequest. Los tiempos de espera y las respuestas que no se pueden analizar se consideran errores, y Google limita a los ofertantes con tasas de error altas.

ID de la creatividad

Tu BidResponse especifica una creatividad a través del campo BidResponse.seatbid.bid.crid (límite de 128 bytes). Incluso las creatividades similares deben tener valores únicos para este campo si difieren en alguna característica notable, incluidos, sin limitaciones, el tamaño, la URL declarada, los atributos de la creatividad y los tipos de proveedores. En otras palabras, debes asignar IDs de creatividad diferentes a dos anuncios que cumplan con las siguientes condiciones:

  • Verse o comportarse de manera diferente
  • Renderiza diferentes imágenes.
  • Se renderizan de diferentes maneras (por ejemplo, un anuncio consta de una imagen, mientras que el otro es un video).

A medida que diseñes tu aplicación, debes decidir una forma sistemática de generar identificadores que tenga sentido para los tipos de creatividades que planeas enviar.

Atributos del anuncio

Google recomienda declarar atributos de creatividad para describir las características de tu anuncio y su segmentación con una combinación de BidResponse.seatbid.bid.apis y BidResponse.seatbid.bid.attr, o bien con la extensión BidResponse.seatbid.bid.ext.attribute. A continuación, se describe cómo puedes declarar atributos:

  • VPAID
    Establece BidResponse.seatbid.bid.apis en VPAID_1 o VPAID_2. En el formato JSON, se puede establecer en 1 o 2, respectivamente.
  • MRAID
    Establece BidResponse.seatbid.bid.apis en MRAID_1 o 3 para el formato JSON.
  • SIZELESS
    Establece BidResponse.seatbid.bid.attr en RESPONSIVE o 18 para el formato JSON.
  • PLAYABLE
    Esto se indica configurando BidResponse.seatbid.bid.attr en USER_INTERACTIVE o 13 para el formato JSON.

Consulta el recurso Creatives para obtener una explicación sobre cómo obtener comentarios sobre las propiedades detectadas de tus creatividades.

Campos de Open Bidding

Las respuestas de ofertas que envían los ofertantes de intercambios y redes que participan en Open Bidding son similares a las de los compradores autorizados que participan en las ofertas en tiempo real estándar. Los clientes de Open Bidding pueden especificar una pequeña cantidad de campos adicionales, y algunos campos existentes pueden tener usos alternativos. Se incluyen los siguientes:

Campo Detalles
BidResponse.imp.pmp.deals.id

Es el ID del acuerdo del espacio de nombres del intercambio que está asociado a esta oferta y se informa a los publicadores.

BidResponse.seatbid.bid.ext.exchange_deal_type

Es el tipo de acuerdo que se informa a los publicadores y que afecta la forma en que se trata el acuerdo en la subasta.

BidResponse.seatbid.bid.ext.third_party_buyer_token Es el token que se usa para identificar la información del comprador externo final si el intercambio como Open Bidding es un intermediario. Se obtiene del comprador externo y se debe pasar a Google sin modificaciones en la respuesta de la oferta.

Recomendaciones

  • Habilita las conexiones HTTPS persistentes (también conocidas como "keep-alive" o "reutilización de conexión") en tus servidores. Establece el tiempo de espera en 10 segundos como mínimo. Los valores más altos son beneficiosos en muchos casos. Google verifica esto durante las pruebas de latencia iniciales de tu aplicación, ya que los Compradores Autorizados envían solicitudes a una velocidad alta y deben evitar la sobrecarga de latencia que implica establecer una conexión TCP independiente para cada solicitud.
  • Incluye la URL de seguimiento de impresiones opcional para hacer un seguimiento de cuándo se renderiza la impresión en lugar de cuándo gana el ofertante. Debido a la disminución entre las victorias y las renderizaciones, esto genera estadísticas de seguimiento más precisas.

  • Mantén tu código del ofertante sin dependencias en los campos obsoletos, ya que pueden provocar errores en tus ofertas.
  • Incluye BidResponse.seatbid.bid.w y BidResponse.seatbid.bid.h en tu BidResponse. Un objeto BidResponse para una solicitud que incluye varios tamaños de anuncios debe incluir estos campos o se descartará de la subasta.
  • Limita el tamaño de tu respuesta a menos de 8 K. Las respuestas muy grandes pueden aumentar la latencia de la red y provocar tiempos de espera.
  • Sigue los lineamientos para las ofertas en el inventario de iOS que requieren atribución de SKAdNetwork.

Ejemplo de respuesta de oferta

En los siguientes ejemplos, se muestran muestras legibles de las solicitudes de Protobuf y JSON.

Protobuf de OpenRTB

JSON de OpenRTB

Importante: Los mensajes de Protobuf que se muestran en los ejemplos se representan aquí como texto legible por humanos. Sin embargo, los mensajes no se envían de esa manera a través de la red. Cuando se usa el formato OpenRTB Protobuf, solo se aceptarán los mensajes BidResponse serializados.

Puedes crear y serializar un mensaje BidResponse con el siguiente código en 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
}

Especifica la creatividad

Tu respuesta a la oferta especifica la creatividad que se publicará si tu oferta gana. Tu oferta debe incluir uno de los formatos de anuncios admitidos (AMP, video o nativo). En este ejemplo, especificamos la creatividad con el campo html_snippet.

Como alternativa, puedes especificar tu creatividad con uno de los siguientes campos, según el formato del anuncio:

  • Anuncio renderizado por el SDK
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • Video
    • BidResponse.seatbid.bid.adm
  • Nativa
    • BidResponse.seatbid.bid.adm_native

Especifica un anuncio alojado en tus propios servidores con un fragmento HTML en el campo BidResponse.seatbid.bid.adm. El resumen se incluye en un iframe insertado en la página web, lo que hace que el anuncio se recupere y se renderice cuando se carga la página. Debes crear el fragmento de HTML de modo que el anuncio (banner o intersticial) se renderice correctamente dentro de un iframe y con un tamaño adecuado para el espacio publicitario por el que ofertas.

Además, el tamaño del anuncio declarado en la respuesta de oferta debe coincidir exactamente con una de las combinaciones de tamaño de la solicitud de oferta en los siguientes casos:

  • El anuncio es un banner normal (no es de video, nativo ni intersticial).
  • El postor declaró el tamaño en la respuesta de oferta. La declaración de tamaño es obligatoria siempre que haya más de un tamaño en la solicitud.
  • Se hace una excepción para los anuncios intersticiales. En el caso de los anuncios intersticiales, el ancho debe ser, al menos, el 50% del ancho de la pantalla y la altura, al menos, el 40% de la altura de la pantalla.

Puedes especificar una creatividad de fragmento HTML con cualquier código HTML válido que se renderice correctamente, pero ten en cuenta las restricciones para especificar el campo crid en la sección Crea un mensaje BidResponse. Un uso de esta función es agregar información adicional a los argumentos de las URLs que se recuperan de tus servidores como parte de la renderización del anuncio. Esto te permite pasar datos arbitrarios sobre la impresión a tus propios servidores.

La mayoría de las políticas para los fragmentos HTML que se muestran en las respuestas a ofertas son las mismas que para los anuncios de terceros. Consulta los Lineamientos del Programa de Authorized Buyers, los Requisitos para la publicación de anuncios de terceros y Cómo declarar las URLs de clic en los anuncios para obtener más información.

Cómo especificar macros

Las macros son texto con formato incorporado en algunos campos de respuesta de ofertas que contienen URLs que se reemplazan por un valor pertinente en el momento de la publicación del anuncio. Por ejemplo, si tu oferta ganadora incluía la macro AUCTION_PRICE en la creatividad del fragmento de HTML que se incluía con tu oferta, la macro se reemplazaría por un valor que podrías descifrar para determinar el importe que pagaste por la impresión en la subasta.

Puedes incluir macros en los siguientes campos:

  • BidResponse.seatbid.bid.adm

    Se admiten macros para los formatos de fragmento HTML, nativo, URL de video y XML de VAST de video.

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

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    Solo se admiten las macros WINNING_PRICE y WINNING_PRICE_ESC específicas de Google para las creatividades de AMP.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Usa este método en lugar de BidResponse.seatbid.bid.burl si necesitas más de una URL de facturación.

Por ejemplo, puedes incluir una macro como parte de un fragmento de HTML incorporando ${MACRO} dentro de la URL que se usa para recuperar la creatividad, donde MACRO es una de las macros admitidas que se describen en la especificación de OpenRTB.

Macros de Google

Además de las que se encuentran en la especificación de OpenRTB, Google admite macros adicionales. Estas tienen un formato diferente y aparecerían como %%MACRO%% si se incorporan en una URL. En la siguiente tabla, se describen estas macros:

Macro Descripción
ADVERTISING_IDENTIFIER Permite que los compradores reciban el IDFA de iOS o el ID de publicidad de Android en la renderización de la impresión. Consulta Cómo desencriptar identificadores de anunciantes para obtener más información.
CACHEBUSTER Es una representación de cadena de un número entero aleatorio, sin signo y de cuatro bytes.
CLICK_URL_UNESC

Es la URL de clic sin escape del anuncio. En el fragmento, una versión con escape de la URL de clic de terceros debe seguir directamente a la macro.

Por ejemplo, si la URL de clic de terceros es http://my.adserver.com/some/path/handleclick?click=clk, se podría usar el siguiente código con la versión con un solo escape de la URL de clic de terceros después de la invocación de la macro:

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

En el momento de la publicación del anuncio, se expande de la siguiente manera:

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

Primero, la URL registrará el clic en Google y, luego, redireccionará a la URL de clic de terceros.

CLICK_URL_ESC

Es la URL de clic con caracteres de escape del anuncio. Usa este valor en lugar de CLICK_URL_UNESC si primero necesitas pasar el valor a través de otro servidor que luego devolverá un redireccionamiento.

Por ejemplo, el siguiente código se podría usar en un fragmento de HTML:

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

En el momento de la publicación del anuncio, se expande de la siguiente manera:

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

Esto registrará el clic con my.adserver.com, que luego será responsable de redireccionar a la URL que se pasó en el parámetro google_click_url. Esto supone que my.adserver.com anula el escape del parámetro google_click_url.

Puedes agregar una URL con doble escape después de %%CLICK_URL_ESC%%. Después de que my.adserver.com deshace el escape, queda una versión con escape único de la URL agregada a google_click_url. Cuando se recupere el google_click_url, se quitarán los caracteres de escape una vez más y, luego, se realizará el redireccionamiento.

CLICK_URL_ESC_ESC

Es la URL del anuncio con doble escape. Usa este valor en lugar de CLICK_URL_UNESC si primero necesitas pasar el valor a otro servidor que, luego, devolverá un redireccionamiento.

Por ejemplo, el siguiente código se podría usar en un fragmento de HTML:

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

En el momento de la publicación del anuncio, se expande de la siguiente manera:

<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 Se expande a http: si la solicitud de oferta no requiere SSL o a https: si la solicitud de oferta requiere SSL.
SITE Es el dominio con escape de URL de la URL de contenido o el ID anónimo del inventario anónimo.
SITE_URL Obsoleta. Se reemplazó por la macro de SITE, que proporciona la misma funcionalidad.
TZ_OFFSET Es el desfase de la zona horaria.
VERIFICATION

Son los diferentes valores para la producción y cuando se analiza la creatividad en la canalización de verificación. El formato es el siguiente: %%?VERIFICATION:true-val:false-val%%, donde se pueden usar todos los valores, excepto las macros, para true-val y false-val, incluidas las cadenas vacías. En el caso de la Oferta abierta, recomendamos que los intercambios utilicen esta macro. Una vez que lo hagan, las plataformas del lado de la demanda no necesitarán realizar cambios.

Por ejemplo, si una creatividad incluyera %%?VERIFICATION:-1:5000%%, el reemplazo de texto sería 5000 en la publicación y -1 en la canalización de verificación. Esto ayuda a diferenciar entre estos dos conjuntos de pings.

WINNING_PRICE

Es el costo de impresión codificado (es decir, el CPI en lugar del CPM) en micro unidades de la moneda de la cuenta. Por ejemplo, un CPM ganador de USD 5 corresponde a 5,000,000 de micro CPM o 5,000 micro CPI. El valor decodificado de WINNING_PRICE en este caso sería 5,000. El precio ganador se especifica en CPI.

Para analizar esta macro, deberás implementar una aplicación que descifre las confirmaciones de precios. Consulta la página Cómo desencriptar confirmaciones de precios para obtener más información.

WINNING_PRICE_ESC Es WINNING_PRICE con codificación de URL.

Google requiere que uses la macro CLICK_URL_UNESC o CLICK_URL_ESC en la creatividad del anuncio publicado por terceros. Google utiliza las macros CLICK_URL para el seguimiento de clics.

El escape de URL en las macros usa el siguiente esquema:

  • El carácter de espacio se reemplaza por un signo más (+).
  • Los caracteres alfanuméricos (0-9, a-z, A-Z) y los caracteres del conjunto !()*,-./:_~ permanecen sin cambios.
  • Todos los demás caracteres se reemplazan por %XX, donde XX es el número hexadecimal que representa el carácter.

Restricciones y requisitos para publicadores

La solicitud de oferta incluye información sobre los tipos de restricciones y requisitos que los publicadores imponen a las creatividades en la subasta.

  • BidRequest.bcat
    • Puedes comparar las categorías bloqueadas que se especifican en este campo con las que se detectan para las creatividades que envías a través del campo detectedCategories de la API de Real-time Bidding.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • En la práctica, este valor siempre se establecerá en true, ya que Google requiere compatibilidad con SSL para todas las creatividades.
  • 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

Nunca ofertes con un anuncio que contenga una función restringida. Para las funciones permitidas, como el tipo de proveedor, devuelve un anuncio solo si su tipo de proveedor se encuentra en la lista allowed_vendor_type del objeto BidRequest. En tu oferta, solo se deben incluir los formatos de anuncio especificados en la solicitud de oferta completando campos como BidRequest.imp.banner. Consulta los comentarios de estos campos en la definición del búfer de protocolo BidRequest para obtener más detalles.

Si se devuelve un anuncio en BidResponse, debes configurar con precisión los campos BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat y BidResponse.seatbid.bid.adomain o BidResponse.seatbid.bid.adm_native.link.url en BidResponse. Si un anuncio tiene varios valores aplicables para estos campos, debes incluir todos los valores. Consulta los comentarios de estos campos en la definición del búfer de protocolo BidResponse para obtener más detalles. Se descartan las respuestas que no tienen configurados estos campos.

Open Measurement

Open Measurement te permite especificar proveedores externos que brindan servicios independientes de medición y verificación para los anuncios publicados en entornos de aplicaciones para dispositivos móviles.

Los formatos de anuncios admitidos incluyen anuncios de video, de banner y anuncios intersticiales. Para obtener más información sobre cómo usar Open Measurement en una respuesta de oferta que contenga estos formatos, consulta el artículo del Centro de ayuda sobre el SDK de Open Measurement.

Ejemplos de respuestas a la oferta

En las siguientes secciones, se muestran ejemplos de respuestas de ofertas para diferentes tipos de anuncios.

Banner de la app

Protobuf de OpenRTB

JSON de OpenRTB

Anuncio intersticial para aplicaciones

Protobuf de OpenRTB

JSON de OpenRTB

Anuncio intersticial de video en la aplicación

Protobuf de OpenRTB

JSON de OpenRTB

App nativa

Protobuf de OpenRTB

JSON de OpenRTB

Video web

Protobuf de OpenRTB

JSON de OpenRTB

Banner web para dispositivos móviles para el ofertante de intercambio

Protobuf de OpenRTB

JSON de OpenRTB