TURTLEDOVE RTB सिम्युलेशन एपीआई

प्राइवसी सैंडबॉक्स के हिस्से के तौर पर, Chrome ने TURTLEDOVE का सुझाव दिया. यह एक इन-ब्राउज़र एपीआई है. इसका मकसद, विज्ञापन देने वालों और विज्ञापन टेक्नोलॉजी की कंपनियों को, दिलचस्पी के हिसाब से टारगेट किए गए विज्ञापन दिखाने की अनुमति देना है. इसके लिए, तीसरे पक्ष की कुकी का इस्तेमाल नहीं किया जाता. इस तरह, क्रॉस-साइट ट्रैकिंग से उपयोगकर्ताओं को बचाया जा सकता है. TURTLEDOVE को लागू करने से पहले, Google RTB टीम सर्वर-साइड TURTLEDOVE एपीआई सिम्युलेशन ऑफ़र करती है. इससे RTB पार्टनर (Authorized Buyers और ओपन बिडिंग पार्टनर) एपीआई के साथ प्रयोग कर पाते हैं. सिम्युलेशन से पार्टनर और Google को यह पता चलता है कि TURTLEDOVE-स्टाइल का फ़्लो कितना असरदार है. साथ ही, इससे सार्वजनिक फ़ोरम में संभावित एपीआई सुधारों के बारे में काम के सुझाव मिल पाते हैं. साथ ही, लोगों के हिसाब से विज्ञापन दिखाने की प्रोसेस में आसानी होती है और तीसरे पक्ष की कुकी पर भरोसा नहीं होता.

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

सिम्युलेशन के पहले चरण में, Google दिलचस्पी के हिसाब से अनुरोधों के लिए, पहचान बदलकर के उपयोगकर्ता आईडी भेजता है. इसका मकसद दोनों तरफ़ से लागू करने की प्रक्रिया को कम करना है, ताकि हम प्रयोग को तुरंत शुरू कर सकें. दिलचस्पी के हिसाब से किए गए अनुरोधों में, उपयोगकर्ता आइडेंटिफ़ायर की मौजूदगी, मौजूदा निजता सुरक्षा और कंट्रोल के तहत होगी (जैसे कि जब उपयोगकर्ता लोगों के हिसाब से दिखाए जाने वाले विज्ञापन से ऑप्ट आउट करता है).

फ़्लो

