Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PAAPI: add support for protected audience extensions and "direct" buyers (igb) #11277

Merged
merged 23 commits into from
Jun 3, 2024

Conversation

dgirardi
Copy link
Collaborator

@dgirardi dgirardi commented Apr 1, 2024

Type of change

  • Feature

Description of change

This adds support for the ORTB protected audience extensions:

  • when PAAPI is enabled, bid requests' ortb2Imp.ext.igs is populated (similar and in addition to ext.ae)
  • bid adapters can reply with buyers (igb) objects in additon to auction configs (config). The fledgeAuctionConfigs response property is migrated to paapi. for example:
      // current response from interpetResponse, returning an auction config
     return {bids: [...], fledgeAuctionConfigs: [{bidId: 'xxx', config: {...}}]}
    
     // equivalent to the above, using `paapi`
     return {bids: [...], paapi: [{bidId: 'xxx', config: {...}}]}
    
     // return a buyer (igb) object instead of a full auction config
     return {bids: [...], paapi: [{bidId: 'xxx', igb: {...}}]}
    
  • ortbConverter can now parse responses' ext.igi to generate a paapi array.
  • publishers can set up auctions to run igb with:
     pbjs.setConfig({
        paapi: {
           enabled: true,
           componentSeller: {
              auctionConfig: {
                    decisionLogicURL: 'publisher.example'
                    // ...
              }
           }
        }
     })
    
  • if paapi.componentSeller.auctionConfig is set, we attempt to collect all IGB objects into a single auction config, which is then treated like any other auction config for the purpose of getPAAPIConfig/setPAAPIConfigForGPT.
  • it's possible for IGB objects to be incompatible with each other (same origin, different signals). In this case we split the conflicts into a second (or third, etc) auction config.
  • Because IGB objects come from different adapters, and first-party data (ortb2/ortb2Imp) can vary by adapter, auction configs generated from IGB have it set in perBuyerSignals instead of auctionSignals. "Normal" auction configs also have first party data repeated in perBuyerSignals, for consistency.
  • Instead of one auction config (minus conflicts), it's possible to generate one for each bidder with
     pbjs.setConfig({
         paapi: {
             enabled: true,
             componentBuyers: {
                  separateAuctions: true,
                  auctionConfig: {/* ... */}
             }
         }
     })
    
    In this case, auctionSignals is populated with first party data as usual.

Other information

Closes #11131
Closes #11094

@dgirardi dgirardi changed the title PAAPI: add ortbConverter support for ext.igi PAAPI: add protected audience extension and "direct" buyer (igb) support Apr 8, 2024
@dgirardi dgirardi changed the title PAAPI: add protected audience extension and "direct" buyer (igb) support PAAPI: add support for protected audience extensions and "direct" buyers (igb) Apr 8, 2024
@dgirardi
Copy link
Collaborator Author

Summary of PMC feedback:

  • componentBuyers config should be renamed to componentSeller
  • bidders should get a signal that tells them whether the publisher can set up a component seller (bidRequest.paapi.componentSeller ?)

@rdgordon-index
Copy link

when PAAPI is enabled, bid requests' ortb2Imp.ext.igi is populated (similar and in addition to ext.ae)

Shouldn't this be BidRequest.imp.ext.igs ?

@dgirardi
Copy link
Collaborator Author

Shouldn't this be BidRequest.imp.ext.igs ?

Yes. It looks like I used the right field in code but not the description.

@lksharma lksharma self-requested a review April 25, 2024 18:35
@pm-harshad-mane
Copy link
Contributor

@jlquaccia please review the PR

deepSetValue(bidReq, 'ortb2Imp.ext.ae', bidAe);
bidReq.ortb2Imp.ext.igs = Object.assign({
ae: bidAe,
biddable: 1
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noticed on https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/Protected%20Audience%20Support.md, it states that the biddable field is 0 by default (indicating a buyer is not allowed). Also saw in the prebid "fledge" slack channel (about a month back) that the biddable field default may get reversed to 1 instead. Is there an update on the latest around this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AFAIK there's no concrete plan for the spec to change.

Copy link
Collaborator

@patmmccann patmmccann May 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found this default in the spec a strange choice as well, however, Prebid can default to a different value than a dsp should interpret a result with a missing value. A dsp should consider biddable null as non-biddable, we'll always pass 1, bc we consider these requests worthwhile. What a dsp should consider biddable null to mean doesn't impact what field we should choose to pass.

@dgirardi dgirardi requested a review from mkomorski May 21, 2024 14:56
@patmmccann patmmccann merged commit 0ee4efd into prebid:master Jun 3, 2024
4 checks passed
DecayConstant pushed a commit to mediavine/Prebid.js that referenced this pull request Jul 18, 2024
…ers (`igb`) (prebid#11277)

* set ortb2Imp.ext.igs

* PAAPI: add ortbConverter support for request ext.igi and response ext.igi.igs

* Update paapi hook to accept auction config as one field

* mergeBuyers

* partitionBuyers

* add fpd to perBuyerSignals

* complete igb treatment

* improve names

* parse ext.igi.igb

* naming improvement

* update debugging mod to work with igb

* fix mergeBuyers to work with actual URL origins

* rename componentBuyers to componentSeller

* signal componentSeller config to bid adapters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Paapi module: support for standard interest groups object(s) PAAPI Module: accumulate perBuyerSignals
8 participants