AdCOM Fields Added For OpenRTB 2.6 Parity

This commit is contained in:
Scott Kay
2022-05-12 23:33:01 -04:00
parent 4b4474f897
commit b3b9d66158
24 changed files with 565 additions and 14 deletions
+13
View File
@@ -0,0 +1,13 @@
package adcom1
// AgentType identifies the user agent types a user identifier is from.
type AgentType int
// Agent types dewscribing where the user agent is from.
//
// Values of 500+ hold vendor-specific codes.
const (
ATypeWeb AgentType = 1 // An ID which is tied to a specific web browser or device (cookie-based, probabilistic, or other).
ATypeApp AgentType = 2 // In-app impressions, which will typically contain a type of device ID (or rather, the privacy-compliant versions of device IDs).
ATypePerson AgentType = 3 // A person-based ID, i.e., that is the same across devices.
)
+9 -7
View File
@@ -7,11 +7,13 @@ type APIFramework int
//
// Values of 500+ hold vendor-specific codes.
const (
APIVPAID1 APIFramework = 1 // VPAID 1.0
APIVPAID2 APIFramework = 2 // VPAID 2.0
APIMRAID1 APIFramework = 3 // MRAID 1.0
APIORMMA APIFramework = 4 // ORMMA
APIMRAID2 APIFramework = 5 // MRAID 2.0
APIMRAID3 APIFramework = 6 // MRAID 3.0
APIOMID1 APIFramework = 7 // OMID 1.0
APIVPAID1 APIFramework = 1 // VPAID 1.0
APIVPAID2 APIFramework = 2 // VPAID 2.0
APIMRAID1 APIFramework = 3 // MRAID 1.0
APIORMMA APIFramework = 4 // ORMMA
APIMRAID2 APIFramework = 5 // MRAID 2.0
APIMRAID3 APIFramework = 6 // MRAID 3.0
APIOMID1 APIFramework = 7 // OMID 1.0
APISIMID10 APIFramework = 8 // SIMID 1.0
APISIMID11 APIFramework = 9 // SIMID 1.1
)
+8
View File
@@ -64,6 +64,14 @@ type App struct {
// Comma separated list of keywords about the app.
Keywords string `json:"keywords,omitempty"`
// Attribute:
// kwarray
// Type:
// string array
// Definition:
// Array of keywords about the site. Only one of 'keywords' or 'kwarray' may be present.
KwArray []string `json:"kwarray,omitempty"`
// Attribute:
// bundle
// Type:
+72
View File
@@ -117,6 +117,17 @@ type AudioPlacement struct {
// Maximum creative duration in seconds.
MaxDur int64 `json:"maxdur,omitempty"`
// Attribute:
// rqddurs
// Type:
// integer array
// Definition:
// Precise acceptable durations for video creatives in seconds. This field specifically
// targets the Live TV use case where non-exact ad durations would result in undesirable
// 'dead air'. This field is mutually exclusive with mindur and maxdur; if rqddurs is
// specified, mindur and maxdur must not be specified and vice versa.
RqdDurs []in64 `json:"rqddurs,omitempty"`
// Attribute:
// maxext
// Type:
@@ -162,6 +173,57 @@ type AudioPlacement struct {
// The maximum number of ads that can be played in an ad pod.
MaxSeq int64 `json:"maxseq,omitempty"`
// Attribute:
// poddur
// Type:
// integer
// Definition:
// Indicates the total amount of time in seconds that advertisers may fill
// for a “dynamic” video ad pod, or the dynamic portion of a “hybrid” ad pod.
// This field is required only for the dynamic portion(s) of video ad pods.
// This field refers to the length of the entire ad break, whereas
// mindur/maxdur/rqddurs are constraints relating to the slots that make up the pod.
PodDur int64 `json:"poddur,omitempty"`
// Attribute:
// podid
// Type:
// integer
// Definition:
// Unique identifier indicating that an impression opportunity belongs to a
// video ad pod. If multiple impression opportunities within a bid request
// share the same podid, this indicates that those impression opportunities
// belong to the same video ad pod.
PodID int64 `json:"podid,omitempty"`
// Attribute:
// podseq
// Type:
// integer; default 0
// Definition:
// The sequence (position) of the video ad pod within a content stream.
// Refer to List: List: Pod Sequence for guidance on the use of this field.
PodSeq PodSequence `json:"podseq,omitempty"`
// Attribute:
// slotinpod
// Type:
// integer; default 0
// Definition:
// For video ad pods, this value indicates that the seller can guarantee delivery
// against the indicated slot position in the pod.
// Refer to List: List: Slot Position in Pod for guidance on the use of this field.
SlotInPod SlotPositionInPod `json:"slotinpod,omitempty"`
// Attribute:
// mincpmpersec
// Type:
// float
// Definition:
// Minimum CPM per second. This is a price floor for the “dynamic” portion of a
// video ad pod, relative to the duration of bids an advertiser may submit.
MinCPMPerSec float64 `json:"mincpmpersec,omitempty"`
// Attribute:
// comp
// Type:
@@ -180,6 +242,16 @@ type AudioPlacement struct {
// Refer to List: Companion Types.
CompType []CompanionType `json:"comptype,omitempty"`
// Attribute:
// overlayexpdir
// Type:
// integer array
// Definition:
// Directions in which the creative (video overlay) is permitted to expand.
// This is primarily used for non-linear videos.
// Refer to List: Expandable Directions.
OverlayExpDir []ExpandableDirection `json:"overlayexpdir,omitempty"`
// Attribute:
// ext
// Type:
+32
View File
@@ -0,0 +1,32 @@
package adcom1
import "encoding/json"
// BrandVersion provides further identification based on User-Agent Client Hints.
// The BrandVersion object is used to identify a devices browser or similar software component, and the user agents execution platform or operating system.
type BrandVersion struct {
// Attribute:
// brand
// Type:
// string; recommended
// Definition:
// A brand identifier, for example, “Chrome” or “Windows”.
// The value may be sourced from the User-Agent Client Hints headers, representing either the user agent brand (from the Sec-CH-UA-Full-Version header) or the platform brand (from the Sec-CH-UA-Platform header).
Brand string `json:"brand,omitempty"`
// Attribute:
// version
// Type:
// string array
// Definition:
// A sequence of version components, in descending hierarchical order (major, minor, micro, …).
Version []string `json:"name,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+6 -3
View File
@@ -7,7 +7,10 @@ type CategoryTaxonomy int
//
// Values of 500+ hold vendor-specific codes.
const (
CatTaxIABContent1 CategoryTaxonomy = 1 // 1 IAB Content Category Taxonomy 1.0.
CatTaxIABContent2 CategoryTaxonomy = 2 // 2 IAB Content Category Taxonomy 2.0: www.iab.com/guidelines/taxonomy
CatTaxIABProduct1 CategoryTaxonomy = 3 // 3 IAB Ad Product Taxonomy 1.0.
CatTaxIABContent1 CategoryTaxonomy = 1 // 1 IAB Content Category Taxonomy 1.0.
CatTaxIABContent20 CategoryTaxonomy = 2 // 2 IAB Content Category Taxonomy 2.0: www.iab.com/guidelines/taxonomy
CatTaxIABProduct1 CategoryTaxonomy = 3 // 3 IAB Ad Product Taxonomy 1.0.
CatTaxIABAudience11 CategoryTaxonomy = 4 // 4 IAB Audience Taxonomy 1.1.
CatTaxIABContent21 CategoryTaxonomy = 5 // 5 IAB Content Category Taxonomy 2.1.
CatTaxIABContent22 CategoryTaxonomy = 6 // 6 IAB Content Category Taxonomy 2.2
)
+43
View File
@@ -0,0 +1,43 @@
package adcom1
import "encoding/json"
// Channel describes the channel an ad will be displayed on.
// A Channel is defined as the entity that curates a content library, or stream within a brand name for viewers.
// Examples are specific view selectable channels within linear and streaming television (MTV, HGTV, CNN, BBC One, etc) or a specific stream of audio content commonly called stations.
// Name is human-readable field while domain and id can be used for reporting and targeting purposes.
type Channel struct {
// Attribute:
// id
// Type:
// string
// Definition:
// A unique identifier assigned by the publisher.
// This may not be a unique identifier across all supply sources.
ID string `json:"id,omitempty"`
// Attribute:
// name
// Type:
// string
// Definition:
// Channel the content is on (e.g., a local channel like "WABC-TV").
Name string `json:"name,omitempty"`
// Attribute:
// domain
// Type:
// string
// Definition:
// The primary domain of the channel (e.g., “abc7ny.com” in the case of the local channel WABC-TV).
// It is recommended to include the top private domain (PSL+1) for DSP targeting normalization purposes.
Domain string `json:"domain,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+26
View File
@@ -158,6 +158,14 @@ type Content struct {
// Comma separated list of keywords describing the content.
Keywords string `json:"keywords,omitempty"`
// Attribute:
// kwarray
// Type:
// string array
// Definition:
// Array of keywords about the site. Only one of 'keywords' or 'kwarray' may be present.
KwArray []string `json:"kwarray,omitempty"`
// Attribute:
// live
// Type:
@@ -207,6 +215,24 @@ type Content struct {
// Refer to Object: Producer.
Producer *Producer `json:"producer,omitempty"`
// Attribute:
// network
// Type:
// object
// Definition:
// Details about the network.
// Refer to Object: Network.
Network *Network `json:"network,omitempty"`
// Attribute:
// channel
// Type:
// object
// Definition:
// Details about the channel.
// Refer to Object: Channel.
Channel *Channel `json:"channel,omitempty"`
// Attribute:
// data
// Type:
+19
View File
@@ -23,6 +23,16 @@ type Device struct {
// Browser user agent string.
UA string `json:"ua,omitempty"`
// Attribute:
// aua
// Type:
// string
// Definition:
// Structured user agent information defined by a Object: UserAgent.
// If both `ua` and `sua` are present in the bid request, `sua` should be considered the more accurate representation of the device attributes.
// This is because the `ua` may contain a frozen or reduced UserAgent string.
SUA *UserAgent `json:"sua,omitempty"`
// Attribute:
// ifa
// Type:
@@ -137,6 +147,15 @@ type Device struct {
// Browser language using ISO-639-1-alpha-2.
Lang string `json:"lang,omitempty"`
// Attribute:
// langb
// Type:
// string
// Definition:
// Browser language using IETF BCP 47.
// Only one of lang or langb should be present.
LangB string `json:"langb,omitempty"`
// Attribute:
// ip
// Type:
+1
View File
@@ -13,4 +13,5 @@ const (
DeviceTablet DeviceType = 5 // Tablet
DeviceConnected DeviceType = 6 // Connected Device
DeviceSetTopBox DeviceType = 7 // Set Top Box
DeviceOOH DeviceType = 8 // OOH Device
)
+1
View File
@@ -10,4 +10,5 @@ const (
ExpandableUp ExpandableDirection = 3 // Up
ExpandableDown ExpandableDirection = 4 // Down
ExpandableFullScreen ExpandableDirection = 5 // Full Screen
ExpandableSmaller ExpandableDirection = 6 // Resize/Minimize (make smaller)
)
+33
View File
@@ -0,0 +1,33 @@
package adcom1
import "encoding/json"
// ExtendedIdentifier support in the OpenRTB specification allows buyers to use audience data in real-time bidding.
// The exchange should ensure that business agreements allow for the sending of this data.
// Note, it is assumed that exchanges and DSPs will collaborate with the appropriate regulatory agencies and ID vendor(s) to ensure compliance.
type ExtendedIdentifier struct {
// Attribute:
// source
// Type:
// string
// Definition:
// Source or technology provider responsible for the set of included IDs.
// Expressed as a top-level domain.
Source string `json:"source,omitempty"`
// Attribute:
// uids
// Type:
// object array
// Definition:
// Array of extended ID UID objects from the given source. Refer to Object: Extended Identifier UIDs.
UIDs []ExtendedIdentifierUID `json:"uids,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+31
View File
@@ -0,0 +1,31 @@
package adcom1
import "encoding/json"
type ExtendedIdentifierUID struct {
// Attribute:
// id
// Type:
// string
// Definition:
// Cookie or platform-native identifier.
ID string `json:"id,omitempty"`
// Attribute:
// uids
// Type:
// object array
// Definition:
// Type of user agent the match is from.
// It is highly recommended to set this, as many DSPs separate app-native IDs from browser-based IDs and require a type value for ID resolution.
// Refer to List: Agent Types.
AType AgentType `json:"uids,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+2
View File
@@ -17,4 +17,6 @@ const (
CreativeDAAST10Wrapper MediaCreativeSubtype = 10 // DAAST 1.0 Wrapper
CreativeVAST41 MediaCreativeSubtype = 11 // VAST 4.1
CreativeVAST41Wrapper MediaCreativeSubtype = 12 // VAST 4.1 Wrapper
CreativeVAST42 MediaCreativeSubtype = 13 // VAST 4.2
CreativeVAST42Wrapper MediaCreativeSubtype = 14 // VAST 4.2 Wrapper
)
+43
View File
@@ -0,0 +1,43 @@
package adcom1
import "encoding/json"
// Network describes the network an ad will be displayed on.
// A Network is defined as the parent entity of the Channel objects entity for the purposes of organizing Channels.
// Examples are companies that own and/or license a collection of content channels (Viacom, Discovery, CBS, WarnerMedia, Turner and others), or studio that creates such content and self-distributes content.
// Name is human-readable field while domain and id can be used for reporting and targeting purposes.
type Network struct {
// Attribute:
// id
// Type:
// string
// Definition:
// A unique identifier assigned by the publisher.
// This may not be a unique identifier across all supply sources.
ID string `json:"id,omitempty"`
// Attribute:
// name
// Type:
// string
// Definition:
// Network the content is on (e.g., a TV network like "ABC").
Name string `json:"name,omitempty"`
// Attribute:
// domain
// Type:
// string
// Definition:
// The primary domain of the network (e.g., “abc.com” in the case of the network ABC).
// It is recommended to include the top private domain (PSL+1) for DSP targeting normalization purposes.
Domain string `json:"domain,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+1
View File
@@ -11,4 +11,5 @@ const (
PlaybackMouseOverSoundOn PlaybackMethod = 4 // Initiates on Mouse-Over with Sound On
PlaybackViewportSoundOn PlaybackMethod = 5 // Initiates on Entering Viewport with Sound On
PlaybackViewportSoundOff PlaybackMethod = 6 // Initiates on Entering Viewport with Sound Off by Default
PlaybackContinuous PlaybackMethod = 7 // Continuous Playback - Media playback is set to play additional media automatically without user interaction. The media player will keep playing additional media (playlist or generated) for the user until the user actively stops this from happening.
)
+11
View File
@@ -0,0 +1,11 @@
package adcom1
// PodSequence identifies the pod sequence field, for use in audio and video content streams with one or more ad pods.
type PodSequence int8
// PodSequence options.
const (
PodSeqLast PodSequence = -1 // -1 Last pod in the content stream.
PodSeqAny PodSequence = 0 // 0 Any pod in the content stream.
PodSeqFirst PodSequence = 1 // 1 First pod in the content stream.
)
+8
View File
@@ -64,6 +64,14 @@ type Site struct {
// Comma separated list of keywords about the site.
Keywords string `json:"keywords,omitempty"`
// Attribute:
// kwarray
// Type:
// string array
// Definition:
// Array of keywords about the site. Only one of 'keywords' or 'kwarray' may be present.
KwArray []string `json:"kwarray,omitempty"`
// Attribute:
// page
// Type:
+12
View File
@@ -0,0 +1,12 @@
package adcom1
// PodSequence identifies the slot position in pod field, for use in audio and video ad pods.
type SlotPositionInPod int8
// PodSequence options.
const (
SlotPosLast SlotPositionInPod = -1 // -1 Last ad in the pod.
SlotPosAny SlotPositionInPod = 0 // 0 Any ad in the pod.
SlotPosFirst SlotPositionInPod = 1 // 1 First ad in the pod.
SlotPosFirstOrLast SlotPositionInPod = 2 // 1 First or Last ad in the pod.
)
+18 -2
View File
@@ -27,7 +27,7 @@ type User struct {
// Attribute:
// yob
// Type:
// integer
// integer; DEPRECATED
// Definition:
// Year of birth as a 4-digit integer.
YOB int64 `json:"yob,omitempty"`
@@ -35,7 +35,7 @@ type User struct {
// Attribute:
// gender
// Type:
// string
// string; DEPRECATED
// Definition:
// Gender, where “M” = male, “F” = female, “O” = known to be other (i.e., omitted is unknown).
Gender string `json:"gender,omitempty"`
@@ -48,6 +48,14 @@ type User struct {
// Comma separated list of keywords, interests, or intent.
Keywords string `json:"keywords,omitempty"`
// Attribute:
// kwarray
// Type:
// string array
// Definition:
// Array of keywords about the site. Only one of 'keywords' or 'kwarray' may be present.
KwArray []string `json:"kwarray,omitempty"`
// Attribute:
// consent
// Type:
@@ -75,6 +83,14 @@ type User struct {
// Refer to Object: Data.
Data []Data `json:"data,omitempty"`
// Attribute:
// eids
// Type:
// object array
// Definition:
// Extended (third-party) identifiers for this user. Refer to Object: Extended Identifiers.
EIDs []EID `json:"eids,omitempty"`
// Attribute:
// ext
// Type:
+81
View File
@@ -0,0 +1,81 @@
package adcom1
import "encoding/json"
// UserAgent represents Structured user agent information provided when client supports User-Agent Client Hints.
// If both device.ua and device.sua are present in the bid request, device.sua should be considered the more accurate representation of the device attributes.
// This is because the device.ua may contain a frozen or reduced UserAgent string.
type UserAgent struct {
// Attribute:
// browsers
// Type:
// object array; recommended
// Definition:
// Each BrandVersion object identifies a browser or similar software component.
// Refer to Object: BrandVersion.
// Implementers should send brands and versions derived from the Sec-CH-UA-Full-Version-List header.
Browsers []BrandVersion `json:"browsers,omitempty"`
// Attribute:
// platform
// Type:
// object; recommended
// Definition:
// Refer to Object: BrandVersion that identifies the user agents execution platform / OS.
// Implementers should send a brand derived from the Sec-CH-UA-Platform header, and version derived from the Sec-CH-UA-Platform-Version header.
Platform []BrandVersion `json:"platform,omitempty"`
// Attribute:
// mobile
// Type:
// integer
// Definition:
// 1 if the agent prefers a “mobile” version of the content, if available, i.e. optimized for small screens or touch input.
// 0 if the agent prefers the “desktop” or “full” content.
// Implementers should derive this value from the Sec-CH-UA-Mobile header.
Mobile int8 `json:"mobile,omitempty"`
// Attribute:
// architecture
// Type:
// string
// Definition:
// Devices major binary architecture, e.g. “x86” or “arm”.
// Implementers should retrieve this value from the Sec-CH-UA-Arch header.
Architecture string `json:"architecture,omitempty"`
// Attribute:
// bitness
// Type:
// string
// Definition:
// Devices bitness, e.g. “64” for 64-bit architecture.
// Implementers should retrieve this value from the Sec-CH-UA-Bitness header.
Bitness string `json:"bitness,omitempty"`
// Attribute:
// model
// Type:
// string
// Definition:
// Device model.
// Implementers should retrieve this value from the Sec-CH-UA-Model header.
Model string `json:"model,omitempty"`
// Attribute:
// source
// Type:
// integer
// Definition:
// The source of data used to create this object.
// Refer to List: User-Agent Source
Source UserAgentSource `json:"source,omitempty"`
// Attribute:
// ext
// Type:
// object
// Definition:
// Optional vendor-specific extensions.
Ext json.RawMessage `json:"ext,omitempty"`
}
+12
View File
@@ -0,0 +1,12 @@
package adcom1
// UserAgentSource represents the source of a user agent.
type UserAgentSource int8
// Options for the user agent source.
const (
UASourceUnknown UserAgentSource = 0 // Unspecified/unknown
UASourceLowEntropy UserAgentSource = 1 // User-Agent Client Hints (only low-entropy headers were available)
UASourceHighEntropy UserAgentSource = 2 // User-Agent Client Hints (with high-entropy headers available)
UASourceParsed UserAgentSource = 3 // Parsed from User-Agent header (the same string carried by the ua field)
)
+81
View File
@@ -151,6 +151,17 @@ type VideoPlacement struct {
// Maximum creative duration in seconds.
MaxDur int64 `json:"maxdur,omitempty"`
// Attribute:
// rqddurs
// Type:
// integer array
// Definition:
// Precise acceptable durations for video creatives in seconds. This field specifically
// targets the Live TV use case where non-exact ad durations would result in undesirable
// 'dead air'. This field is mutually exclusive with mindur and maxdur; if rqddurs is
// specified, mindur and maxdur must not be specified and vice versa.
RqdDurs []int64 `json:"rqddurs,omitempty"`
// Attribute:
// maxext
// Type:
@@ -196,6 +207,57 @@ type VideoPlacement struct {
// The maximum number of ads that can be played in an ad pod.
MaxSeq int64 `json:"maxseq,omitempty"`
// Attribute:
// poddur
// Type:
// integer
// Definition:
// Indicates the total amount of time in seconds that advertisers may fill
// for a “dynamic” video ad pod, or the dynamic portion of a “hybrid” ad pod.
// This field is required only for the dynamic portion(s) of video ad pods.
// This field refers to the length of the entire ad break, whereas
// mindur/maxdur/rqddurs are constraints relating to the slots that make up the pod.
PodDur int64 `json:"poddur,omitempty"`
// Attribute:
// podid
// Type:
// integer
// Definition:
// Unique identifier indicating that an impression opportunity belongs to a
// video ad pod. If multiple impression opportunities within a bid request
// share the same podid, this indicates that those impression opportunities
// belong to the same video ad pod.
PodID int64 `json:"podid,omitempty"`
// Attribute:
// podseq
// Type:
// integer; default 0
// Definition:
// The sequence (position) of the video ad pod within a content stream.
// Refer to List: List: Pod Sequence for guidance on the use of this field.
PodSeq PodSequence `json:"podseq,omitempty"`
// Attribute:
// slotinpod
// Type:
// integer; default 0
// Definition:
// For video ad pods, this value indicates that the seller can guarantee delivery
// against the indicated slot position in the pod.
// Refer to List: List: Slot Position in Pod for guidance on the use of this field.
SlotInPod SlotPositionInPod `json:"slotinpod,omitempty"`
// Attribute:
// mincpmpersec
// Type:
// float
// Definition:
// Minimum CPM per second. This is a price floor for the “dynamic” portion of a
// video ad pod, relative to the duration of bids an advertiser may submit.
MinCPMPerSec float64 `json:"mincpmpersec,omitempty"`
// Attribute:
// linear
// Type:
@@ -232,6 +294,25 @@ type VideoPlacement struct {
// Refer to List: Companion Types.
CompType []CompanionType `json:"comptype,omitempty"`
// Attribute:
// expdir
// Type:
// integer array
// Definition:
// Directions in which the creative (video placement) is permitted to expand.
// Refer to List: Expandable Directions.
ExpDir []ExpandableDirection `json:"expdir,omitempty"`
// Attribute:
// overlayexpdir
// Type:
// integer array
// Definition:
// Directions in which the creative (video overlay) is permitted to expand.
// This is primarily used for non-linear videos.
// Refer to List: Expandable Directions.
OverlayExpDir []ExpandableDirection `json:"overlayexpdir,omitempty"`
// Attribute:
// ext
// Type:
+2 -2
View File
@@ -31,7 +31,7 @@ type Video struct {
// Minimum video ad duration in seconds. This field is mutually
// exclusive with rqddurs; only one of minduration and rqddurs
// may be in a bid request.
MinDuration *int64 `json:"minduration,omitempty"`
MinDuration int64 `json:"minduration,omitempty"`
// Attribute:
// maxduration
@@ -41,7 +41,7 @@ type Video struct {
// Maximum video ad duration in seconds. This field is mutually
// exclusive with rqddurs; only one of maxduration and rqddurs
// may be in a bid request.
MaxDuration *int64 `json:"maxduration,omitempty"`
MaxDuration int64 `json:"maxduration,omitempty"`
// Attribute:
// startdelay