prebid / prebid-server

Open-source solution for running real-time advertising auctions in the cloud.
https://prebid.org/product-suite/prebid-server/
Apache License 2.0
431 stars 739 forks source link

Understanding Bid Request Timeout in Prebid Server and Google MCM Tag Support #2975

Closed Shaharbad closed 1 year ago

Shaharbad commented 1 year ago

Hey everyone,

I'm planning on starting my own Prebid Server, but before that, I have 2 questions:

Regarding the bid requests, I know that I can set them to be saved in the cache for more than an hour. How can I ensure the demand won't timeout on me? For instance, let's say I created a VMAP for a 2-hour movie with postroll. Won't the bid requests expire before we reach the postroll?

Is Google MCM (Multiple Customer Management) tags supported in Prebid Server? Are there any special settings I need to take to achieve this?

Thanks.

hhhjort commented 1 year ago

Prebid server handles collecting the bids from the demand partners. It needs something client side to generate the request. This could be Prebid.JS, The prebid mobile SDK, or some other client side element. The only direct support for something like this is the AMP endpoint. I am not familiar enough with the client side parts to say if there is any explicit support for Google MCM. There may be a solution out there somewhere.

bretg commented 1 year ago

Regarding the bid requests, I know that I can set them to be saved in the cache for more than an hour. How can I ensure the demand won't timeout on me?

You con't control when bid responses timeout. OpenRTB allows bidders to define the seatbid.bid.exp parameter which is "the number of seconds the bidder is willing to wait between the auction and the actual impression."

If Prebid Server doesn't already cap the cache time by this value, it should. Will bring up the issue with both PBS-Go and PBS-Java to make sure we're doing the right thing here.

So from your side, if this is an issue, you should look at seatbid.bid.exp. In general I would not recommend assuming a bid is going to say around for 2 hours. At any kind of volume, storing bids in the cache for that long could be costly.

Is Google MCM (Multiple Customer Management) tags supported in Prebid Server?

I think you may be misunderstanding MCM. That appears to be simply a way for an AdOps service company to manage many client GAM/AdMob accounts. The 'tags' are just regular GPT tags but referring to a 'parent' account.

FWIW, Prebid Server will never directly support GPT, OB, or any other vendor-specific interface. You are welcome to build a front-end server that handles whatever's needed and translates it to PBS-flavored OpenRTB.

bretg commented 1 year ago

Closing -- we'll check out the bidder-specified cache expiration issue in https://github.com/prebid/prebid-server/issues/2980

Shaharbad commented 1 year ago

Hello again and @bretg thanks for the answer.

I've seen this: https://docs.prebid.org/adops/step-by-step.html and was wondering if working with Google tags as a demand partner is possible?

bretg commented 1 year ago

I've seen this: https://docs.prebid.org/adops/step-by-step.html and was wondering if working with Google tags as a demand partner is possible?

Google has thus far refused to be a demand partner in Prebid. And even if they agreed, it would be as an adapter, not via tags.

Shaharbad commented 1 year ago

@bretg So how would you approach using Google as an adpater? When each tag has to get a unique nonce string in the url as seen in https://developers.google.com/ad-manager/pal/roku

bretg commented 1 year ago

how would you approach using Google as an adpater?

You cannot.

Perhaps you should review the high level overviews at https://docs.prebid.org/overview/intro.html to get a reminder for how Prebid works with relation to the ad server.

Recall that header bidding is an approach to:

  1. pause regular in-page ad calls
  2. obtain bids from the open market
  3. pass those bids through to your ad server
  4. where line items set up in the ad server can be triggered to compete with other line items
Shaharbad commented 1 year ago

Thank you @bretg, can you tell me if this following information i gathered is correct?

Bid Request Expiration (Prebid): The default bid request expiration limit in Prebid Server is 10 seconds. This means that if a demand partner does not respond to a bid request within 10 seconds, the request will expire and no bids will be received. The expiration limit can be configured in the Prebid Server settings. To configure the bid request expiration limit, you need to edit the prebid.config.js file.