फ़्लोचार्ट

  1. RTB बिडर विज्ञापन देने वालों के साथ मिलकर काम करता है, ताकि उन इंटरेस्ट ग्रुप में, विज्ञापन देने वाले हर व्यक्ति और उपयोगकर्ता की सदस्यता के लिए, इंटरेस्ट ग्रुप बनाए जा सकें, उनका रखरखाव कर सकें, और उन्हें होस्ट कर सकें.
  2. जब उपयोगकर्ता किसी पब्लिशर के वेबपेज पर जाता है, तो उसका ब्राउज़र Google का विज्ञापन टैग डाउनलोड करेगा. उपयोगकर्ता का ब्राउज़र, Google पब्लिशर प्लैटफ़ॉर्म से विज्ञापन का अनुरोध करता है.
  3. Google को समय के साथ (यानी JavaScript फ़ंक्शन के रूप में) आरटीबी बोली लगाने वाला एक या एक से ज़्यादा बोली लगाने के फ़ंक्शन देता है. (बिडिंग फ़ंक्शन सेक्शन देखें).
  4. प्रयोग के दायरे में अनुरोधों के छोटे से हिस्से के लिए, Google प्रयोग में हिस्सा लेने वाले हर बोली लगाने वाले को अलग-अलग बोली अनुरोध और बोली के आधार पर अलग-अलग अनुरोध भेजता है. (सेक्शन देखें: बोली अनुरोध देखें).
  5. बिड करने वाला, इंटरेस्ट ग्रुप के बिड रिक्वेस्ट में मौजूद पहचान बदलकर बनाए गए उपयोगकर्ता आईडी का इस्तेमाल करता है और उसे उन इंटरेस्ट ग्रुप में मैप करता है. आरटीबी बोली लगाने वाला व्यक्ति, काम के बोली जवाब और दिलचस्पी के हिसाब से बोली का जवाब देगा. सेक्शन देखें: बोली के जवाब.
    1. प्रासंगिक बोली जवाब शून्य या ज़्यादा प्रासंगिक बोलियों के साथ आज की बोली प्रतिक्रिया के समान होंगे; इसके अलावा, प्रासंगिक बोली प्रतिक्रिया बोली लगाने वाले कस्टम संदर्भ संकेत ले जा सकते हैं, जो इनपुट फ़ंक्शन के रूप में बोली लगाने के फ़ंक्शन को दिए जाएंगे.
    2. रुचि-आधारित बोली जवाबों में कोई बोली नहीं बल्कि बोली प्रक्रिया का नाम बताया जाएगा. बोली लगाने के लिए, Google बोली लगाने का फ़ंक्शन लागू करेगा.
  6. Google, इन उम्मीदवारों से सर्वर-साइड नीलामी चलाता है:

    1. प्रासंगिक जवाब की बोलियां.
    2. बोली लगाने की सुविधा का इस्तेमाल करके, इंटरेस्ट ग्रुप के रिस्पॉन्स के आधार पर बिड की कीमत तय की जाती है.
    3. अन्य बोली लगाने वालों की सामान्य बोलियां.

    ध्यान दें कि यह वही नीलामी है जिसमें आज हो रही है.

  7. Google, उपयोगकर्ता के ब्राउज़र को एक आकर्षक विज्ञापन दिखाता है, जो आम तौर पर दिखता है.

बोली लगाने के फ़ंक्शन

बिडिंग फ़ंक्शन, बोली लगाने वाले ऐसे फ़ंक्शन से मिलते हैं जो किसी इंटरेस्ट ग्रुप पर आधारित विज्ञापन और विज्ञापन स्लॉट के लिए बोली की वैल्यू दिखाते हैं . मूल TURTLEDOVE प्रस्ताव में, इस फ़ंक्शन को उपयोगकर्ता के ब्राउज़र में सेव किया जाएगा. इस सिम्युलेशन में, बोली लगाने वाले लोग, विज्ञापन दिखाए जाने से पहले एपीआई का इस्तेमाल करके, बोली लगाने के फ़ंक्शन को Google पर अपलोड करेंगे. विज्ञापन देने के दौरान, इंटरेस्ट ग्रुप के रिस्पॉन्स में बिडिंग फ़ंक्शन का नाम दिखेगा. बोली लगाने के लिए Google सैंडबॉक्स की गई सुविधा में, बोली लगाने के इस फ़ंक्शन का इस्तेमाल करेगा. रुचि-आधारित बोली मान उसी नीलामी में जाएगा, जो प्रासंगिक बोली में है.

बिडिंग फ़ंक्शन का इंटरफ़ेस

बिडिंग फ़ंक्शन, JavaScript में लागू किया जाने वाला एक ऐसा किफ़ायती फ़ंक्शन होना चाहिए जो सीधे तौर पर काम न करे. यह फ़ंक्शन, एक्सचेंज से मिले सैंडबॉक्स में चलेगा. बिडिंग फ़ंक्शन के पास नेटवर्क, स्टोरेज या I/O के दूसरे तरीकों का ऐक्सेस नहीं होता. साथ ही, यह बोली के अलग-अलग अनुरोधों के लिए, शुरू किए जाने के बीच किसी भी स्थिति को बनाए नहीं रख सकता. बिडिंग फ़ंक्शन, काम के डेटा और इंटरेस्ट ग्रुप के डेटा के कॉम्बिनेशन के आधार पर, किसी विज्ञापन कैंडिडेट के लिए बिडिंग की कीमत के सीपीएम का हिसाब लगाता है.

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

