Compartir a través de


Integración de un postor

En esta página se describe cómo integrar un postor con Xandr. Comienza con una introducción a las diferentes "capas" de la integración y termina con un ejemplo trabajado (mediante llamadas API reales) de una integración sencilla que le hará poner en marcha rápidamente en nuestro entorno de pruebas. También proporciona vínculos a información más detallada en otros lugares de nuestra wiki.

Información general del sistema

Nota:

Protocolo de licitación

Xandr admite actualmente el protocolo de licitación de OpenRTB 2.4. Para obtener más información, consulte nuestra página Protocolo de licitación .

En un nivel alto, hay dos "capas" del sistema que debemos tener en cuenta durante la configuración del licitador:

  • capa de Real-Time (RTB): este es el corazón de la acción, donde el postor participará en la subasta en tiempo real.

    • Nuestro servidor recibe una solicitud de puja de una página web (o partner de SSP) y la da formato para prepararse para enviarla a nuestros licitadores.

    • Con la configuración de la instancia del licitador (y el objeto del licitador), se envía la solicitud a los servidores.

      • El punto de conexión al que llega la solicitud depende del tipo de solicitud.

      Diagrama que explica la participación del licitador en la subasta en tiempo real.

  • Capa de configuración (API): aquí es donde configurará la "lógica de negocios" del licitador para que pueda pujar por las impresiones; en otras palabras, filtrar las impresiones no deseadas y configurar usuarios, agregar las creatividades que los miembros quieren servir, etc.

    Diagrama que explica cómo se puede configurar la lógica de negocios del licitador.

Nota sobre la jerarquía de objetos

Es importante comprender cómo se relacionan los objetos de la plataforma entre sí. A continuación se muestra un esquema de nuestra jerarquía de objetos.

Postores, Miembros, Escaños

  • Los licitadores son el objeto más alto de nuestra jerarquía de compra. Representa la presencia de la entidad en nuestra plataforma.
  • Debajo de ellos se encuentran los miembros. La relación solía ser uno a varios, con un postor posiblemente teniendo varias separaciones de miembros.
    • Ya no es así. Ahora es uno a uno, ya que ya no se admiten los saltos de miembro adicionales.
    • Se integrará con un solo miembro, al que nos referimos como "miembro predeterminado".
  • Los miembros se consideran entidades que tienen contratos contractuales para comprar (o vender) a través del bus de impresiones (para obtener más información, consulte el Servicio para miembros).
    • Las creatividades están asociadas con el miembro predeterminado, no con el postor.
  • Los propios postores no son miembros, sino que son los proveedores de tecnología para los miembros.
    • El licitador es donde configura una conexión con Xandr (por ejemplo, qué tipo de solicitudes recibir, a qué punto de conexión, etc.).
    • El miembro es donde configura objetos relacionados con la campaña, como los creativos.
    • El pujador se integra en nuestra interfaz de usuario. El bus de impresiones conecta a los licitadores con varias fuentes de inventario, incluidos los agregadores, los intercambios de anuncios y el inventario de reventa de red.
  • Los puestos son sus entidades internas que puede usar para pujar en nuestras subastas y comprar impresiones con su correspondiente identificador interno.
  • En el diagrama siguiente se muestra esta jerarquía.
    • Con los grupos de miembros anteriores, hemos realizado una asignación de cuál de los puestos de un postor correspondía a qué miembro de la empresa. Esto permitió a los licitadores pujar con sus identificadores internos el 100 % del tiempo.
    • Dado que se integrará con un solo miembro y con la oferta de puestos de comprador, solo tendrá el miembro predeterminado y no tendrá que preocuparse por la asignación de miembros del puesto. Diagrama que muestra la jerarquía entre los licitadores, los miembros y los puestos.

Usuarios

  • Tradicionalmente, los licitadores pueden actuar en nombre de sí mismos, o pueden tener varios miembros de terceros.

  • Los miembros deben tener al menos un usuario, independientemente de si el miembro actúa en nombre de un tercero (para obtener más información, consulte el Servicio de usuario).

    • Los miembros pueden tener muchos usuarios.
  • El licitador, como proveedor de tecnología, también tiene al menos un usuario.

  • Los usuarios de los licitadores ajustan el perfil del licitador, agregan instancias de licitador, etc.

  • Los usuarios miembros cargan creatividades para ese miembro, etc.

  • Incluso si el licitador es la misma empresa que un miembro, y el postor sólo actúa en nombre de sí mismo, el licitador es lógicamente distinto del miembro de la misma manera.

    Diagrama que muestra los componentes del licitador y sus roles.