Bid Response Expiration (Prebid): The bidder defines it. This is specified by the seatbid.bid.exp parameter in the OpenRTB bid response. The default value for this parameter is 10 seconds. (Not configurable by Prebid Server owner)

Impression Expiration (Prebid): This is specified by the imp.exp parameter in the OpenRTB impression. The default value for this parameter is 1 hour. (Not configurable by Prebid Server owner)

bretg commented 1 year ago

Bid Request Expiration

This is the $.tmax value in OpenRTB. These values are set by the Prebid Server host company in the config. I don't know what the default values are. You can check the code.

For PBS-Java the config values are: auction.max-timeout-ms - maximum operation timeout for OpenRTB Auction requests. Deprecated. auction.biddertmax.min - minimum operation timeout for OpenRTB Auction requests. auction.biddertmax.max - maximum operation timeout for OpenRTB Auction requests. auction.biddertmax.percent - adjustment factor for request.tmax for bidders. auction.tmax-upstream-response-time - the amount of time that PBS needs to respond to the original caller.

Bid Response Expiration

This is$.seatbid.bid.exp. Prebid Server currently ignores it. See https://github.com/prebid/prebid-server/issues/2980

If the creative is cached by PBS, it's defined by host company configuration:

For PBS-Java the config values are: cache.banner-ttl-seconds - how long (in seconds) banner will be available via the external Cache Service. cache.video-ttl-seconds - how long (in seconds) video creative will be available via the external Cache Service. cache.account..banner-ttl-seconds - how long (in seconds) banner will be available in Cache Service for particular publisher account. Overrides cache.banner-ttl-seconds property. cache.account..video-ttl-seconds - how long (in seconds) video creative will be available in Cache Service for particular publisher account. Overrides cache.video-ttl-seconds property.

Again, I don't know what the overall defaults are. Check the code.

Impression Expiration

$.imp[].exp is not used by Prebid in any way. It's passed through to bidders who are free to use it.

Shaharbad commented 1 year ago

@bretg thank for the response again, and sorry for these beginner questions.

However, I still cant figure our the following:

  1. You said I can check and change the bid request timeout in the config.go file, however, i couldnt find there where do check the $.tmax value, what am i missing?
  2. How is that possible that Prebid ignores it? If theres a bid response from a demand partner and he set a timeout expiration of 10 seconds, i'd asssume you can't do anything about that.
bretg commented 1 year ago

$.tmax comes in on the openrtb request. You don't set it in the server.

How is that possible that Prebid ignores it? If theres a bid response from a demand partner and he set a timeout expiration of 10 seconds, i'd asssume you can't do anything about that.

It's a bug, but one that's been in the system for 7 years that no one ever reported as an issue. I just happened to find it as part of this thread.

The fix on our side will be to cap the PBS configured cache length with the buyer-provided seatbid.bid.exp. We don't currently consider it high priority because it's been around since the beginning.

Shaharbad commented 1 year ago

$.tmax comes in on the openrtb request. You don't set it in the server.

How is that possible that Prebid ignores it? If theres a bid response from a demand partner and he set a timeout expiration of 10 seconds, i'd asssume you can't do anything about that.

It's a bug, but one that's been in the system for 7 years that no one ever reported as an issue. I just happened to find it as part of this thread.

The fix on our side will be to cap the PBS configured cache length with the buyer-provided seatbid.bid.exp. We don't currently consider it high priority because it's been around since the beginning.

Thank you, Bret. This was very helpful! I heard that the /openrtb2/video endpoint will be deprecated soon. Does using /openrtb2/auction support long-form video content for CTV (Roku, FireTV, etc.)? I also once read that /auction doesn't support ad podding

bretg commented 1 year ago

I heard that the /openrtb2/video endpoint will be deprecated soon.

Not sure how "soon" -- certainly not until the main /auction endpoint supports the same features.

Does using /openrtb2/auction support long-form video content for CTV (Roku, FireTV, etc.)? I also once read that /auction doesn't support ad podding

ORTB 2.6 requests with podding structures are passed through the /auction endpoint. But Prebid Server doesn't currently do any special processing for /auction endpoint pods like it does for the /video endpoint: competitive exclusion and category mapping.