/**
 * Returns a bid price CPM for a given ad candidate.
 *
 * @param {Object} inputs an object with the
 *                 following named fields:
 *                   - openrtbContextualBidRequest or googleContextualBidRequest
 *                   - customContextualSignal
 *                   - interestBasedBidData
 */
function biddingFunction(inputs) {
  ...
  return inputs.interestBasedBidData.cpm
      * inputs.customContextualSignals.placementMultiplier;
}

inputs ऑब्जेक्ट के आर्ग्युमेंट में, नाम वाले फ़ील्ड शामिल होते हैं (प्रयोग के आगे बढ़ने पर, इनमें बदलाव हो सकता है):

openrtbContextualBidRequest (JS ऑब्जेक्ट) OpenRTB प्रोटोकॉल में प्रासंगिक बोली अनुरोध. Authorized Buyers आरटीबी प्रोटोकॉल का इस्तेमाल करने वाले बोली लगाने वालों को, इस इनपुट पर ध्यान नहीं देना चाहिए. साथ ही, बोली लगाने के फ़ंक्शन में इसका इस्तेमाल नहीं करना चाहिए.
googleContextualBidRequest (JS Object) Google Authorized Buyers प्रोटोकॉल में काम के बोली अनुरोध. OpenRTB प्रोटोकॉल का इस्तेमाल करने वाले बोली लगाने वालों को, इस इनपुट पर ध्यान नहीं देना चाहिए. साथ ही, बोली लगाने के फ़ंक्शन में इसका इस्तेमाल नहीं करना चाहिए.
customContextualSignal (JS ऑब्जेक्ट) कस्टम डेटा, जो बोली लगाने वाले को संदर्भ के हिसाब से मिलता है. बोली लगाने वाला व्यक्ति, फ़ॉर्मैट तय करता है.
interestBasedBidData (JS ऑब्जेक्ट) पसंद के मुताबिक ग्रुप के रिस्पॉन्स में, बिड करने वाले से मिला कस्टम डेटा. बोली लगाने वाला व्यक्ति, फ़ॉर्मैट तय करता है.

एपीआई के ज़रिए बोली लगाने के फ़ंक्शन मैनेज करना

इस प्रयोग वाले एपीआई संसाधन की मदद से, बोली लगाने वाले लोग Google पर बोली लगाने के फ़ंक्शन अपलोड कर सकते हैं और इन फ़ंक्शन को मैनेज कर सकते हैं.

बेस सर्विस एंडपॉइंट: https://realtimebidding.googleapis.com

संसाधन: बिडिंग फ़ंक्शन

{
  "name": string,
  "biddingFunction": string
}

name फ़ील्ड, बिडिंग फ़ंक्शन का नाम दिखाता है. इस फ़ॉर्मैट का पालन करना चाहिए: bidders/{bidderAccountId}/biddingFunctions/{biddingFunctionName}, जहां बोली लगाने वाले को biddingFunctionName चुना जाता है.

फ़ील्ड biddingFunction, नीचे दी गई शर्तों के साथ बोली लगाने के फ़ंक्शन का JavaScript सोर्स कोड है:

  • साइज़ 5 एमआईबी.
  • बिडिंग फ़ंक्शन के इंटरफ़ेस की ज़रूरी शर्तों को पूरा करता है.
  • सैंडबॉक्स में शुरुआती बनने के दौरान, किसी भी इनपुट के बिना एक्ज़ीक्यूशन की सुविधा होनी चाहिए.

उदाहरण:

{
  "name": "bidders/1234567678/biddingFunctions/my_bidding_function_name",
  "biddingFunction": "(function(inputs) {return 1.23;})"
}

बिडिंग फ़ंक्शन बनाना

