विज्ञापन स्लॉट खरीदने के लिए नीलामी में बिड करना

विज्ञापन खरीदार (डीएसपी और विज्ञापन देने वाले) के तौर पर, हो सकता है कि आप पब्लिशर साइट पर Protected Audience विज्ञापन नीलामी में हिस्सा लेना चाहें. ऐसा इसलिए, ताकि आप विज्ञापन को उस इंटरेस्ट ग्रुप को टारगेट कर सकें जिसे आपने विज्ञापन देने वाले की साइट पर तय किया है. Protected Audience नीलामी में हिस्सा लेकर, निजता बनाए रखते हुए अन्य साइटों पर अपने पहचाने गए ग्राहकों तक पहुंचा जा सकता है.

Protected Audience नीलामी में, बिड जनरेट करने के लिए लॉजिक दिया जाता है. इसके बाद, ब्राउज़र उस लॉजिक का इस्तेमाल करके बिड का हिसाब लगाता है. यह नीलामी के अन्य आर्किटेक्चर से अलग है, जहां लॉजिक देने के बजाय सीधे बिड सबमिट की जाती है.

generateBid() JavaScript फ़ंक्शन में बिड जनरेशन लॉजिक दिया जाता है और फ़ाइल को आपके सर्वर पर होस्ट किया जाता है. किसी उपयोगकर्ता को इंटरेस्ट ग्रुप में जोड़ने पर, इस फ़ाइल की जगह को इंटरेस्ट ग्रुप कॉन्फ़िगरेशन में biddingLogicUrl के तौर पर पास किया जाता है.

नीलामी के दौरान, ब्राउज़र biddingLogicUrl फ़ील्ड में बताए गए बिडिंग लॉजिक को फ़ेच करता है. साथ ही, हर इंटरेस्ट ग्रुप के लिए generateBid() फ़ंक्शन को एक सुरक्षित और अलग-थलग किए गए माहौल में लागू करता है. यह माहौल, बाहरी संदर्भ के साथ कम ही कम्यूनिकेट करता है. generateBid() को लागू करने पर, ब्राउज़र फ़ंक्शन में सिग्नल को आर्ग्युमेंट के तौर पर पास करता है. इन सिग्नल में अलग-अलग सोर्स से मिली अलग-अलग जानकारी होती है. जैसे, पब्लिशर का फ़र्स्ट पार्टी डेटा, सेलर का डेटा, रीयल-टाइम डेटा वगैरह. बिड का हिसाब लगाने के लिए, इन सिग्नल का इस्तेमाल किया जा सकता है. साथ ही, generateBid() कॉल से वैल्यू मिलती है. बिड सबमिट होने के बाद, ब्राउज़र हर बिड पर सेलर के स्कोरिंग लॉजिक को लागू करेगा, ताकि सेलर के डिज़ायरेबिलिटी स्कोर का हिसाब लगाया जा सके.

generateBid()

यहां generateBid() फ़ंक्शन के आर्ग्युमेंट और फ़ंक्शन से वापस मिलने वाली बिड के स्ट्रक्चर के बारे में बताया गया है:


generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals, directFromSellerSignals) {
  return {
    ad: adObject,
    adCost: optionalAdCost,
    bid: bidValue,
    bidCurrency: 'USD',
    render: {
      url: renderURL,
      width: renderWidth,
      height: renderHeight
    },
    adComponents: [
      {url: adComponent1, width: componentWidth1, height: componentHeight1},
      {url: adComponent2, width: componentWidth2, height: componentHeight2},
      // ...
    ],
    allowComponentAuction: false,
    modelingSignals: 123 // 0-4095 integer (12-bits)
  };
}

तर्क

generateBid() में ये आर्ग्युमेंट इस्तेमाल किए जाते हैं:

आर्ग्यूमेंट भूमिका

interestGroup