Cómo configurar el postor

En esta sección le guiaremos por todo el proceso de configuración de un postor en la plataforma. Comenzaremos por realizar las llamadas API necesarias para enlazar las canalizaciones.

Sugerencia

API

La mayoría de las pruebas de cliente se realizan en nuestras API de producción. También tenemos una API de entorno de prueba que permite probar los flujos de trabajo de creación y actualización de objetos.

La mayoría de las llamadas de ejemplo siguientes se realizan en el entorno de API de producción.

Autenticación con la API

Antes de poder hacer cualquier otra cosa, tenemos que iniciar sesión. A continuación se muestra un ejemplo del json de autenticación que puede usar. El proceso de autenticación para nuestro entorno de producción y pruebas es el mismo. La única diferencia es el punto de conexión.

Sugerencia

Para obtener información más detallada sobre la autenticación a través de nuestra API, consulte el servicio de autenticación.

Ejemplo de JSON de autenticación

$ cat auth.json
        
        {
        "auth":
        {
        "username" : "rloveland",
        "password" : "AppNexus1!"
        }
        }
      

Publicar en la API de producción para autenticarse:

Ejemplo de llamada de autenticación en la API de producción

$ export IB="https://api.adnxs.com";
$ curl -b cookies -c cookies -X POST -d @auth.json $IB/auth
        