बिडिंग फ़ंक्शन के इस्तेमाल के पूरा होने के करीब एक घंटे के अंदर, इंटरेस्ट ग्रुप के रिस्पॉन्स में बिडिंग फ़ंक्शन का इस्तेमाल किया जा सकेगा.

POST https://realtimebidding.googleapis.com/v1alpha/{parent=bidders/*}/biddingFunctions
पाथ पैरामीटर
parent bidders/{bidderAccountId} फ़ॉर्मैट में स्ट्रिंग
Body: बनाने के लिए बोली लगाने का फ़ंक्शन
{
  "name": "bidders/1234567678/biddingFunctions/my_bidding_function_name",
  "biddingFunction": "(function(inputs) {return 1.23;})"
}
जवाब (बिडिंग फ़ंक्शन)
{
  "name": "bidders/1234567678/biddingFunctions/my_bidding_function_name",
  "biddingFunction": "(function(inputs) {return 1.23;};)"
}

बिडिंग के मौजूदा फ़ंक्शन की सूची

GET https://realtimebidding.googleapis.com/v1alpha/bidders/{bidderAccountId}/biddingFunctions
पाथ पैरामीटर
parent bidders/{bidderAccountId} फ़ॉर्मैट में स्ट्रिंग.
क्वेरी पैरामीटर
pageToken स्ट्रिंग टोकन से उन नतीजों के पेज की पहचान होती है जिन्हें सर्वर को दिखाना चाहिए. अगर कोई नतीजा एक पेज पर फ़िट नहीं होता है, तो यह नतीजा पिछले ListBiddingFunctions कॉल के दौरान मिला है.
जवाब
{
  "biddingFunctions": [
    {
      object (BiddingFunction)
    }
  ],
  "nextPageToken": string
}
कॉल का उदाहरण
GET https://realtimebidding.googleapis.com/v1alpha/bidders/123456789/biddingFunctions

TURTLEDOVE सिम्युलेशन आरटीबी प्रोटोकॉल में बदलाव

Authorized Buyers RTB प्रोटोकॉल

बोली अनुरोध

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

// All fields will be filled unless otherwise specified.
message BidRequest {
  // Fields below would not be populated in the experiment
  optional string google_user_id = ...;
  optional uint32 cookie_version = ...;
  optional int32 cookie_age_seconds = ...;
  optional bytes hosted_match_data = ...;
  optional string session_id = ...;

  // Contextual fields below will be populated
  optional string publisher_id = ...;
  optional string url = ...;
  ...
  message Mobile {
    // Device advertising identifiers below would not be populated
    // in the contextual requests in the experiment
    optional bytes encrypted_advertising_id = ...;
    optional bytes advertising_id = ...;
    ...
    optional bytes encrypted_hashed_idfa = ...;
    optional bytes hashed_idfa = ...;
    ...
  }
  ...
  message AdSlot {
    message MatchingAdData {
      repeated int64 billing_id = ...;
      ...
    }
    ...
  }
  repeated AdSlot adslot = ...;
  ...
}

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

{
  id: "_\321\326\000\n\301\207\n\323\n\227",
  ip: "S\030\347",
  user_agent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
  publisher_country: "RU",
  geo_criteria_id: 9061060,
   adslot: [{
    id: 1,
    ad_block_key: 3613182520,
    width:   [240,200,120],
    height:   [400,200,240],
    matching_ad_data:   [{
      billing_id:     [923487589],
      minimum_cpm_micros: 850000
    }]
  }]
}

प्रयोग में, दिलचस्पी के हिसाब से किए जाने वाले अनुरोध में, उपयोगकर्ता की पहचान से जुड़े ऐसे नकली पहचानकर्ता शामिल होंगे जो पहचान की पुष्टि करने वाले मौजूदा नियम और शर्तों से जुड़े होते हैं. हालांकि, इनमें काम की जानकारी शामिल नहीं होगी. जैसे, पेज का यूआरएल, पब्लिशर का आईडी वगैरह.