विज्ञापन खरीदार से मिला आइटम. इंटरेस्ट ग्रुप को dailyUpdateUrl से अपडेट किया जा सकता है.

auctionSignals

नीलामी कॉन्फ़िगरेशन आर्ग्युमेंट की प्रॉपर्टी, जिसे सेलर ने navigator.runAdAuction() को पास किया है. इससे पेज के कॉन्टेक्स्ट (जैसे, विज्ञापन का साइज़ और पब्लिशर आईडी), नीलामी के टाइप (फ़र्स्ट-प्राइस या सेकंड-प्राइस), और अन्य मेटाडेटा के बारे में जानकारी मिलती है.

perBuyerSignals

सेलर की ओर से पास की गई auction config आर्ग्युमेंट की प्रॉपर्टी. अगर सेलर कोई एसएसपी है, जो खरीदार के सर्वर पर रीयल-टाइम बिडिंग कॉल करता है और जवाब को वापस भेजता है या पब्लिशर पेज सीधे खरीदार के सर्वर से संपर्क करता है, तो यह पेज के बारे में खरीदार के सर्वर से संदर्भ के हिसाब से सिग्नल दे सकता है. अगर ऐसा है, तो खरीदार generateBid() में मौजूद उन सिग्नल के क्रिप्टोग्राफ़िक हस्ताक्षर की जांच कर सकता है, ताकि डेटा में छेड़छाड़ न की जा सके.

trustedBiddingSignals

एक ऑब्जेक्ट जिसकी कुंजियां, दिलचस्पी के ग्रुप के लिए trustedBiddingSignalsKeys होती हैं और जिनकी वैल्यू trustedBiddingSignals अनुरोध में वापस आती हैं.

browserSignals

ब्राउज़र से बनाया गया ऑब्जेक्ट, जिसमें पेज के कॉन्टेक्स्ट (जैसे, मौजूदा पेज का hostname, जिसे सेलर नकली बना सकता है) और इंटरेस्ट ग्रुप के डेटा (जैसे, डिवाइस पर फ़्रीक्वेंसी कैपिंग की अनुमति देने के लिए, ग्रुप ने पिछली बार नीलामी कब जीती थी) की जानकारी शामिल हो सकती है.

directFromSellerSignals

ये सिग्नल किसी खास सेलर से मिलते हैं. auctionSignals और sellerSignals के उलट, ये सिग्नल runAdAuction के लागू होने के कॉन्टेक्स्ट में मौजूद किसी भी व्यक्ति से मिल सकते हैं.

ब्राउज़र से मिलने वाले सिग्नल

browserSignals ऑब्जेक्ट में ये प्रॉपर्टी होती हैं:

{
  topWindowHostname: 'publisher.example',
  seller: 'https://ssp.example',
  topLevelSeller: 'https://www.top-level-ssp.com',
  requestedSize: {width: 100, height: 200},  /* if specified in auction config */
  joinCount: 3,
  recency: 3600000,
  bidCount: 17,
  prevWinsMs: [[timeDeltaMs1,ad1],[timeDeltaMs2,ad2],...],
  wasmHelper: ...
  dataVersion: 1,
  adComponentsLimit: 40
}
प्रॉपर्टी ब्यौरा

topWindowHostname

उस होस्ट का होस्टनेम जहां से runAdAuction() कॉल किया गया था.

seller

वह सेलर जिसके लिए बिड सबमिट की गई है. कॉम्पोनेंट की नीलामी में, यह वैल्यू कॉम्पोनेंट सेलर होती है.

topLevelSeller

कॉम्पोनेंट की नीलामी में टॉप लेवल सेलर. यह सिर्फ़ कॉम्पोनेंट की नीलामी में मौजूद होता है.

requestedSize

