Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette page explique comment intégrer un soumissionnaire à Xandr. Il commence par une vue d’ensemble des différentes « couches » de l’intégration et se termine par un exemple de travail (utilisant des appels d’API réels) d’une intégration simple qui vous permettra d’être rapidement opérationnel dans notre environnement de test. Il fournit également des liens vers des informations plus détaillées ailleurs sur notre Wiki.
Vue d’ensemble du système
Remarque
Protocole d’enchère
Xandr prend actuellement en charge le protocole d’enchère OpenRTB 2.4. Pour plus d’informations case activée notre page De protocole d’enchères.
À un niveau élevé, il existe deux « couches » du système dont nous devons nous préoccuper lors de la configuration des soumissionnaires :
Real-Time Layer (RTB) : C’est le cœur de l’action, où votre soumissionnaire participera à la vente aux enchères en temps réel.
Notre serveur reçoit une demande d’offre d’une page web (ou d’un partenaire SSP) et la formate pour préparer l’envoi à nos soumissionnaires.
À l’aide des paramètres du instance du soumissionnaire (et de votre objet soumissionnaire), nous envoyons la demande à vos serveurs.
- Le point de terminaison atteint par la requête dépend du type de demande.
Couche de configuration (API) : c’est là que vous allez configurer la « logique métier » de votre soumissionnaire afin qu’il puisse soumissionner sur les impressions. en d’autres termes, en filtrant les impressions indésirables, en configurant les utilisateurs, en ajoutant les éléments créatifs que vos membres veulent servir, etc.
Remarque sur la hiérarchie d’objets
Il est important de comprendre comment nos objets de plateforme sont liés les uns aux autres. Vous trouverez ci-dessous un plan de notre hiérarchie d’objets.
Soumissionnaires, membres, sièges
- Les soumissionnaires sont l’objet le plus élevé dans notre hiérarchie côté achat. Il représente la présence de votre entité sur notre plateforme.
- En dessous se trouvent les membres. Auparavant, la relation était un-à-plusieurs, un soumissionnaire ayant peut-être plusieurs membres.
- Ce n’est plus le cas. Il s’agit désormais d’un-à-un, car nous ne prenons plus en charge d’autres sous-membres.
- Vous serez intégré à un seul membre, que nous appelons votre « membre par défaut ».
- Les membres sont considérés comme des entités qui ont des accords contractuels d’achat (ou de vente) par le biais du bus d’impression (pour plus d’informations, voir le service aux membres).
- Les créatifs sont associés à votre membre par défaut, et non à votre soumissionnaire.
- Les soumissionnaires eux-mêmes ne sont pas membres, mais plutôt les fournisseurs de technologie pour les membres.
- Le soumissionnaire est l’endroit où vous configurez une connexion avec Xandr (par exemple, le type de demandes à recevoir, à quel point de terminaison, etc.).
- Le membre est l’endroit où vous configurez des objets liés à la campagne, tels que des objets créatifs.
- Le soumissionnaire est intégré à notre interface utilisateur. Le bus d’impression relie les soumissionnaires à diverses sources d’inventaire, y compris les agrégateurs, les échanges de publicités et les stocks revendus par le réseau.
- Les sièges sont vos entités internes que vous pouvez utiliser pour soumissionner dans nos enchères et acheter des impressions avec leur ID interne correspondant.
- Le diagramme ci-dessous illustre cette hiérarchie
- Dans le cas des précédentes participations, nous avons tenu un mappage des sièges d’un soumissionnaire qui correspondait à quel membre de petit groupe. Cela permettait aux soumissionnaires de soumissionner avec leurs ID internes 100 % du temps.
- Étant donné que vous ne serez en mesure d’intégrer qu’un seul membre et d’enchérir les sièges de l’acheteur, vous n’aurez qu’un seul membre par défaut et n’aurez pas à vous soucier du mappage des sièges-membres.
Utilisateurs
Traditionnellement, les soumissionnaires peuvent agir en leur nom, ou ils peuvent avoir plusieurs membres du 3e parti.
Les membres doivent avoir au moins un utilisateur, que le membre agisse ou non pour le compte d’un tiers (pour plus d’informations, voir le service utilisateur).
- Les membres peuvent avoir de nombreux utilisateurs.
Le soumissionnaire, en tant que fournisseur de technologie, a également au moins un utilisateur.
Les utilisateurs des soumissionnaires ajustent le profil du soumissionnaire, ajoutent des instances de soumissionnaire, etc.
Les utilisateurs membres chargent des créations pour ce membre, etc.
Même si le soumissionnaire est la même société qu’un membre et que le soumissionnaire agit uniquement en son nom, le soumissionnaire est logiquement distinct du membre de la même façon.
Comment configurer votre soumissionnaire
Dans cette section, nous allons parcourir tout le processus de configuration d’un soumissionnaire sur la plateforme. Nous allons commencer par rendre les appels d’API nécessaires pour raccorder les canaux.
Conseil
API
La plupart des tests clients sont effectués dans nos API de production. Nous disposons également d’une API d’environnement de test qui permet de tester vos workflows de création et de mise à jour d’objets.
La plupart des exemples d’appels ci-dessous sont effectués dans l’environnement d’API de production.
S’authentifier avec l’API
Avant de pouvoir faire quoi que ce soit d’autre, nous devons nous connecter. Voici un exemple d’authentification json que vous pouvez utiliser. Le processus d’authentification pour notre environnement de production et de test est le même. La seule différence est le point de terminaison.
Conseil
Pour plus d’informations sur l’authentification via notre API, consultez le service d’authentification.
Exemple d’authentification JSON
$ cat auth.json
{
"auth":
{
"username" : "rloveland",
"password" : "AppNexus1!"
}
}
Publiez dans l’API de production pour vous authentifier :
Exemple d’appel d’authentification dans l’API de production
$ export IB="https://api.adnxs.com";
$ curl -b cookies -c cookies -X POST -d @auth.json $IB/auth
{ response": { "status": "OK", ... } }
De même, publiez dans l’environnement de test pour vous authentifier :
Exemple d’appel d’authentification dans l’API de test
$ export IB_TESTING="https://api-test.adnxs.com";
$ curl -b cookies -c cookies -X POST -d @auth.json $IB_TESTING/auth
{ response": { "status": "OK", ... } }
Afficher votre objet soumissionnaire
L’objet soumissionnaire représente votre soumissionnaire dans notre système. Par conséquent, il comporte de nombreux champs que vous pouvez utiliser pour configurer la façon dont votre soumissionnaire interagit avec notre plateforme. Considérez-le comme le « crochet » central sur lequel vous allez accrocher une grande partie du reste de votre configuration. Un objet soumissionnaire doit déjà avoir été créé pour vous par votre représentant Xandr.
Dans l’exemple ci-dessous, nous effectuons un GET appel pour afficher l’objet soumissionnaire, mais nous n’expliquons aucun de ses détails. Pour plus d’informations sur l’objet soumissionnaire, consultez le service du soumissionnaire.
Développer pour l’exemple d’appel
$ 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"
}
}
Configurations d’objet du soumissionnaire
Pour les champs suivants de l’objet « Soumissionnaire », l’adresse IP/le nom d’hôte ne doit pas être inclus avant le chemin d’accès.
L’adresse IP sera configurée séparément sur le ou les objets « Instance de soumissionnaire » à l’étape suivante du processus d’intégration.
| Champ | Obligatoire | Description |
|---|---|---|
| bid_uri | chemin d’accès/nom de fichier qui spécifie la destination des demandes d’enchères (par exemple, « /soumissionnaire ») | |
| ready_uri | chemin d’accès/nom de fichier qui spécifie la destination des demandes prêtes (par exemple, « /ready ») | |
| notify_uri | chemin d’accès/nom de fichier qui spécifie la destination des demandes de notification (par exemple, « /notify ») | |
| pixel_uri | Optionnel | chemin d’accès/nom de fichier qui spécifie la destination |
| click_uri | Optionnel | chemin d’accès/nom de fichier qui spécifie la destination des demandes de clic |
| audit_notify_uri | Optionnel | chemin d’accès/nom de fichier qui spécifie la destination des demandes de notification d’audit (par exemple, «https://examplebidder.com/audit_notify_endpoint ») |
Afficher votre objet membre
Vous devez avoir au moins un membre qui achète par l’intermédiaire de votre soumissionnaire. Vous devez avoir créé un membre pour vous par votre représentant Xandr dans le cadre du processus d’intégration. Le membre est l’endroit où vous allez configurer une grande partie de la « logique métier », comme les segments d’utilisateurs, les créations, etc.
Conseil
Dans l’exemple ci-dessous, nous effectuons un GET appel pour afficher l’objet membre, mais nous n’expliquons aucun de ses détails. Certains des champs qui vous sont affichés peuvent être dépréciés. Pour plus d’informations sur l’objet membre, notamment sur les champs actuellement pris en charge, consultez Le service membre.
Développer pour l’exemple d’appel
$ 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 profil de soumissionnaire
Dans cette étape, nous allons passer en revue les options du profil de soumissionnaire qui vous aident à mettre en forme le trafic que vous recevez. Le profil du soumissionnaire peut être mis à jour à l’aide de l’API et de notre interface utilisateur du soumissionnaire. La documentation main se trouve ici :
- API : profils de soumissionnaire améliorés
- Interface utilisateur du soumissionnaire : création d’un profil de soumissionnaire
- Notre interface utilisateur du soumissionnaire fournit de nombreux autres services, tels que des métriques et des rapports. Vous pouvez les trouver ici :
- Métriques : écran Métriques
- Creatives : Creatives Screen
- Création de rapports : Écran de création de rapports
Dans l’exemple ci-dessous, le ciblage se décompose comme suit :
- Inclure uniquement nos membres d’échange direct
- Accepter le trafic basé sur les États-Unis uniquement
- Trafic de bannière, de toutes tailles
- Trafic web
- Autoriser les utilisateurs inconnus
Exemple JSON de profil de soumissionnaire
$ 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"
}
}
Profil de test
- Votre ingénieur d’intégration Xandr vous aidera à configurer un profil de soumissionnaire à des fins de test.
- Ce profil bloque tout le trafic de la plateforme, à l’exception de celui qui est envoyé à partir de notre éditeur de test
- Le trafic de notre membre de test vous permet de simuler le flux d’enchères, sans avoir à vous soucier des dépenses.
Ajouter un test créatif
Dans cette étape, nous allons ajouter un élément créatif. Après avoir téléchargé cette création, vous devrez configurer votre soumissionnaire pour répondre à une demande d’offre avec une réponse d’offre correctement mise en forme. La réponse de l’offre doit inclure ce créatif, soit dans le "crid" champ, correspondant à votre ID interne pour le créatif, soit le "adid", qui est l’ID Xandr pour le créatif. Cela permet de vérifier que votre intégration fonctionne comme prévu.
Conseil
Pour plus d’informations sur les nombreux types de configurations créatives, consultez Creative Service.
Pour obtenir des conseils sur la mise en place de votre créativité, consultez notre Guide d’achat créatif de démarrage rapide.
- Cet exemple montre une conception de voiture (très) démodée utilisant le champ de contenu de l’objet créatif. Il utilise notre modèle raw-html de bannière standard.
- Pour plus d’informations sur l’utilisation de l’environnement de test client pour tester le chargement de créations, consultez Utilisation de l’environnement de test client ci-dessous.
Remarque
Statuts
- Les
"allow_audit"champs et"allow_ssl_audit"ont chacun la valeurtrue. - Le
"allow_audit"champ soumet le créatif pour l’audit humain de notre plateforme. - envoie
"allow_ssl_audit"le créatif pour notre analyse automatisée afin de déterminer si le créatif peut servir sur un inventaire sécurisé.
Exemple de code JSON créatif
$ 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
}
}
Exemple de chargement créatif
$ 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"
}
}
Ajouter un instance de soumissionnaire
L’objet instance soumissionnaire représente un serveur de soumissionnaire particulier s’exécutant dans le centre de données. Ces informations stockées dans cet objet déterminent l’emplacement où nous envoyons le trafic. Dans cet exemple, nous définissons l’ID du centre de données sur (NYM).
Avertissement
Cette étape suppose que vous disposez déjà d’un soumissionnaire opérationnel qui peut répondre aux demandes de soumission, aux demandes prêtes, etc., comme indiqué dans la Vue d’ensemble du système.
Conseil
Pour plus d’informations sur la configuration d’un instance de soumissionnaire, consultez le service d’instance de soumissionnaire
Dans cet exemple, nous définissons une adresse IP et un port vers lesquels le trafic doit être envoyé.
- Nous prenons également en charge l’utilisation de noms d’hôte.
- Lorsqu’ils sont présents, les noms d’hôte ont un précédent.
- Notre service de instance de soumissionnaire nécessite la présence d’une adresse IP lors du chargement. Si vous souhaitez utiliser un nom d’hôte, une adresse IP factice peut être placée dans le chargement de l’objet.
- Le chemin d’accès complet vers lequel nous allons envoyer le trafic est
https://[hostname or IP] :[port][bidder.bid_uri]
- est
bidder.bid_uridéfini dans votre objet soumissionnaire. - Ce chemin doit être unique par soumissionnaire
- est
- Il est également fortement recommandé de placer une limite de requêtes par seconde (QPS) sur le soumissionnaire instance pour vous assurer que vos serveurs ne sont pas inondés de trafic.
- Nous vous recommandons vivement de garder le soumissionnaire instance inactif jusqu’à ce que vous soyez prêt à recevoir du trafic afin d’éviter les dépenses accidentelles.
Exemple d’objet instance soumissionnaire
$ 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,
}
}
Sortie
$ 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"
}
}
Réponse de l’enchère
La réponse à l’offre doit être mise en forme correctement afin que votre soumissionnaire puisse soumettre les soumissions correctement. Les champs obligatoires sont disponibles ici.
Remarque
Étant donné que vous intégrez à l’ID de siège acheteur, le champ seatbid.seat doit être vos propres ID internes.
Si vous avez besoin d’un exemple de demande d’offre à utiliser, votre représentant Xandr doit être en mesure de vous en fournir un. Les champs de demande d’offre pris en charge avec des exemples sont disponibles ici.
Synchronisation de l’utilisateur
- Afin d’informer votre activité d’enchères, nous avons des méthodes pour synchroniser vos ID d’utilisateur internes avec Xandr.
- Pour nos partenaires soumissionnaires, la norme est d’utiliser
/getuid. Vous trouverez plus d’informations sur ce service ici : Synchroniser vos ID d’utilisateur.
Tester l’intégration
Demandes prêtes
- Pour recevoir les demandes de soumission de nos serveurs, votre soumissionnaire doit d’abord répondre correctement à nos demandes prêtes.
- Les demandes prêtes sont envoyées à https://[nom d’hôte ou IP] :[port][bidder.ready_uri]
- est
bidder.ready_uridéfini dans votre objet soumissionnaire.
- est
- Votre réponse doit contenir
"1"quelque part dans le corps. - Vous trouverez plus d’informations ici.
Test de flux d’enchères
- Votre ingénieur intégration Xandr vous aidera à tester le flux d’enchères.
- Cela impliquera probablement l’envoi de demandes d’enchères à partir d’une page d’éditeur de test.
- Dans l’idéal, vous répondrez à ces demandes, gagnerez notre vente aux enchères et faites servir votre créatif à la page de test
- À partir de là, vous pouvez passer à
- Testez les macros ou les suivis pour vous assurer qu’ils fonctionnent comme prévu.
- Vérifiez que les écarts se trouvent dans des plages acceptables.
Processus d’inscription de création
Remarque
Nous vous recommandons de journaliser les ID créatifs Xandr sur votre système.
- La préinscription créative est requise pour l’affichage, la vidéo et les créations natives
- Vous devez être en mesure de charger facilement des éléments créatifs dans nos systèmes et de les soumettre à notre processus d’audit
- Passez en revue nos normes et audit créatifs. Les vendeurs ont besoin de créatifs pour passer nos stratégies d’audit afin de servir sur leur inventaire.
- Le processus d’inscription implique la création de services d’API pour
- Ajouter les objets créatifs
- Recherchez les mises à jour d’état :
-
audit_status: ce champ indique si le créateur a réussi l’audit humain qui confirme que le créatif s’affiche et clique correctement. -
ssl_status: ce champ indique si le créatif a passé notre scanneur SSL automates. -
is_prohibited: ce champ indique si le créateur a enfreint l’une de nos politiques.
-
- Ajuste les éléments créatifs pour corriger les problèmes, selon les besoins, en fonction des champs status.
- Vous pouvez utiliser notre environnement de test client pour tester vos workflows de chargement.
- Les créations soumises à notre environnement de test client ne sont pas auditées. Veuillez vous coordonner avec votre ingénieur Xandr Integrations pour tester vos créations.
- Vos flux de travail de soumission créatifs peuvent être travaillés en parallèle avec le test de flux d’enchères.
Si vous ne voyez toujours pas les demandes d’enchères attendues, double-case activée votre configuration par rapport aux instructions de cette page. Si le problème persiste, contactez votre représentant Xandr.
Utilisation de l’environnement de test client
L’environnement de test client fournit une version de l’API Impbus et Impbus que vous pouvez utiliser pour tester vos workflows et implémentations d’API. Le codebase et les données de l’environnement de test client sont désormais mis à jour chaque mois. Cela signifie que votre environnement de test n’aura jamais plus de 30 jours (et souvent moins) de retard sur la version du code Xandr qui s’exécute en production. En outre, toutes les données de production sont également copiées automatiquement dans l’environnement de test client (y compris vos comptes de membre et informations d’identification) chaque mois. Cela permettra d’effectuer des tests beaucoup plus robustes par rapport aux dernières fonctionnalités.
Pour référence, voici les points de terminaison pour les environnements de production et de test client.
Exemples de mises à jour
Objet de soumissionnaire ready_uri et bid_uri
Mettez à jour ces champs pour vous assurer que nos demandes prêtes et nos demandes d’enchères, respectivement, sont envoyées aux points de terminaison appropriés.
Exemple de mise à jour du soumissionnaire
$ cat update-uris.json
{
"bidder": {
"ready_uri": "/example_ready_endpoint",
"bid_uri": "/example_bid_endpoint"
}
}
Exemple de sortie de mise à jour du soumissionnaire
$ 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"
}
}
Mettre à jour un e-mail de notification d’audit d’objet membre
Mettez à jour ces champs pour vous assurer que vous recevez des notifications pour les créations que vous chargez sur notre système.
Exemple de mise à jour de membre
$ cat update-email.json
{
"member": {
"audit_notify_email": "your_email@email.com"
}
}
Exemple de sortie de mise à jour de membre
$ 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"
}
}