// Most fields would not be populated in the experiment unless otherwise specified.
message BidRequest {
   // Will be provided, subject to the existing privacy controls.
  optional string google_user_id = ...;
  optional uint32 cookie_version = ...;
  optional int32 cookie_age_seconds = ...;
  optional bytes hosted_match_data = ...;

  message AdSlot {
    // Will be filled.
    repeated int32 width = ...;
    repeated int32 height = ...;
    optional ConsentedProvidersSettings consented_providers_settings = ...;
    optional bool regs_gdpr = ...;
    optional bool regs_lgpd = ...;

    message MatchingAdData {
      // Will be filled.
      repeated int64 billing_id = ...;
      ...
    }
    ...
  }
  repeated AdSlot adslot = ...;
  ...
}

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

id: "_\322\207\000\003\320\n\031\177C\307\215\035"
adslot {
  id: 1
  width: 1200
  height: 60
  consented_providers_settings {
    consented_providers: 292
    tcf_consent_string: "CO-eDrRO-eDrREkAAAAAAAAeYwf95y3p-wzhheMCY70-vv__7v3ff_3g"
  }
  regs_gdpr: true
  matching_ad_data {
    billing_id: 9833784997
  }
}
google_user_id: "ABCDEF1"
hosted_match_data: "ABCABCABC2"

बोली के जवाब

कीवर्ड के हिसाब से बोली के जवाब में, पसंद के मुताबिक बोली लगाने वाला खास डेटा शामिल हो सकता है. यह डेटा, आर्बिट्रेरी फ़ॉर्मैट में दिया जा सकता है, जो बोली लगाने के फ़ंक्शन में बाद में भेजा जाएगा.

message BidResponse {
  message Ad {
    message AdSlot {
      required int64 max_cpm_micros = ...;
      ...
    }
    repeated AdSlot adslot = ...;
    ...
  }
  repeated Ad ad = ...;
  // Contains contextual signals that will be passed to the bidding function.
  // This can be any JSON value. For example:
  // {"foo": "bar", "base": [1, 2, 3]}
  optional google.protobuf.Value custom_contextual_signal = ...;

  ...
}

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

ad {
  html_snippet: "<iframe src=\"http://example.com/something" width=\"300\" height=\"250\" scrolling=\"no\" frameBorder=\"0\" ></iframe>"
  adslot {
    id: 1
    max_cpm_micros: 100000
    billing_id: 1234567890
  }
  click_through_url: "https://www.example.com.pl"
  attribute: 47
  buyer_creative_id: "FFI399F3HI9HFH"
  width: 300
  height: 250
  impression_tracking_url: "http://example.com/impression"
}
custom_contextual_signal {
 struct_value {
   fields {
     name: "string_data_name"
     value {
       string_value: "string_value_1"
     }
   }
   fields {
     name: "bool_data_name"
     value {
       bool_value: true
     }
   }
 }
}
processing_time_ms: 1

एक रुचि समूह-आधारित बोली

रुचि समूह बोली प्रतिक्रिया में मौजूद हर बोली में उसके नाम के आधार पर बोली प्रक्रिया फ़ंक्शन का संदर्भ होगा. बिडिंग फ़ंक्शन, बिडिंग से पहले दिए जाएंगे.

// All fields should be filled by a bidder as discussed in
// https://developers.google.com/authorized-buyers/rtb/response-guide
// unless otherwise specified.
message BidResponse {
  // Ad HTML code that will be rendered normally upon winning.
  optional string html_snippet = ...;

  message Ad {
    message AdSlot {
      // Should not be populated for interest group-based bids.
      required int64 max_cpm_micros = ...;
      ...
    }
    repeated AdSlot adslot = ...;

    // Will be filled.
    // This is the bidding function name that references a bidding function
    // that is provided ahead of time through Bidding functions API resource.
    optional string bidding_function_name = ...;

    // Contains interest group-related data that will be passed
    // to the bidding function. This can be any JSON value.
    optional google.protobuf.Value interest_group_data = ...;
    ...
  }
  repeated Ad ad = ...;
  ...
}

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