requestedSize प्रॉपर्टी, नीलामी के लिए फ़्रेम का साइज़ तय करती है. सेलर, नीलामी कॉन्फ़िगरेशन में अनुरोध किया गया साइज़ सेट करता है. इसके बाद, यह वैल्यू बिड लगाने वालों के लिए generateBid() में उपलब्ध हो जाती है. नीलामी में हिस्सा लेने वाले लोग, विज्ञापन के लिए कॉन्टेंट का कोई दूसरा साइज़ चुन सकते हैं. इस साइज़ को एलिमेंट के कंटेनर साइज़ में फ़िट करने के लिए, विज़ुअल तौर पर स्केल किया जाएगा.

joinCount

joinCount फ़ील्ड से पता चलता है कि पिछले 30 दिनों में, इस डिवाइस ने एक जैसी दिलचस्पी वाले इस ग्रुप में कितनी बार शामिल हुआ है. ऐसा तब होता है, जब एक जैसी दिलचस्पी वाले ग्रुप को लगातार सेव किया जाता है. इसका मतलब है कि ग्रुप से बाहर निकलने या सदस्यता की समयसीमा खत्म होने की वजह से, डिवाइस पर एक जैसी दिलचस्पी वाले ग्रुप के सेव होने में कोई अंतर नहीं होता.

recency

recency फ़ील्ड में, इस डिवाइस के इस दिलचस्पी के ग्रुप में शामिल होने से लेकर अब तक के समय की अवधि (मिनट में) होती है

bidCount

उस इंटरेस्ट ग्रुप ने कितनी बार बिड सबमिट की है.

prevWinsMs

prevWinMs फ़ील्ड में, दिलचस्पी के ग्रुप के विज्ञापनों की जानकारी होती है. साथ ही, इसमें पिछले विज्ञापनों की तुलना में, मौजूदा विज्ञापनों के दिखने का समय भी होता है. यह समय मिलीसेकंड में होता है. ध्यान दें कि विज्ञापन ऑब्जेक्ट में सिर्फ़ renderURL और मेटाडेटा फ़ील्ड शामिल हैं.

wasmHelper

एक WebAssembly.Module ऑब्जेक्ट, जो दिलचस्पी के ग्रुप के biddingWasmHelperURL पर आधारित होता है.

dataVersion

खरीदार की की/वैल्यू सेवा के रिस्पॉन्स से मिली डेटा-वर्शन वैल्यू.

adComponentsLimit

ज़्यादा से ज़्यादा generateBid() विज्ञापन कॉम्पोनेंट दिख सकते हैं

बिड का हिसाब लगाना

बिड वैल्यू का हिसाब लगाने के लिए, generateBid() में मौजूद कोड, फ़ंक्शन के पैरामीटर की प्रॉपर्टी का इस्तेमाल कर सकता है.

उदाहरण के लिए:

function generateBid(interestGroup, auctionSignals, perBuyerSignals,
    trustedBiddingSignals, browserSignals) {
  return {
   //  ...
    bid: auctionSignals.is_above_the_fold ? perBuyerSignals.atf_value : perBuyerSignals.btf_value,
    // ...
  }
}

बिड लौटाना

generateBid(), इन प्रॉपर्टी वाला ऑब्जेक्ट दिखाता है:

