1 points par GN⁺ 13 시간 전 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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 delta sous la forme single_advertiser_ad_unit
  • L’image et le favicon des cartes publicitaires sont chargés depuis bzrcdn.openai.com, et les liens avec target.open_externally: false s’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, olref et ad_data_token servent à la vérification de l’intégrité des clics et au flux d’identification, et oppref est 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_unit sont 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énements delta
    • L’objet publicitaire contient notamment ads_request_id, ads_spam_integrity_payload, advertiser_brand, carousel_cards et ad_data_token
    • advertiser_brand.id semble être un identifiant de compte marchand au format adacct_<32-hex>
  • 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: false s’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=chatgptpilot ainsi que oppref et olref

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=beijing003 apparaî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_payload n’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és
    • oppref est ajouté à l’URL de clic et le SDK OAIQ le copie dans le cookie __oppref avec une durée de 720 heures, soit 30 jours
    • olref est ajouté à l’URL de clic avec oppref, mais n’est pas stocké dans le SDK observé
    • ad_data_token est 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 0x80 et 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

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', { ... });
  • 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_probe est également défini en parallèle
  • Ensuite, tous les appels à measure envoient le JSON par POST vers https://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.

Aucun commentaire pour le moment.