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

विज्ञापन खरीदार (डीएसपी और विज्ञापन देने वाले लोग या कंपनियां) के तौर पर, आपको पब्लिशर की साइट पर 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 आर्ग्युमेंट की प्रॉपर्टी है. अगर सेलर, SSP है, तो खरीदार के सर्वर से पेज के बारे में कॉन्टेक्स्ट के हिसाब से सिग्नल मिल सकते हैं. एसएसपी, खरीदार के सर्वर को रीयल-टाइम बिडिंग कॉल करता है और जवाब वापस भेजता है. इसके अलावा, अगर पब्लिशर पेज, खरीदार के सर्वर से सीधे संपर्क करता है, तो भी ऐसा हो सकता है. अगर ऐसा है, तो खरीदार को 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

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

dataVersion

खरीदार की Key/Value सेवा के रिस्पॉन्स से मिली Data-Version वैल्यू.

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 बूलियन वैल्यू, जिससे यह पता चलता है कि इस बिड का इस्तेमाल कॉम्पोनेंट ऑक्शन में किया जा सकता है या नहीं. अगर कोई वैल्यू नहीं दी गई है, तो डिफ़ॉल्ट रूप से "false" पर सेट होता है.
bid नीलामी में शामिल होने वाली संख्यात्मक बिड. सेलर के पास, अलग-अलग खरीदारों की बोलियों की तुलना करने की सुविधा होनी चाहिए. इसलिए, बोलियां सेलर की चुनी हुई किसी यूनिट में होनी चाहिए. जैसे, "हर हज़ार के लिए डॉलर". अगर बिड शून्य या नेगेटिव है, तो यह दिलचस्पी वाला ग्रुप सेलर की नीलामी में हिस्सा नहीं लेगा. इस सुविधा की मदद से खरीदार, विज्ञापन देने वाले व्यक्ति या कंपनी के लिए यह तय कर सकता है कि उसके विज्ञापन कहां दिखें और कहां न दिखें.
bidCurrency बिड के लिए इस्तेमाल की गई मुद्रा. इसका इस्तेमाल मुद्रा की जांच के लिए किया जाता है.
render यह एक डिक्शनरी है. इसमें उस क्रिएटिव के बारे में बताया गया है जिसे इस बिड के नीलामी जीतने पर रेंडर किया जाना चाहिए. इसमें ये शामिल हैं:
  • url: क्रिएटिव का यूआरएल.
  • width: क्रिएटिव की चौड़ाई. इस साइज़ को दिलचस्पी के हिसाब से बनाए गए ग्रुप में किए गए एलान से मैच किया जाएगा. साथ ही, इसे विज्ञापन क्रिएटिव के यूआरएल में मौजूद किसी भी विज्ञापन साइज़ के मैक्रो में बदला जाएगा. जब विज्ञापन को फ़ेंस्ड फ़्रेम में लोड किया जाता है, तो फ़ेंस्ड फ़्रेम का इनर फ़्रेम (यानी कि विज्ञापन क्रिएटिव को दिखने वाला साइज़) इसी साइज़ पर फ़्रीज़ हो जाएगा. साथ ही, एम्बेड करने वाले व्यक्ति या कंपनी के फ़्रेम के साइज़ में किए गए बदलावों को नहीं देख पाएगा.
  • height: क्रिएटिव की ऊंचाई. width में ज़्यादा जानकारी देखें.

modelingSignals

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


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