प्रॉपर्टी भूमिका
ad विज्ञापन के बारे में मनमुताबिक मेटाडेटा, जैसे कि ऐसी जानकारी जिसे सेलर को इस बिड या विज्ञापन क्रिएटिव के बारे में जानना है. सेलर इस जानकारी का इस्तेमाल, नीलामी और फ़ैसले लेने के लॉजिक में करता है.
adCost यह एक संख्या वाली वैल्यू है. इसका इस्तेमाल, विज्ञापन देने वाले के क्लिक या कन्वर्ज़न की लागत की जानकारी को generateBid से reportWin में भेजने के लिए किया जाता है. इस संख्या की सटीक जानकारी, 8-बिट मैनटिसा और 8-बिट एक्सपोनेंट तक सीमित है. साथ ही, राउंडिंग को स्टोकेस्टिक तरीके से किया जाता है.
adComponents एक से ज़्यादा हिस्सों से बने विज्ञापनों के लिए, ज़्यादा से ज़्यादा 20 कॉम्पोनेंट की वैकल्पिक सूची. यह सूची, navigator.joinAdInterestGroup() में पास किए गए दिलचस्पी के ग्रुप आर्ग्युमेंट की adComponents प्रॉपर्टी से ली जाती है.
allowComponentAuction बूलियन वैल्यू, जिससे यह पता चलता है कि इस बिड का इस्तेमाल कॉम्पोनेंट नीलामी में किया जा सकता है या नहीं. अगर कोई वैल्यू नहीं दी गई है, तो डिफ़ॉल्ट रूप से "गलत" दिखेगी.
bid संख्या वाली बिड, जो नीलामी में शामिल होगी. सेलर के पास अलग-अलग खरीदारों की बिड की तुलना करने की सुविधा होनी चाहिए. इसलिए, बिड को सेलर की चुनी गई इकाई में होना चाहिए. जैसे, "हर हज़ार के लिए डॉलर". अगर बिड शून्य या नेगेटिव है, तो यह दिलचस्पी वाला ग्रुप सेलर की नीलामी में बिल्कुल भी हिस्सा नहीं लेगा. इस तरीके से, खरीदार विज्ञापन देने वाले के लिए कोई भी नियम लागू कर सकता है. जैसे, विज्ञापन कहां दिख सकते हैं और कहां नहीं.
bidCurrency बिड की मुद्रा, जिसका इस्तेमाल मुद्रा की जांच के लिए किया जाता है.
render इस डायक्शनरी में उस क्रिएटिव के बारे में बताया गया है जिसे नीलामी जीतने पर रेंडर किया जाना चाहिए. इसमें ये चीज़ें शामिल हैं:
  • url: क्रिएटिव का यूआरएल.
  • width: क्रिएटिव की चौड़ाई. इस साइज़ की तुलना, इंटरेस्ट ग्रुप में किए गए एलान से की जाएगी. साथ ही, विज्ञापन क्रिएटिव यूआरएल में मौजूद विज्ञापन साइज़ मैक्रो में इसे बदल दिया जाएगा. जब विज्ञापन को फ़ेंस किए गए फ़्रेम में लोड किया जाता है, तो फ़ेंस किए गए फ़्रेम का इनर फ़्रेम (यानी विज्ञापन क्रिएटिव को दिखने वाला साइज़) इस साइज़ पर फ़्रीज़ हो जाएगा. साथ ही, एम्बेड करने वाले व्यक्ति या कंपनी के किए गए फ़्रेम साइज़ में हुए बदलावों को नहीं देखा जा सकेगा.
  • height: क्रिएटिव की ऊंचाई. ज़्यादा जानकारी के लिए, width देखें.

modelingSignals

reportWin() में पास किया गया 0 से 4095 के बीच का पूर्णांक (12-बिट), जिसमें गड़बड़ी और बकेट करने की योजना में बताए गए तरीके से गड़बड़ी की गई है. अमान्य वैल्यू, जैसे कि नेगेटिव, अनलिमिटेड, और NaN वैल्यू को अनदेखा कर दिया जाएगा और उन्हें पास नहीं किया जाएगा. सिर्फ़ सबसे निचले 12 बिट पास किए जाएंगे.


खरीदार, generateBid() फ़ंक्शन में उपलब्ध सिग्नल का इस्तेमाल कर सकता है. इनमें userBiddingSignals में, इंटरेस्ट ग्रुप बनाने के समय कैप्चर किए गए पहले पक्ष (ग्राहक) के डेटा का डेटा भी शामिल है. इससे, खरीदार को कुछ वैल्यू मिलती है, जिसे एमएल मॉडल को ट्रेन करने के लिए, खरीदार के 'जीतने की रिपोर्टिंग' फ़ंक्शन में भेजा जाता है.