{ response": { "status": "OK", ... } }
        
      

Del mismo modo, publique en el entorno de prueba para autenticarse:

Ejemplo de llamada de autenticación en la API de prueba

$ export IB_TESTING="https://api-test.adnxs.com";
$ curl -b cookies -c cookies -X POST -d @auth.json $IB_TESTING/auth
        
{ response": { "status": "OK", ... } }
      

Visualización del objeto del pujador

El objeto del postor representa a su postor en nuestro sistema. Como tal, tiene una gran cantidad de campos que puede usar para configurar cómo interactúa su pujador con nuestra plataforma. Piénselo como el "gancho" central en el que colgará gran parte del resto de la configuración. El representante de Xandr ya debería haber creado un objeto de pujador para usted.

En el ejemplo siguiente, hacemos una GET llamada para ver el objeto del licitador, pero no explicamos ninguno de sus detalles. Para obtener información más detallada sobre el objeto del licitador, consulte el Servicio del licitador.

Expandir para el ejemplo de llamada

$ export IB="https://api.adnxs.com";
$ curl -b cookies $IB/bidder/123

{
  "response": {
    "bidder": {
      "active": true,
      "always_send_owned_segments": true,
      "audit_notify_uri": null,
      "bid_percent": 100,
      "bid_uri": "/xandr/bid",
      "child_profiles": null,
      "click_uri": null,
      "daily_budget": null,
      "daily_budget_imps": null,
      "default_currency": "USD",
      "default_member": {
        "id": 9876,
        "name": "Example Bidder's Default Member Name"
      },
      "dongle": null,
      "exclude_unowned": false,
      "id": 123,
      "last_activity": "2021-02-03 19:47:25",
      "lifetime_budget": null,
      "lifetime_budget_imps": null,
      "max_allowed_profiles": 5,
      "max_seats": 10000,
      "name": "ExampleBidder",
      "notify_full_auction": false,
      "notify_uri": null,
      "num_conns": 3,
      "object_limit_notify_email": null,
      "parent_profile_id": null,
      "pixel_uri": null,
      "protocol_id": 10,
      "protocol_name": "openrtb2",
      "ready_uri": "/status/ready",
      "send_class_2": true,
      "send_class_3": true,
      "send_owned_blocklist": false,
      "send_public_deals": false,
      "send_unaudited": true,
      "setuid_function": null,
      "short_name": "examplebidder",
      "supports_deal_buyers": "seats",
      "userdata_entity_id": null,
      "userdata_javascript": null,
      "vendor_id": null
    },
    "count": 1,
    "dbg": {
      "output_term": "bidder",
      "version": "1.0.5",
      "warnings": [
        
      ]
    },
    "num_elements": 100,
    "start_element": 0,
    "status": "OK"
  }
}     

Configuraciones de objetos del licitador

Para los siguientes campos del objeto "Bidder", no se debe incluir la dirección IP o el nombre de host antes de la ruta de acceso.

La dirección IP se configurará por separado en los objetos "Instancia del licitador" en el siguiente paso del proceso de integración.

Campo Obligatorio Description
bid_uri la ruta de acceso o el nombre de archivo que especifica el destino de las solicitudes de puja (por ejemplo, "/bidder")
ready_uri la ruta de acceso o el nombre de archivo que especifica el destino de las solicitudes listas (por ejemplo, "/ready")
notify_uri la ruta de acceso o el nombre de archivo que especifica el destino de las solicitudes de notificación (por ejemplo, "/notify")
pixel_uri Opcional la ruta de acceso o el nombre de archivo que especifica el destino
click_uri Opcional la ruta de acceso o el nombre de archivo que especifica el destino de Las solicitudes de clic
audit_notify_uri Opcional la ruta de acceso o el nombre de archivo que especifica el destino de las solicitudes de notificación de auditoría (por ejemplo, "https://examplebidder.com/audit_notify_endpoint")

Visualización del objeto miembro

Debe tener al menos un miembro que compre a través de su postor. Debería haber creado un miembro para usted por su representante de Xandr como parte del proceso de incorporación. El miembro es donde configurará gran parte de la "lógica de negocios", como segmentos de usuario, creatividades, etc.

Sugerencia

En el ejemplo siguiente, realizamos una GET llamada para ver el objeto miembro, pero no explicamos ninguno de sus detalles. Es posible que algunos de los campos que se le muestran estén en desuso. Para obtener información más detallada sobre el objeto miembro, incluidos los campos que admiten actualmente, consulte el Servicio de miembros.

Expandir para el ejemplo de llamada

$ export IB="https://api.adnxs.com";
$ curl -b $IB/member/1234

{
  "response": {
    "count": 1,
    "dbg": {
      "output_term": "member",
      "version": "1.18.1651",
      "warnings": [
        
      ]
    },
    "member": {
      "account_owner_user": {
        "first_name": "Peter",
        "id": 123456,
        "last_name": "Driver"
      },
      "active": true,
      "active_contract": null,
      "age_segment_id": null,
      "agent_id": null,
      "allow_ad_profile_override": true,
      "allow_priority_audit": false,
      "audit_notify_email": null,
      "bidder_id": 1234,
      "billing_address_1": null,
      "billing_address_2": null,
      "billing_city": null,
      "billing_country": null,
      "billing_name": "ExampleMemberName",
      "billing_postal_code": null,
      "billing_region": null,
      "buyer_clearing_fee_pct": null,
      "buyer_credit_limit": 2500,
      "code": null,
      "contact_email": null,
      "contact_info": null,
      "contracts": null,
      "curation_deductions_allowed": false,
      "daily_imps_self_audited": null,
      "daily_imps_unaudited": null,
      "daily_imps_verified": null,
      "deal_visibility_profile_id": null,
      "default_accept_data_provider_usersync": true,
      "default_accept_demand_partner_usersync": true,
      "default_accept_supply_partner_usersync": true,
      "default_ad_profile_id": null,
      "default_buyer_group_id": null,
      "default_content_retrieval_timeout_ms": 0,
      "default_creatives": null,
      "default_enable_for_mediation": false,
      "default_external_audit": false,
      "default_tag_id": null,
      "description": null,
      "developer_id": null,
      "domain_blocklist_email": null,
      "dongle": null,
      "email_code": null,
      "enable_click_and_imp_trackers": false,
      "enable_facebook": false,
      "expose_eap_ecp_placement_settings": false,
      "gender_segment_id": null,
      "id": 1234,
      "is_iash_compliant": false,
      "last_activity": "2020-03-19 06:00:39",
      "max_hosted_video_size": null,
      "native_custom_keys": null,
      "platform_exposure": "public",
      "plugins_enabled": false,
      "pops_enabled_UI": false,
      "price_buckets": null,
      "prioritize_margin": false,
      "reporting_decimal_type": "decimal",
      "seller_member_groups": null,
      "seller_revshare_pct": null,
      "serving_domain": null,
      "sherlock_notify_email": null,
      "short_name": null,
      "tax_region_id": null,
      "thirdparty_pixels": null,
      "timezone": "EST5EDT",
      "vendor_id": null,
      "visibility_profile_id": null,
      "xd_coop": false
    },
    "num_elements": 100,
    "start_element": 0,
    "status": "OK"
  }
}

Create un perfil de postor

En este paso, se describen las opciones del perfil del licitador que ayudan a dar forma al tráfico que recibe. El perfil del pujador se puede actualizar mediante la API y la interfaz de usuario del licitador. La documentación principal de estos se encuentra aquí:

En el ejemplo siguiente, la segmentación se desglosa de esta manera:

JSON de ejemplo de perfil de licitador

$ cat create-bidder-profile-json

{
  "bidder_profile": {
    "active": true,
    "bidder_id": 1234,
    "description": "Example Bidder Profile",
    "targeting": {
      "ad_types": {
        "audio": {
          "action": "exclude"
        },
        "banner": {
          "action": "include",
          "sizes": [
            
          ]
        },
        "native": {
          "action": "exclude"
        },
        "video": {
          "action": "exclude"
        }
      },
      "countries": {
        "action": "include",
        "targets": [
          {
            "active": true,
            "code": "US",
            "id": 233,
            "name": "United States"
          }
        ]
      },
      "exchanges": {
        "action": "exclude",
        "targets": [
          {
            "id": 2,
            "name": "Connect"
          },
          {
            "id": 3,
            "name": "Network"
          }
        ]
      },
      "supply_types": {
        "action": "include",
        "targets": [
          "web"
        ]
      }
    },
    "unknown_users_action": "include"
  }
}

Perfil de prueba

  • El ingeniero de integración de Xandr le ayudará a configurar un perfil de postor para las pruebas.
  • Este perfil bloqueará todo el tráfico de la plataforma excepto el que se envía desde nuestro publicador de pruebas.
  • El tráfico de nuestro miembro de prueba le permitirá simular la secuencia de pujas, sin tener que preocuparse por el gasto.

Adición de una creatividad de prueba

En este paso, agregaremos una creatividad. Después de cargar esta creatividad, deberá configurar el postor para responder a una solicitud de puja con una respuesta de puja con el formato correcto. La respuesta de la puja debe incluir esta creatividad, ya sea en el "crid" campo, correspondiente al identificador interno de la creatividad, o , "adid"que es el identificador Xandr para la creatividad. Esto probará que la integración funciona según lo esperado.

Sugerencia

Para obtener información más detallada sobre los muchos tipos de configuraciones creativas, consulte Creative Service.

Para obtener algunos consejos sobre cómo configurar su creatividad, consulte nuestra Guía de compra creativa de Inicio rápido.

  • En este ejemplo se muestra un diseño de coche (muy antiguo) con el campo de contenido del objeto creativo. Usa nuestra plantilla estándar banner raw-html.
  • Para obtener más información sobre el uso del entorno de pruebas de cliente para probar la carga de creatividades, consulte Uso del entorno de pruebas de cliente a continuación.

Nota:

Estados

  • Los "allow_audit" campos y "allow_ssl_audit" se han establecido trueen .
  • El "allow_audit" campo envía la creatividad para la auditoría humana de nuestra plataforma.
  • envía "allow_ssl_audit" la creatividad para nuestro examen automatizado para determinar si la creatividad puede servir en un inventario seguro.

JSON creativo de ejemplo

$ cat add-creative.json
{
  "creative": {
    "width": 682,
    "height": 488,
    "landing_page_url": "https://en.wikipedia.org/wiki/Car",
    "content": "document.write('<a href=\\\"https://en.wikipedia.org/wiki/Car\\\" target=\\\"_blank\\\">\\r\\n <img src=\\\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\\\" />\\r\\n</a>')",
    "content_secure": "document.write('<a href=\\\"https://en.wikipedia.org/wiki/Car\\\" target=\\\"_blank\\\">\\r\\n <img src=\\\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\\\" />\\r\\n</a>')",
    "template": {
      "id": 6
    },
    "original_content": "<a href=\"https://en.wikipedia.org/wiki/Car\" target=\"_blank\">\r\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\" />\r\n</a>",
    "original_content_secure": "<a href=\"https://en.wikipedia.org/wiki/Car\" target=\"_blank\">\r\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\" />\r\n</a>",
    "click_action": "click-to-web",
    "click_target": "https://en.wikipedia.org/wiki/Car",
    "click_url": "https://en.wikipedia.org/wiki/Car",
    "allow_ssl_audit": true,
    "allow_audit": true
  }
}

Carga creativa de ejemplo

$ export IB="https://api.adnxs.com";
$ curl -b cookies -X POST -d @add-creative.json $IB/creative/1234
{
    "response": {
        "count": 1,
        "creative": {
            "active": true,
            "added_by_bidder": null,
            "adservers": null,
            "adx_audit": null,
            "allow_audit": true,
            "allow_ssl_audit": true,
            "audit_feedback": null,
            "audit_status": "pending",
            "backup_upload_status": nul
            "brand": {
                "category_id": 0,
                "id": 1,
                "name": "Unknown"
            },
            "brand_id": 1,
            "campaign": null,
            "categories": null,
            "click_action": "click-to-web",
            "click_target": "https://en.wikipedia.org/wiki/Car",
            "click_url": "https://en.wikipedia.org/wiki/Car",
            "code": null,
            "code2": null,
            "content": "document.write('<a href=\\\"https://en.wikipedia.org/wiki/Car\\\" target=\\\"_blank\\\">\\r\\n <img src=\\\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\\\" />\\r\\n</a>')",
            "content_secure": "document.write('<a href=\\\"https://en.wikipedia.org/wiki/Car\\\" target=\\\"_blank\\\">\\r\\n <img src=\\\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\\\" />\\r\\n</a>')",
            "content_source": "standard",
            "created_on": "2021-02-05 21:56:47",
            "custom_request_template": null,
            "description": null,
            "facebook_audit_feedback": null,
            "facebook_audit_status": null,
            "file_name": null,
            "flash_backup_url": null,
            "flash_backup_url_secure": null,
            "flash_click_variable": null,
            "height": 488,
            "id": 271833576,
            "ios_ssl_audit": null,
            "is_blanking": null,
            "is_expired": false,
            "is_hosted": false,
            "is_prohibited": false,
            "is_rotating": null,
            "is_self_audited": false,
            "is_suspicious": false,
            "landing_page_url": "https://en.wikipedia.org/wiki/Car",
            "language": {
                "id": 1,
                "name": "English"
            },
            "last_activity": "2021-02-05 21:56:47",
            "last_checked": null,
            "media_assets": null,
            "media_url": null,
            "media_url_secure": null,
            "member_id": 1234,
            "mobile": null,
            "native_attribute": null,
            "no_adservers": false,
            "not_found": 0,
            "original_content": "<a href=\"https://en.wikipedia.org/wiki/Car\" target=\"_blank\">\r\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\" />\r\n</a>",
            "original_content_secure": "<a href=\"https://en.wikipedia.org/wiki/Car\" target=\"_blank\">\r\n <img src=\"https://upload.wikimedia.org/wikipedia/commons/3/3e/SteamMachineOfVerbiestIn1678.jpg\" />\r\n</a>",
            "passed_sherlock_audit": true,
            "pixels": null,
            "placement": null,
            "political": null,
            "segments": null,
            "size_in_bytes": 0,
            "sla": "0",
            "sla_eta": "2021-02-08 15:58:47",
            "ssl_status": "pending",
            "status": {
                "hosted_assets_association_complete": null,
                "user_ready": true
            },
            "suspicious_activity_timestamp": null,
            "technical_attributes": [
                {
                    "id": 1,
                    "name": "Image"
                }
            ],
            "template": {
                "id": 6
            },
            "text_description": null,
            "text_display_url": null,
            "text_title": null,
            "thirdparty_campaign_id": null,
            "thirdparty_creative_id": null,
            "thirdparty_page": null,
            "thirdparty_pixels": null,
            "thirdparty_viewability_providers": null,
            "vendors": null,
            "video_attribute": null,
            "width": 682
        },
        "dbg": {
            "output_term": "creative",
            "version": "1.18",
            "warnings": []
        },
        "id": "271833576",
        "num_elements": 100,
        "start_element": 0,
        "status": "OK"
    }
}

Adición de una instancia del licitador

El objeto de instancia del licitador representa un servidor de licitador determinado que se ejecuta en el centro de datos. Esta información almacenada en este objeto determina dónde se envía el tráfico. En este ejemplo, establecemos el identificador del centro de datos en (NYM).

Advertencia

En este paso se supone que ya tiene un postor en funcionamiento que puede responder a solicitudes de puja, solicitudes listas, etc., como se detalla en información general del sistema.

Sugerencia

Para obtener más información sobre cómo configurar una instancia del licitador, consulte el servicio de instancia del licitador.

En este ejemplo se establece una dirección IP y un puerto a los que se debe enviar el tráfico.

  • También se admite el uso de nombres de host.
    • Cuando están presentes, los nombres de host tienen precedentes.
    • Nuestro servicio bidder-instance requiere una dirección IP para estar presente en la carga. Si desea usar un nombre de host, una dirección IP ficticia puede colocarla en la carga del objeto.
  • La ruta de acceso completa a la que enviaremos el tráfico es
    • https://[nombre de host o IP]:[puerto][bidder.bid_uri]

      • bidder.bid_uri se establece en el objeto del licitador.
      • Esta ruta debe ser única por licitador
  • También se recomienda encarecidamente que coloque un límite de consultas por segundo (QPS) en la instancia del licitador para asegurarse de que los servidores no están inundados de tráfico.
  • Se recomienda encarecidamente mantener inactiva la instancia del licitador hasta que esté listo para recibir tráfico con el fin de evitar gastos accidentales.

Ejemplo de objeto de instancia de licitador

$ cat create-bidder-instance.json
{
    "instance": {
        "bidder_id": 123,
        "active": true,
        "datacenter_id": 6,
        "ip_address": "10.3.64.215",
        "port": 80
        "qps_limit": 10000,
    }
}

Salida

$ export IB="https://api.adnxs.com";
$ curl -b cookies -X POST -d @create-bidder-instance.json $IB/bidder-instance/123
{
  "response": {
    "status": "OK",
    "count": 1,
    "start_element": null,
    "num_elements": null,
    "id": 1543,
    "instance": {
      "id": 1543,
      "bidder_id": 123,
      "active": true,
      "datacenter_id": 6,
      "ip_address": "10.3.64.215",
      "port": 80,
      "hostname": null,
      "qps_limit": 10000,
      "dns_interval": null,
      "min_conns": 1,
      "max_conns": null,
      "receive_type_id": 0
    },
    "count": 1,
    "dbg": {
      "output_term": "bidder",
      "version": "1.0.5",
      "warnings": [
        
      ]
    },
    "num_elements": 100,
    "start_element": 0,
    "status": "OK"
  }
}

Respuesta de la oferta

  • La respuesta a la oferta debe tener el formato correcto para que el licitador envíe las ofertas correctamente. Los campos necesarios se pueden encontrar aquí.

    Nota:

    Dado que está integrando con el identificador de asiento del comprador, el campo seatbid.seat debe ser sus propios identificadores internos.

  • Si necesita un ejemplo de una solicitud de puja para usarla, su representante de Xandr debería poder proporcionarle una. Los campos de solicitud de puja admitidos con ejemplos se pueden encontrar aquí.

Sincronización de usuarios

  • Con el fin de informar a su actividad de puja, tenemos métodos para sincronizar sus identificadores de usuario internos con los de Xandr.
  • Para nuestros socios licitadores, la norma es usar /getuid. Puede encontrar más información sobre este servicio aquí: Sincronizar los identificadores de usuario.

Prueba de la integración

Solicitudes listas

  • Para recibir solicitudes de ofertas de nuestros servidores, el postor debe responder correctamente a nuestras solicitudes preparadas.
  • Las solicitudes listas se envían a https://[nombre de host o IP]:[puerto][bidder.ready_uri]
    • bidder.ready_uri se establece en el objeto del licitador.
  • La respuesta debe contener "1" en algún lugar del cuerpo.
  • Puede encontrar más detalles aquí.

Pruebas de flujo de pujas

  • El ingeniero de integración de Xandr le ayudará a probar la secuencia de pujas.
  • Esto probablemente implicará el envío de solicitudes de puja desde una página del publicador de pruebas.
  • Idealmente responderá a estas solicitudes, ganará nuestra subasta y hará que su creatividad se sirva en la página de prueba.
  • Desde allí, puede continuar con
    • Pruebe las macros o los rastreadores para asegurarse de que funcionan según lo esperado.
    • Compruebe que las discrepancias están dentro de intervalos aceptables.

Proceso de registro creativo

Nota:

Se recomienda registrar los identificadores creativos de Xandr en el sistema.

  • El pre-registro creativo es un requisito para la visualización, el vídeo y las creatividades nativas
    • Debe ser capaz de cargar fácilmente los creativos en nuestros sistemas y enviarlos a nuestro proceso de auditoría.
  • Revise nuestros estándares creativos y auditoría. Los vendedores requieren que los creativos pasen nuestras directivas de auditoría para servir en su inventario.
  • El proceso de registro implica la creación de servicios de API para
    • Adición de los objetos creativos
    • Compruebe si hay actualizaciones de estado:
      • audit_status: este campo indica si la creatividad ha superado la auditoría humana que confirma que la creatividad se representa y hace clic correctamente.
      • ssl_status: este campo indica si la creatividad ha pasado el analizador SSL de automatización.
      • is_prohibited: este campo indica si la creatividad ha infringido una de nuestras directivas.
    • Ajusta las creatividades para corregir cualquier problema, según sea necesario, en función de los campos de estado.
  • Puede usar nuestro entorno de pruebas de cliente para probar los flujos de trabajo de carga.
    • Las creatividades enviadas a nuestro entorno de pruebas de cliente no se auditan. Coordine con el ingeniero de integraciones de Xandr para probar sus creatividades.
  • Los flujos de trabajo de envío creativo se pueden trabajar en paralelo con las pruebas de flujo de puja.

Si aún no ve las solicitudes de puja que espera, compruebe la configuración con las instrucciones de esta página. Póngase en contacto con su representante de Xandr si el problema persiste.

Uso del entorno de prueba de cliente

El entorno de pruebas de cliente proporciona una versión de la API Impbus e Impbus que puede usar para probar los flujos de trabajo y las implementaciones de API. El código base y los datos del entorno de Pruebas de cliente ahora se actualizan cada mes. Esto significa que el entorno de prueba nunca estará más de 30 días (y a menudo menos) detrás de la versión del código Xandr que se ejecuta en producción. Además, todos los datos de producción también se copiarán automáticamente en el entorno de pruebas de cliente (incluidas las cuentas de miembro y las credenciales) cada mes. Esto permitirá pruebas mucho más sólidas con las características más recientes.

Como referencia, estos son los puntos de conexión para los entornos de producción y pruebas de cliente.

Actualizaciones de ejemplo

Objeto Bidder ready_uri y bid_uri

Actualice estos campos para asegurarse de que nuestras solicitudes listas y las solicitudes de puja, respectivamente, se envían a los puntos de conexión correctos.

Actualización del licitador de ejemplo

$ cat update-uris.json
{
    "bidder": {
        "ready_uri": "/example_ready_endpoint",
        "bid_uri": "/example_bid_endpoint"

    }
}

Salida de actualización del licitador de ejemplo

$ export IB="https://api.adnxs.com";
$ curl -b cookies -X PUT -d @update-uris.json $IB/bidder/1234?fields=active,bid_uri,id,ready_uri

{
    "response": {
        "bidder": {
            "active": true,
            "bid_uri": "/example_bid_endpoint",
            "id": 1234,
            "ready_uri": "/ready/",
        },
        "count": 1,
        "dbg": {
            "output_term": "bidder",
            "version": "1.0.5",
            "warnings": []
        },
        "id": "1234",
        "num_elements": 100,
        "start_element": 0,
        "status": "OK"
    }
} 

Actualizar correo electrónico de notificación de auditoría de objetos de miembro

Actualice estos campos para asegurarse de que recibe notificaciones de las creatividades que cargue en nuestro sistema.

Actualización de miembro de ejemplo

$ cat update-email.json
{
    "member": {
        "audit_notify_email": "your_email@email.com"

    }
}

Salida de actualización de miembro de ejemplo

$ export IB="https://api.adnxs.com";
$ curl -b cookies -X PUT -d @update-email.json $IB/member/5678?fields=active,audit_notify_email,id

{
    "response": {
        "member": {
            "active": true,
            "audit_notify_email": "your_email@email.com",
            "id": 5678,
        },
        "count": 1,
        "dbg": {
            "output_term": "member",
            "version": "1.0.5",
            "warnings": []
        },
        "id": "5678",
        "num_elements": 100,
        "start_element": 0,
        "status": "OK"
    }
}