Open ShriprasadM opened 3 years ago
I'd like to step back and consider the requirements here, @ShriprasadM . Are you with a Prebid.org member company? Would like to discuss in this week's committee meeting and/or set up set up a separate call. This is not a small feature.
I get that you want to be able to add the quartile events. But does the tracking URL really have to be configurable?
Ideally we could wait on this additional tracking for when we have the modularity design in place. Then it could be a VAST tracking module and you can build whatever you want.
But since that's probably quite a ways out still, here's a counter-proposal that better fits the "Prebid Way" as documented at https://docs.google.com/document/d/1ry0X4C2EV-R0pMrm1IQk9BstxaT395UCl3KKqTGa5c8/edit
1) Account-Level Configuration defines which accounts need which events. We started outlining a more powerful set of configs in https://github.com/prebid/prebid-server/issues/1672.
Here's an example config that could extend easily to all video events:
event-config: [
{eventtype: "firstQuartile", channel: ["*"], mediatype: [“video”], config: {“enabled”: true, "vast": true}},
{eventtype: "midpoint", channel: ["*"], mediatype: [“video”], config: {“enabled”: true, "vast": true}},
{eventtype: "thirdQuartile", channel: ["*"], mediatype: [“video”], config: {“enabled”: true, "vast": true}},
{eventtype: "complete", channel: ["*"], mediatype: [“video”], config: {“enabled”: true, "vast": true}},
]
2) The VAST modification routine scans the account event-config. If it sees an event where config.vast is true, it does the following:
<TrackingEvents>
<Tracking event=”EVENTTYPE”>
<![CDATA[https://PBS_HOST/event?t=EVENTTYPE&b=BIDID&f=b&a=ACCOUNT&ts=TIMESTAMP&bidder=BIDDER&int=INTEGRATION]>
</Tracking>
</TrackingEvents>
3) The player fires the URL to the PBS /event endpoint at the appropriate time.
4) The PBS analytics adapter receives the event and can log it to the appropriate analytics endpoint
There are a couple of aspects of the original proposal either I don't find appealing or maybe I just don't understand them:
Adding @mike-chowla and @dbridges12 as video experts to weigh in on the details of VAST, especially the idea of adding tracking to Wrappers.
Hi @bretg,
Thanks for the feedback on this. @ShriprasadM is an engineer at PubMatic.
I didn't quite follow what the issue is with adding tracking to a VAST wrapper. My understanding is that tracking elements can appear in a wrapper. The VAST that comes back from Prebid bidders is usually the SSP's wrapper with some tracking elements added.
My initial thought is that the trackers would just be fired from the VAST direct instead of being proxied by the PBS but thinking about it some more, I can see the advantage sending them to PBS which can then call events on PBS Analytics adapters.
I've ask Shriprasad if he can attend the PBS PMC meeting to discuss further
@dbridges12 also confirmed that
Thanks, @mike-chowla for an update on this.
Hi @bretg
Here are answers to the questions
Why tracking URL needs to be configurable?
http://prebid.site.com/event
. Here external_url is http://prebid.site.comcallback function
how would PBS-core know which eventTypes to call it for?
We will be introducing new things in /event endpoint as follows | Parameter | Value | Significance |
---|---|---|---|
t | vtrack **(new value) | it will help PBS-core in identifying that its video event tracker call | |
e **(new query param) | [EVENT_ID] ** new PBS macro | It will help PBS-analytics in identifying the video tracker event is for specific quartile. It can have values described in below table. |
Event Name | Event ID for [EVENT_ID] macro |
---|---|
firstQuartile | fq |
midpoint | mp |
thirdQuartile | tq |
complete | cmplt |
http://prebid.site.com/event?t=vtrack&e=mp
(here [EVENT_ID] is replaced with mp
, being its midpoint event tracker)application-level config. App-level default could be ok, but video tracking should be turned on per account.
firstQuartile
, midpoint
, thirdQuartile
and complete
What if there's already a Tracking element for the given event? Do they need to be merged? -
Support for standard macros (Feature)
The framework will support replacing the following standard VAST macros internally. | Standard Macro | Description | Reference |
---|---|---|---|
[ADTYPE] | Type of creative. e.g. video | https://interactiveadvertisingbureau.github.io/vast/vast4macros/vast4-macros-latest.html#macro-spec-adtype | |
[APPBUNDLE] | For app ads, a platform-specific application identifier, bundle or package name and should not be an app store ID such as iTunes store ID | https://interactiveadvertisingbureau.github.io/vast/vast4macros/vast4-macros-latest.html#macro-spec-appbundle | |
[DOMAIN] | Domain of the top level page where the end user will view the ad. | https://interactiveadvertisingbureau.github.io/vast/vast4macros/vast4-macros-latest.html#macro-spec-domain | |
[PAGEURL] | The full URL of the top level page where the end user will view the ad | https://interactiveadvertisingbureau.github.io/vast/vast4macros/vast4-macros-latest.html#macro-spec-pageurl |
Company can override this default macro replacement using the custom macro provider function
. PBS will give priority to use company-defined macro values over its own behavior.
Video Event Tracker Injections Scenarios
Response Type | Framework behavior |
---|---|
InLine VAST XML | Modify the received VAST XML by adding the video event trackers |
Wrapper VAST XML | Modify the received VAST XML by adding the video event trackers |
Vast Tag URL | Generate Wrapper VAST XML containing the Vast TAG URL along with the video event trackers injected |
Questions
event URLs outside of the already-established event structure
Modularity Design - We can check if we can accommodate the current design proposal here.
I want to support the effort to improve video, but it's going to take some more discussion to iron out how to do this - there are several design aspects here I'm concerned about.
You might save us all some time if you wrote out the requirements first, but we made an effort to read between the lines of your more intricate suggestions. Let us know if we got them right.
Please note that this all coming up in the context of us working out a new modular architecture that could accommodate some of these requests.
What does the account stand for? It is company using PBS or partner ?
PBS terminology is that "host company" is the entity that downloads and hosts the server. "Account" is the site.publisher.id or app.publisher.id -- the clients of the host company.
if their trackers are listening on endpoint apart from /event
What this suggests is that a Prebid Server host company should be able to delegate ALL event tracking to a system outside of Prebid Server. You didn't state why, but it must be that you already have an analytics server and you want the player's events to go directly there rather than via PBS.
However, I'm not architecturally comfortable with complete delegation -- i.e. totally overriding the PBS/event URL. The long term vision is that Prebid Server becomes an ecosystem of many modules, some of which may want to receive the video events. This implies two possible approaches:
1) Support the default PBS event URL format in addition to an external custom event URL. i.e. be able to insert multiple
There are obviously tradeoffs here. #1 is more work for the player. #2 is more work coding up the "analytics redirect" module.
t=vtrack
Since there's already a /vtrack endpoint that means something else, I'd suggest just calling this t=vast.
firstQuartile = fq
Why not just pass the full VAST event name in the new 'e' parameter? That seems much cleaner than making up another mapping table. i.e. why not:
/event?t=vast&e=firstQuartile
/event?t=vast&e=midpoint
/event?t=vast&e=thirdQuartile
/event?t=vast&e=complete
/event?t=vast&e=pause
...
If inject_video_event_trackers is true, PBS will inject video event trackers for firstQuartile, midpoint, thirdQuartile and complete
Two thoughts here:
Support for standard macros
We don't understand why PBS needs to deal with macros. This is something the player is supposed to do. Discussing internally and reading between the lines, we're guessing that you want to be able to support players that don't support VAST 4.x macros.
My view is that's rather weird to shove this functionality into Prebid Server core. Seems quite out of place unless we dramatically expand what Prebid Server is thought to be. My preference would be that this kind of boutique feature should be a module that different Prebid Server host companies could decide to utilize or not.
If perhaps it's not a module in the initial implementation, I would request that it be implemented such that it could later be pulled out as a separate module.
Instead of callback we can call it a custom macro provider function
Again, reading between the lines here, I'm guessing that you guys have a bunch of modifications forked off of Prebid Server and this discussion is your effort to standardize some of them. I applaud that effort.
But we have no precedence at all for anything like a host-company-specific block of code. For this aspect of your quest, I would like to suggest that the modularity effort is a perfect match. One intent of the module architecture is that a host company can build proprietary modules in their fork that have well-known and unchanging interfaces into PBS-core.
So I'm hoping that you guys might be able to hold off on at least this last requirement and perhaps help us define/build the more generic modularity feature rather than defining a one-off "macro provider" interface.
@ShriprasadM and @mike-chowla -- I've drafted a counter-proposal at https://docs.google.com/document/d/1iiKnqZjqpnAvtsP3jVyW66hTySLUmgWtl9_7Z9Wx3oM/edit#
I believe this proposal is a fairly clean integration of the current PBS event design that covers almost all of your needs, including non-PBS tracking URLs. It doesn't, however, support a custom macro interface because I think you can just fork it for that until the modularity architecture is ready.
Will send email to see when would be a good time to review and talk through this proposal.
Thanks, @bretg!
This document has been reviewed and is basically ready for implementation. There may be some tweaks to the proposed configuration, so whoever implements in PBS-Go may want to discuss config with @SyntaxNode and @bretg .
PBS-Java will be implementing this as a module after the modularity infrastructure is done. It's fine for an implementor to build this into PBS-Go core, but should do so keeping in mind that it might become a module someday.
Hi @ShriprasadM. Do you still plan to implement this feature for PBS-Go?
Hi @SyntaxNode , Yes. I will update on it after discussing with @mike-chowla
@bretg and @SyntaxNode : here is the Phase I plan. Updating here so that others can be notified. https://docs.google.com/document/d/1zzi06jWpYsvhuiQ_3KCpes0DpmpO2teatmo4V5kIhi0/edit?usp=sharing
https://docs.google.com/document/d/1tMO8J3diZQyKx6_usA0GRIcppVlugYSqVcOEOjX4I9Y/edit?usp=sharing - Macro replacement framework reviewed with Prebid Team. Questions Document - https://docs.google.com/document/d/1tH6I9Vho-_KaUIGNCMum9JwbxHDc0FyG2wD8T-h3wkY/edit?usp=sharing
@ShriprasadM - where are we with VAST events in PBS-Go?
To enable company hosting prebid-server to inject their Video Event Trackers in the winning bids.
NOTE: Please provide feedback on this proposal. We are ready to contribute
Benefits of having it in Prebid Server
Proposal
video_tracking_url
- This will contain the base tracker URL along with all the required parameters with value as macro. e.g.PBS will inject the Video event trackers in each VAST bid as follows (After auction *** - check the last paragraph of the proposal)
Checks if the bid's bidder config allows modifying VAST XML for event tracking
PBS will obtain the template video event tracking URL from
video_tracking_url
from the exchangeNew call back function will be called to replace all the macros present in
video_tracking_url
New call back function will have the following structure
No Injection - If the above function return
nil
or empty map then PBS will not inject tracker for the event typecallBackFuntion
will be called per eventType. Right now we can support for following video event trackersSample Code Snippet
*** Current tracker module inject trackers, optionally, before the auction. It can be optimized by moving it after the auction. Because in the case of ad pod, it can be expensive to parse and inject trackers for each adaptor bid. Instead, we can inject trackers only for winning bids.