Comment ChatGPT diffuse des publicités
(buchodi.com)- Dans le flux de réponse de ChatGPT, des objets d’unité publicitaire sont insérés parmi la sortie du modèle, et sont transmis via l’événement SSE
deltasous la formesingle_advertiser_ad_unit - L’image et le favicon des cartes publicitaires sont chargés depuis
bzrcdn.openai.com, et les liens avectarget.open_externally: falses’ouvrent dans la webview interne de ChatGPT, ce qui maintient dans le même flux le clic puis le passage vers la page du marchand - Même avec un même compte, des annonceurs différents sont associés selon le sujet de la conversation ; selon des contextes comme un voyage à Pékin, des vols, les playoffs NBA, la mode ou la productivité, Grubhub, GetYourGuide, Axel, Gametime, Aritzia et Canva ont été observés respectivement
- Les publicités et les URL de clic transmettent aussi des identifiants basés sur des jetons Fernet ;
ads_spam_integrity_payload,oppref,olrefetad_data_tokenservent à la vérification de l’intégrité des clics et au flux d’identification, etopprefest stocké pendant 30 jours dans le cookie__oppref - La page du marchand charge le SDK OAIQ et envoie des événements
measureàbzr.openai.com, ce qui complète une boucle d’attribution où, après un clic depuis ChatGPT, les événements côté marchand reviennent vers OpenAI
Insertion des publicités et flux de clic
- Dans le flux de réponse de ChatGPT, des objets publicitaires de type
single_advertiser_ad_unitsont mélangés à la sortie du modèle- Lors d’une requête de conversation, une réponse SSE s’ouvre sur
chatgpt.com/backend-api/f/conversation, et certaines publicités sont transmises via des événementsdelta - L’objet publicitaire contient notamment
ads_request_id,ads_spam_integrity_payload,advertiser_brand,carousel_cardsetad_data_token advertiser_brand.idsemble être un identifiant de compte marchand au formatadacct_<32-hex>
- Lors d’une requête de conversation, une réponse SSE s’ouvre sur
- Le favicon de la marque et l’image des cartes publicitaires sont tous deux chargés depuis
bzrcdn.openai.com- Cela montre une architecture où les créations publicitaires sont hébergées côté OpenAI plutôt que chez le marchand
- Les liens avec
target.open_externally: falses’ouvrent dans la webview interne de ChatGPT- Le flux menant après le clic à la page du marchand peut ainsi aussi être observé directement par OpenAI
- Les URL de clic incluent des paramètres comme
utm_source=chatgptpilotainsi queopprefetolref- Un exemple de lien s’ouvre sous la forme
https://grubhub.com/?utm_source=chatgptpilot...&oppref=...&olr…=...
- Un exemple de lien s’ouvre sous la forme
Ciblage et chaîne d’attribution
- Même avec le même compte, des annonceurs différents sont envoyés selon le sujet de la conversation
- Pour un projet de voyage à Pékin, Grubhub avec « Get Chinese Food Delivered » apparaît
- Pour une réservation de visite à Pékin, GetYourGuide avec un tour de la Grande Muraille et
ad_id=beijing003apparaît - Pour des vols vers Pékin, Axel apparaît avec
utm_term=vflight_beijing_03 - Pour les playoffs NBA, Gametime apparaît avec
utm_campaign=nba&utm_content=playoffs - Pour la mode printanière et les tendances, Aritzia apparaît avec
utm_campaign=chatgptpilot_trav3 - Pour des conversations sur la productivité et les slides, Canva apparaît avec
utm_campaign=…link-clicks_products
- Cette observation met en évidence un ciblage basé sur le contexte de la conversation
- Il n’a pas été vérifié si l’historique des conversations précédentes est aussi pris en compte
- Quatre jetons Fernet sont transmis avec chaque publicité
ads_spam_integrity_payloadn’apparaît que dans le SSE et est présenté comme une valeur utilisée pour une vérification d’intégrité côté serveur contre les clics falsifiésopprefest ajouté à l’URL de clic et le SDK OAIQ le copie dans le cookie__opprefavec une durée de 720 heures, soit 30 joursolrefest ajouté à l’URL de clic avecoppref, mais n’est pas stocké dans le SDK observéad_data_tokenest structuré pour contenir un autre jeton Fernet à l’intérieur d’un JSON encapsulé en base64
- Les 9 premiers octets d’un jeton Fernet sont publics, ce qui permet de reconstituer l’heure d’émission sans la clé
- Ils incluent l’octet de version
0x80et un timestamp Unix big-endian sur 8 octets - L’URL de clic Home Depot capturée a été émise le 2026-04-26 à 11:30:08 UTC, et le navigateur a chargé la page du marchand à 11:31:43, ce qui donne un délai de 95 secondes
- Ils incluent l’octet de version
SDK de suivi côté marchand
- La page du marchand charge le SDK OAIQ
https://bzrcdn.openai.com/sdk/oaiq.min.js- La version observée est
0.1.3 - Le code d’initialisation est de la forme
oaiq('init', { pid: '<merchant pixel ID>' }); - La mesure de page est appelée sous la forme
oaiq('measure', 'contents_viewed', { ... });
- La version observée est
- Au moment de
init, OAIQ lit la valeur?oppref=de l’URL et l’écrit dans le cookie first-party__oppref- Le cookie
__oaiq_domain_probeest également défini en parallèle
- Le cookie
- Ensuite, tous les appels à
measureenvoient le JSON par POST vershttps://bzr.openai.com/v1/sdk/…- Cela complète la boucle d’attribution dans laquelle, après un clic, les événements côté marchand retournent vers OpenAI
- Deux domaines et deux cookies sont explicitement présentés comme des cibles de blocage ou d’inspection
-
bzrcdn.openai.com,bzr.openai.com__oppref,__oaiq_domain_probe
-
Aucun commentaire pour le moment.