ad {
  html_snippet: "<iframe src=\"http://example.com/something" width=\"300\" height=\"250\" scrolling=\"no\" frameBorder=\"0\" ></iframe>"
  adslot {
    id: 1
    max_cpm_micros: 0
    billing_id: 1234567890
    bidding_function_name: "bidders/123/biddingFunctions/my_bidding_function_1"
    interest_group_data {
      struct_value {
        fields {
          name: "string_data_name"
          value {
            string_value: "string_value_1"
          }
        }
        fields {
          name: "bool_data_name"
          value {
            bool_value: true
          }
        }
      }
    }
  }
  click_through_url: "https://www.example.com.pl"
  attribute: 47
  buyer_creative_id: "FFI399F3HI9HFH"
  width: 300
  height: 250
  impression_tracking_url: "http://example.com/impression"
}
processing_time_ms: 1

OpenRTB

बोली अनुरोध

प्रासंगिक अनुरोध (JSON में)
// All fields will be filled unless otherwise specified.
{
  // Fields below would not be populated in the experiment
  "user": {...}

  "device": {
    // Fields below would not be populated in the experiment
    "ifa": ...
    "dpidsha1": ...
    "dpidmd5": ...


    // Other fields will not be affected by the experiment
    ...
  }

  // Other fields will not be affected by the experiment
  ...
}
दिलचस्पी के हिसाब से अनुरोध (JSON में)
// Most fields would not be populated in the experiment unless otherwise specified.
{
  // Will be provided, subject to the existing privacy controls.
  "user": {
    "id": "BFEUKH3"
    "buyeruid": "FEI3F3I29"
    "ext": {
      "consented_providers": [ 292 ]
      "tcf_consent_string": "CO-eDrRO-eDrREkAAilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"
    }
  }

  "imp": {
    // Will be provided, subject to the existing privacy controls.
    "banner": {
      "w": ...
      "h": ...
    }

    "ext": {
      // Will be provided, subject to the existing privacy controls.
      "billing_id": [...]

      // Other fields will not be provided by the experiment
      ...
    }
  }
}

बोली के जवाब

कीवर्ड के हिसाब से बोली के जवाब में, बोली लगाने वाला कोई खास डेटा शामिल हो सकता है. यह डेटा, बिडिंग फ़ंक्शन में भेजा जाएगा.

// All fields should be filled by a bidder as discussed in
// https://developers.google.com/authorized-buyers/rtb/response-guide
// unless otherwise specified.
{
  ...
  "seatbid": [{
     "bid": [...],
     ...
  }],
  ...
  "ext": {
    // Contains contextual signals that will be passed to the bidding function.
    // This signal can be any JSON blob. For example:
    // {"foo", "bar", "base": [1, 2, 3]}
    "custom_contextual_signal": ...
  }
}

रुचि समूह पर आधारित बोली प्रतिक्रिया

रुचि समूह बोली प्रतिक्रिया में मौजूद हर बोली में उसके नाम के आधार पर बोली प्रक्रिया फ़ंक्शन का संदर्भ होगा. बिडिंग फ़ंक्शन, बिडिंग से पहले दिए जाएंगे.

// All fields should be filled by a bidder as discussed in
// https://developers.google.com/authorized-buyers/rtb/response-guide
// unless otherwise specified.
{
  "bid": [{
       "id": ...
       ...
       "ext": {
         // This is the bidding function name that references a bidding function
         // that is provided ahead of time through Bidding functions API resource.
         "bidding_function_name": ...

         // Contains interest group related data that will be passed to the
         // bidding function.
         // This signal can be any JSON blob. For example:
         // {"foo", "bar", "base": [1, 2, 3]}
         "interest_group_data": ...
       }
    }
    ...
  ]
}