1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.analytics.admin.v1alpha; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 22*d5c09012SAndroid Build Coastguard Worker 23*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/analytics/admin/apiv1alpha/adminpb;adminpb"; 24*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 25*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "AudienceProto"; 26*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.analytics.admin.v1alpha"; 27*d5c09012SAndroid Build Coastguard Worker 28*d5c09012SAndroid Build Coastguard Worker// Specifies how to evaluate users for joining an Audience. 29*d5c09012SAndroid Build Coastguard Workerenum AudienceFilterScope { 30*d5c09012SAndroid Build Coastguard Worker // Scope is not specified. 31*d5c09012SAndroid Build Coastguard Worker AUDIENCE_FILTER_SCOPE_UNSPECIFIED = 0; 32*d5c09012SAndroid Build Coastguard Worker 33*d5c09012SAndroid Build Coastguard Worker // User joins the Audience if the filter condition is met within one 34*d5c09012SAndroid Build Coastguard Worker // event. 35*d5c09012SAndroid Build Coastguard Worker AUDIENCE_FILTER_SCOPE_WITHIN_SAME_EVENT = 1; 36*d5c09012SAndroid Build Coastguard Worker 37*d5c09012SAndroid Build Coastguard Worker // User joins the Audience if the filter condition is met within one 38*d5c09012SAndroid Build Coastguard Worker // session. 39*d5c09012SAndroid Build Coastguard Worker AUDIENCE_FILTER_SCOPE_WITHIN_SAME_SESSION = 2; 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker // User joins the Audience if the filter condition is met by any event 42*d5c09012SAndroid Build Coastguard Worker // across any session. 43*d5c09012SAndroid Build Coastguard Worker AUDIENCE_FILTER_SCOPE_ACROSS_ALL_SESSIONS = 3; 44*d5c09012SAndroid Build Coastguard Worker} 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker// A specific filter for a single dimension or metric. 47*d5c09012SAndroid Build Coastguard Workermessage AudienceDimensionOrMetricFilter { 48*d5c09012SAndroid Build Coastguard Worker // A filter for a string-type dimension that matches a particular pattern. 49*d5c09012SAndroid Build Coastguard Worker message StringFilter { 50*d5c09012SAndroid Build Coastguard Worker // The match type for the string filter. 51*d5c09012SAndroid Build Coastguard Worker enum MatchType { 52*d5c09012SAndroid Build Coastguard Worker // Unspecified 53*d5c09012SAndroid Build Coastguard Worker MATCH_TYPE_UNSPECIFIED = 0; 54*d5c09012SAndroid Build Coastguard Worker 55*d5c09012SAndroid Build Coastguard Worker // Exact match of the string value. 56*d5c09012SAndroid Build Coastguard Worker EXACT = 1; 57*d5c09012SAndroid Build Coastguard Worker 58*d5c09012SAndroid Build Coastguard Worker // Begins with the string value. 59*d5c09012SAndroid Build Coastguard Worker BEGINS_WITH = 2; 60*d5c09012SAndroid Build Coastguard Worker 61*d5c09012SAndroid Build Coastguard Worker // Ends with the string value. 62*d5c09012SAndroid Build Coastguard Worker ENDS_WITH = 3; 63*d5c09012SAndroid Build Coastguard Worker 64*d5c09012SAndroid Build Coastguard Worker // Contains the string value. 65*d5c09012SAndroid Build Coastguard Worker CONTAINS = 4; 66*d5c09012SAndroid Build Coastguard Worker 67*d5c09012SAndroid Build Coastguard Worker // Full regular expression matches with the string value. 68*d5c09012SAndroid Build Coastguard Worker FULL_REGEXP = 5; 69*d5c09012SAndroid Build Coastguard Worker } 70*d5c09012SAndroid Build Coastguard Worker 71*d5c09012SAndroid Build Coastguard Worker // Required. The match type for the string filter. 72*d5c09012SAndroid Build Coastguard Worker MatchType match_type = 1 [(google.api.field_behavior) = REQUIRED]; 73*d5c09012SAndroid Build Coastguard Worker 74*d5c09012SAndroid Build Coastguard Worker // Required. The string value to be matched against. 75*d5c09012SAndroid Build Coastguard Worker string value = 2 [(google.api.field_behavior) = REQUIRED]; 76*d5c09012SAndroid Build Coastguard Worker 77*d5c09012SAndroid Build Coastguard Worker // Optional. If true, the match is case-sensitive. If false, the match is 78*d5c09012SAndroid Build Coastguard Worker // case-insensitive. 79*d5c09012SAndroid Build Coastguard Worker bool case_sensitive = 3 [(google.api.field_behavior) = OPTIONAL]; 80*d5c09012SAndroid Build Coastguard Worker } 81*d5c09012SAndroid Build Coastguard Worker 82*d5c09012SAndroid Build Coastguard Worker // A filter for a string dimension that matches a particular list of options. 83*d5c09012SAndroid Build Coastguard Worker message InListFilter { 84*d5c09012SAndroid Build Coastguard Worker // Required. The list of possible string values to match against. Must be 85*d5c09012SAndroid Build Coastguard Worker // non-empty. 86*d5c09012SAndroid Build Coastguard Worker repeated string values = 1 [(google.api.field_behavior) = REQUIRED]; 87*d5c09012SAndroid Build Coastguard Worker 88*d5c09012SAndroid Build Coastguard Worker // Optional. If true, the match is case-sensitive. If false, the match is 89*d5c09012SAndroid Build Coastguard Worker // case-insensitive. 90*d5c09012SAndroid Build Coastguard Worker bool case_sensitive = 2 [(google.api.field_behavior) = OPTIONAL]; 91*d5c09012SAndroid Build Coastguard Worker } 92*d5c09012SAndroid Build Coastguard Worker 93*d5c09012SAndroid Build Coastguard Worker // To represent a number. 94*d5c09012SAndroid Build Coastguard Worker message NumericValue { 95*d5c09012SAndroid Build Coastguard Worker // One of a numeric value. 96*d5c09012SAndroid Build Coastguard Worker oneof one_value { 97*d5c09012SAndroid Build Coastguard Worker // Integer value. 98*d5c09012SAndroid Build Coastguard Worker int64 int64_value = 1; 99*d5c09012SAndroid Build Coastguard Worker 100*d5c09012SAndroid Build Coastguard Worker // Double value. 101*d5c09012SAndroid Build Coastguard Worker double double_value = 2; 102*d5c09012SAndroid Build Coastguard Worker } 103*d5c09012SAndroid Build Coastguard Worker } 104*d5c09012SAndroid Build Coastguard Worker 105*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values on a dimension or metric. 106*d5c09012SAndroid Build Coastguard Worker message NumericFilter { 107*d5c09012SAndroid Build Coastguard Worker // The operation applied to a numeric filter. 108*d5c09012SAndroid Build Coastguard Worker enum Operation { 109*d5c09012SAndroid Build Coastguard Worker // Unspecified. 110*d5c09012SAndroid Build Coastguard Worker OPERATION_UNSPECIFIED = 0; 111*d5c09012SAndroid Build Coastguard Worker 112*d5c09012SAndroid Build Coastguard Worker // Equal. 113*d5c09012SAndroid Build Coastguard Worker EQUAL = 1; 114*d5c09012SAndroid Build Coastguard Worker 115*d5c09012SAndroid Build Coastguard Worker // Less than. 116*d5c09012SAndroid Build Coastguard Worker LESS_THAN = 2; 117*d5c09012SAndroid Build Coastguard Worker 118*d5c09012SAndroid Build Coastguard Worker // Greater than. 119*d5c09012SAndroid Build Coastguard Worker GREATER_THAN = 4; 120*d5c09012SAndroid Build Coastguard Worker } 121*d5c09012SAndroid Build Coastguard Worker 122*d5c09012SAndroid Build Coastguard Worker // Required. The operation applied to a numeric filter. 123*d5c09012SAndroid Build Coastguard Worker Operation operation = 1 [(google.api.field_behavior) = REQUIRED]; 124*d5c09012SAndroid Build Coastguard Worker 125*d5c09012SAndroid Build Coastguard Worker // Required. The numeric or date value to match against. 126*d5c09012SAndroid Build Coastguard Worker NumericValue value = 2 [(google.api.field_behavior) = REQUIRED]; 127*d5c09012SAndroid Build Coastguard Worker } 128*d5c09012SAndroid Build Coastguard Worker 129*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values between certain values on a dimension 130*d5c09012SAndroid Build Coastguard Worker // or metric. 131*d5c09012SAndroid Build Coastguard Worker message BetweenFilter { 132*d5c09012SAndroid Build Coastguard Worker // Required. Begins with this number, inclusive. 133*d5c09012SAndroid Build Coastguard Worker NumericValue from_value = 1 [(google.api.field_behavior) = REQUIRED]; 134*d5c09012SAndroid Build Coastguard Worker 135*d5c09012SAndroid Build Coastguard Worker // Required. Ends with this number, inclusive. 136*d5c09012SAndroid Build Coastguard Worker NumericValue to_value = 2 [(google.api.field_behavior) = REQUIRED]; 137*d5c09012SAndroid Build Coastguard Worker } 138*d5c09012SAndroid Build Coastguard Worker 139*d5c09012SAndroid Build Coastguard Worker // One of the above filters. 140*d5c09012SAndroid Build Coastguard Worker oneof one_filter { 141*d5c09012SAndroid Build Coastguard Worker // A filter for a string-type dimension that matches a particular pattern. 142*d5c09012SAndroid Build Coastguard Worker StringFilter string_filter = 2; 143*d5c09012SAndroid Build Coastguard Worker 144*d5c09012SAndroid Build Coastguard Worker // A filter for a string dimension that matches a particular list of 145*d5c09012SAndroid Build Coastguard Worker // options. 146*d5c09012SAndroid Build Coastguard Worker InListFilter in_list_filter = 3; 147*d5c09012SAndroid Build Coastguard Worker 148*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values on a dimension or metric. 149*d5c09012SAndroid Build Coastguard Worker NumericFilter numeric_filter = 4; 150*d5c09012SAndroid Build Coastguard Worker 151*d5c09012SAndroid Build Coastguard Worker // A filter for numeric or date values between certain values on a dimension 152*d5c09012SAndroid Build Coastguard Worker // or metric. 153*d5c09012SAndroid Build Coastguard Worker BetweenFilter between_filter = 5; 154*d5c09012SAndroid Build Coastguard Worker } 155*d5c09012SAndroid Build Coastguard Worker 156*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. The dimension name or metric name to filter. If the 157*d5c09012SAndroid Build Coastguard Worker // field name refers to a custom dimension or metric, a scope prefix will be 158*d5c09012SAndroid Build Coastguard Worker // added to the front of the custom dimensions or metric name. For more on 159*d5c09012SAndroid Build Coastguard Worker // scope prefixes or custom dimensions/metrics, reference the [Google 160*d5c09012SAndroid Build Coastguard Worker // Analytics Data API documentation] 161*d5c09012SAndroid Build Coastguard Worker // (https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#custom_dimensions). 162*d5c09012SAndroid Build Coastguard Worker string field_name = 1 [ 163*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 164*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 165*d5c09012SAndroid Build Coastguard Worker ]; 166*d5c09012SAndroid Build Coastguard Worker 167*d5c09012SAndroid Build Coastguard Worker // Optional. Indicates whether this filter needs dynamic evaluation or not. If 168*d5c09012SAndroid Build Coastguard Worker // set to true, users join the Audience if they ever met the condition (static 169*d5c09012SAndroid Build Coastguard Worker // evaluation). If unset or set to false, user evaluation for an Audience is 170*d5c09012SAndroid Build Coastguard Worker // dynamic; users are added to an Audience when they meet the conditions and 171*d5c09012SAndroid Build Coastguard Worker // then removed when they no longer meet them. 172*d5c09012SAndroid Build Coastguard Worker // 173*d5c09012SAndroid Build Coastguard Worker // This can only be set when Audience scope is ACROSS_ALL_SESSIONS. 174*d5c09012SAndroid Build Coastguard Worker bool at_any_point_in_time = 6 [(google.api.field_behavior) = OPTIONAL]; 175*d5c09012SAndroid Build Coastguard Worker 176*d5c09012SAndroid Build Coastguard Worker // Optional. If set, specifies the time window for which to evaluate data in 177*d5c09012SAndroid Build Coastguard Worker // number of days. If not set, then audience data is evaluated against 178*d5c09012SAndroid Build Coastguard Worker // lifetime data (For example, infinite time window). 179*d5c09012SAndroid Build Coastguard Worker // 180*d5c09012SAndroid Build Coastguard Worker // For example, if set to 1 day, only the current day's data is evaluated. The 181*d5c09012SAndroid Build Coastguard Worker // reference point is the current day when at_any_point_in_time is unset or 182*d5c09012SAndroid Build Coastguard Worker // false. 183*d5c09012SAndroid Build Coastguard Worker // 184*d5c09012SAndroid Build Coastguard Worker // It can only be set when Audience scope is ACROSS_ALL_SESSIONS and cannot be 185*d5c09012SAndroid Build Coastguard Worker // greater than 60 days. 186*d5c09012SAndroid Build Coastguard Worker int32 in_any_n_day_period = 7 [(google.api.field_behavior) = OPTIONAL]; 187*d5c09012SAndroid Build Coastguard Worker} 188*d5c09012SAndroid Build Coastguard Worker 189*d5c09012SAndroid Build Coastguard Worker// A filter that matches events of a single event name. If an event parameter 190*d5c09012SAndroid Build Coastguard Worker// is specified, only the subset of events that match both the single event name 191*d5c09012SAndroid Build Coastguard Worker// and the parameter filter expressions match this event filter. 192*d5c09012SAndroid Build Coastguard Workermessage AudienceEventFilter { 193*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. The name of the event to match against. 194*d5c09012SAndroid Build Coastguard Worker string event_name = 1 [ 195*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 196*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 197*d5c09012SAndroid Build Coastguard Worker ]; 198*d5c09012SAndroid Build Coastguard Worker 199*d5c09012SAndroid Build Coastguard Worker // Optional. If specified, this filter matches events that match both the 200*d5c09012SAndroid Build Coastguard Worker // single event name and the parameter filter expressions. AudienceEventFilter 201*d5c09012SAndroid Build Coastguard Worker // inside the parameter filter expression cannot be set (For example, nested 202*d5c09012SAndroid Build Coastguard Worker // event filters are not supported). This should be a single and_group of 203*d5c09012SAndroid Build Coastguard Worker // dimension_or_metric_filter or not_expression; ANDs of ORs are not 204*d5c09012SAndroid Build Coastguard Worker // supported. Also, if it includes a filter for "eventCount", only that one 205*d5c09012SAndroid Build Coastguard Worker // will be considered; all the other filters will be ignored. 206*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpression event_parameter_filter_expression = 2 207*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 208*d5c09012SAndroid Build Coastguard Worker} 209*d5c09012SAndroid Build Coastguard Worker 210*d5c09012SAndroid Build Coastguard Worker// A logical expression of Audience dimension, metric, or event filters. 211*d5c09012SAndroid Build Coastguard Workermessage AudienceFilterExpression { 212*d5c09012SAndroid Build Coastguard Worker // The expression applied to a filter. 213*d5c09012SAndroid Build Coastguard Worker oneof expr { 214*d5c09012SAndroid Build Coastguard Worker // A list of expressions to be AND’ed together. It can only contain 215*d5c09012SAndroid Build Coastguard Worker // AudienceFilterExpressions with or_group. This must be set for the top 216*d5c09012SAndroid Build Coastguard Worker // level AudienceFilterExpression. 217*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpressionList and_group = 1; 218*d5c09012SAndroid Build Coastguard Worker 219*d5c09012SAndroid Build Coastguard Worker // A list of expressions to OR’ed together. It cannot contain 220*d5c09012SAndroid Build Coastguard Worker // AudienceFilterExpressions with and_group or or_group. 221*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpressionList or_group = 2; 222*d5c09012SAndroid Build Coastguard Worker 223*d5c09012SAndroid Build Coastguard Worker // A filter expression to be NOT'ed (For example, inverted, complemented). 224*d5c09012SAndroid Build Coastguard Worker // It can only include a dimension_or_metric_filter. This cannot be set on 225*d5c09012SAndroid Build Coastguard Worker // the top level AudienceFilterExpression. 226*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpression not_expression = 3; 227*d5c09012SAndroid Build Coastguard Worker 228*d5c09012SAndroid Build Coastguard Worker // A filter on a single dimension or metric. This cannot be set on the top 229*d5c09012SAndroid Build Coastguard Worker // level AudienceFilterExpression. 230*d5c09012SAndroid Build Coastguard Worker AudienceDimensionOrMetricFilter dimension_or_metric_filter = 4; 231*d5c09012SAndroid Build Coastguard Worker 232*d5c09012SAndroid Build Coastguard Worker // Creates a filter that matches a specific event. This cannot be set on the 233*d5c09012SAndroid Build Coastguard Worker // top level AudienceFilterExpression. 234*d5c09012SAndroid Build Coastguard Worker AudienceEventFilter event_filter = 5; 235*d5c09012SAndroid Build Coastguard Worker } 236*d5c09012SAndroid Build Coastguard Worker} 237*d5c09012SAndroid Build Coastguard Worker 238*d5c09012SAndroid Build Coastguard Worker// A list of Audience filter expressions. 239*d5c09012SAndroid Build Coastguard Workermessage AudienceFilterExpressionList { 240*d5c09012SAndroid Build Coastguard Worker // A list of Audience filter expressions. 241*d5c09012SAndroid Build Coastguard Worker repeated AudienceFilterExpression filter_expressions = 1; 242*d5c09012SAndroid Build Coastguard Worker} 243*d5c09012SAndroid Build Coastguard Worker 244*d5c09012SAndroid Build Coastguard Worker// Defines a simple filter that a user must satisfy to be a member of the 245*d5c09012SAndroid Build Coastguard Worker// Audience. 246*d5c09012SAndroid Build Coastguard Workermessage AudienceSimpleFilter { 247*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. Specifies the scope for this filter. 248*d5c09012SAndroid Build Coastguard Worker AudienceFilterScope scope = 1 [ 249*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 250*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 251*d5c09012SAndroid Build Coastguard Worker ]; 252*d5c09012SAndroid Build Coastguard Worker 253*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. A logical expression of Audience dimension, metric, or 254*d5c09012SAndroid Build Coastguard Worker // event filters. 255*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpression filter_expression = 2 [ 256*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 257*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 258*d5c09012SAndroid Build Coastguard Worker ]; 259*d5c09012SAndroid Build Coastguard Worker} 260*d5c09012SAndroid Build Coastguard Worker 261*d5c09012SAndroid Build Coastguard Worker// Defines filters that must occur in a specific order for the user to be a 262*d5c09012SAndroid Build Coastguard Worker// member of the Audience. 263*d5c09012SAndroid Build Coastguard Workermessage AudienceSequenceFilter { 264*d5c09012SAndroid Build Coastguard Worker // A condition that must occur in the specified step order for this user 265*d5c09012SAndroid Build Coastguard Worker // to match the sequence. 266*d5c09012SAndroid Build Coastguard Worker message AudienceSequenceStep { 267*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. Specifies the scope for this step. 268*d5c09012SAndroid Build Coastguard Worker AudienceFilterScope scope = 1 [ 269*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 270*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 271*d5c09012SAndroid Build Coastguard Worker ]; 272*d5c09012SAndroid Build Coastguard Worker 273*d5c09012SAndroid Build Coastguard Worker // Optional. If true, the event satisfying this step must be the very next 274*d5c09012SAndroid Build Coastguard Worker // event after the event satisfying the last step. If unset or false, this 275*d5c09012SAndroid Build Coastguard Worker // step indirectly follows the prior step; for example, there may be 276*d5c09012SAndroid Build Coastguard Worker // events between the prior step and this step. It is ignored for the 277*d5c09012SAndroid Build Coastguard Worker // first step. 278*d5c09012SAndroid Build Coastguard Worker bool immediately_follows = 2 [(google.api.field_behavior) = OPTIONAL]; 279*d5c09012SAndroid Build Coastguard Worker 280*d5c09012SAndroid Build Coastguard Worker // Optional. When set, this step must be satisfied within the 281*d5c09012SAndroid Build Coastguard Worker // constraint_duration of the previous step (For example, t[i] - t[i-1] <= 282*d5c09012SAndroid Build Coastguard Worker // constraint_duration). If not set, there is no duration requirement (the 283*d5c09012SAndroid Build Coastguard Worker // duration is effectively unlimited). It is ignored for the first step. 284*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration constraint_duration = 3 285*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 286*d5c09012SAndroid Build Coastguard Worker 287*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. A logical expression of Audience dimension, metric, 288*d5c09012SAndroid Build Coastguard Worker // or event filters in each step. 289*d5c09012SAndroid Build Coastguard Worker AudienceFilterExpression filter_expression = 4 [ 290*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 291*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 292*d5c09012SAndroid Build Coastguard Worker ]; 293*d5c09012SAndroid Build Coastguard Worker } 294*d5c09012SAndroid Build Coastguard Worker 295*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. Specifies the scope for this filter. 296*d5c09012SAndroid Build Coastguard Worker AudienceFilterScope scope = 1 [ 297*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 298*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 299*d5c09012SAndroid Build Coastguard Worker ]; 300*d5c09012SAndroid Build Coastguard Worker 301*d5c09012SAndroid Build Coastguard Worker // Optional. Defines the time period in which the whole sequence must occur. 302*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration sequence_maximum_duration = 2 303*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 304*d5c09012SAndroid Build Coastguard Worker 305*d5c09012SAndroid Build Coastguard Worker // Required. An ordered sequence of steps. A user must complete each step in 306*d5c09012SAndroid Build Coastguard Worker // order to join the sequence filter. 307*d5c09012SAndroid Build Coastguard Worker repeated AudienceSequenceStep sequence_steps = 3 308*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = REQUIRED]; 309*d5c09012SAndroid Build Coastguard Worker} 310*d5c09012SAndroid Build Coastguard Worker 311*d5c09012SAndroid Build Coastguard Worker// A clause for defining either a simple or sequence filter. A filter can be 312*d5c09012SAndroid Build Coastguard Worker// inclusive (For example, users satisfying the filter clause are included in 313*d5c09012SAndroid Build Coastguard Worker// the Audience) or exclusive (For example, users satisfying the filter clause 314*d5c09012SAndroid Build Coastguard Worker// are excluded from the Audience). 315*d5c09012SAndroid Build Coastguard Workermessage AudienceFilterClause { 316*d5c09012SAndroid Build Coastguard Worker // Specifies whether this is an include or exclude filter clause. 317*d5c09012SAndroid Build Coastguard Worker enum AudienceClauseType { 318*d5c09012SAndroid Build Coastguard Worker // Unspecified clause type. 319*d5c09012SAndroid Build Coastguard Worker AUDIENCE_CLAUSE_TYPE_UNSPECIFIED = 0; 320*d5c09012SAndroid Build Coastguard Worker 321*d5c09012SAndroid Build Coastguard Worker // Users will be included in the Audience if the filter clause is met. 322*d5c09012SAndroid Build Coastguard Worker INCLUDE = 1; 323*d5c09012SAndroid Build Coastguard Worker 324*d5c09012SAndroid Build Coastguard Worker // Users will be excluded from the Audience if the filter clause is met. 325*d5c09012SAndroid Build Coastguard Worker EXCLUDE = 2; 326*d5c09012SAndroid Build Coastguard Worker } 327*d5c09012SAndroid Build Coastguard Worker 328*d5c09012SAndroid Build Coastguard Worker oneof filter { 329*d5c09012SAndroid Build Coastguard Worker // A simple filter that a user must satisfy to be a member of the Audience. 330*d5c09012SAndroid Build Coastguard Worker AudienceSimpleFilter simple_filter = 2; 331*d5c09012SAndroid Build Coastguard Worker 332*d5c09012SAndroid Build Coastguard Worker // Filters that must occur in a specific order for the user to be a member 333*d5c09012SAndroid Build Coastguard Worker // of the Audience. 334*d5c09012SAndroid Build Coastguard Worker AudienceSequenceFilter sequence_filter = 3; 335*d5c09012SAndroid Build Coastguard Worker } 336*d5c09012SAndroid Build Coastguard Worker 337*d5c09012SAndroid Build Coastguard Worker // Required. Specifies whether this is an include or exclude filter clause. 338*d5c09012SAndroid Build Coastguard Worker AudienceClauseType clause_type = 1 [(google.api.field_behavior) = REQUIRED]; 339*d5c09012SAndroid Build Coastguard Worker} 340*d5c09012SAndroid Build Coastguard Worker 341*d5c09012SAndroid Build Coastguard Worker// Specifies an event to log when a user joins the Audience. 342*d5c09012SAndroid Build Coastguard Workermessage AudienceEventTrigger { 343*d5c09012SAndroid Build Coastguard Worker // Determines when to log the event. 344*d5c09012SAndroid Build Coastguard Worker enum LogCondition { 345*d5c09012SAndroid Build Coastguard Worker // Log condition is not specified. 346*d5c09012SAndroid Build Coastguard Worker LOG_CONDITION_UNSPECIFIED = 0; 347*d5c09012SAndroid Build Coastguard Worker 348*d5c09012SAndroid Build Coastguard Worker // The event should be logged only when a user is joined. 349*d5c09012SAndroid Build Coastguard Worker AUDIENCE_JOINED = 1; 350*d5c09012SAndroid Build Coastguard Worker 351*d5c09012SAndroid Build Coastguard Worker // The event should be logged whenever the Audience condition is met, even 352*d5c09012SAndroid Build Coastguard Worker // if the user is already a member of the Audience. 353*d5c09012SAndroid Build Coastguard Worker AUDIENCE_MEMBERSHIP_RENEWED = 2; 354*d5c09012SAndroid Build Coastguard Worker } 355*d5c09012SAndroid Build Coastguard Worker 356*d5c09012SAndroid Build Coastguard Worker // Required. The event name that will be logged. 357*d5c09012SAndroid Build Coastguard Worker string event_name = 1 [(google.api.field_behavior) = REQUIRED]; 358*d5c09012SAndroid Build Coastguard Worker 359*d5c09012SAndroid Build Coastguard Worker // Required. When to log the event. 360*d5c09012SAndroid Build Coastguard Worker LogCondition log_condition = 2 [(google.api.field_behavior) = REQUIRED]; 361*d5c09012SAndroid Build Coastguard Worker} 362*d5c09012SAndroid Build Coastguard Worker 363*d5c09012SAndroid Build Coastguard Worker// A resource message representing a GA4 Audience. 364*d5c09012SAndroid Build Coastguard Workermessage Audience { 365*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 366*d5c09012SAndroid Build Coastguard Worker type: "analyticsadmin.googleapis.com/Audience" 367*d5c09012SAndroid Build Coastguard Worker pattern: "properties/{property}/audiences/{audience}" 368*d5c09012SAndroid Build Coastguard Worker }; 369*d5c09012SAndroid Build Coastguard Worker 370*d5c09012SAndroid Build Coastguard Worker // Specifies how long an exclusion lasts for users that meet the exclusion 371*d5c09012SAndroid Build Coastguard Worker // filter. 372*d5c09012SAndroid Build Coastguard Worker enum AudienceExclusionDurationMode { 373*d5c09012SAndroid Build Coastguard Worker // Not specified. 374*d5c09012SAndroid Build Coastguard Worker AUDIENCE_EXCLUSION_DURATION_MODE_UNSPECIFIED = 0; 375*d5c09012SAndroid Build Coastguard Worker 376*d5c09012SAndroid Build Coastguard Worker // Exclude users from the Audience during periods when they meet the 377*d5c09012SAndroid Build Coastguard Worker // filter clause. 378*d5c09012SAndroid Build Coastguard Worker EXCLUDE_TEMPORARILY = 1; 379*d5c09012SAndroid Build Coastguard Worker 380*d5c09012SAndroid Build Coastguard Worker // Exclude users from the Audience if they've ever met the filter clause. 381*d5c09012SAndroid Build Coastguard Worker EXCLUDE_PERMANENTLY = 2; 382*d5c09012SAndroid Build Coastguard Worker } 383*d5c09012SAndroid Build Coastguard Worker 384*d5c09012SAndroid Build Coastguard Worker // Output only. The resource name for this Audience resource. 385*d5c09012SAndroid Build Coastguard Worker // Format: properties/{propertyId}/audiences/{audienceId} 386*d5c09012SAndroid Build Coastguard Worker string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; 387*d5c09012SAndroid Build Coastguard Worker 388*d5c09012SAndroid Build Coastguard Worker // Required. The display name of the Audience. 389*d5c09012SAndroid Build Coastguard Worker string display_name = 2 [(google.api.field_behavior) = REQUIRED]; 390*d5c09012SAndroid Build Coastguard Worker 391*d5c09012SAndroid Build Coastguard Worker // Required. The description of the Audience. 392*d5c09012SAndroid Build Coastguard Worker string description = 3 [(google.api.field_behavior) = REQUIRED]; 393*d5c09012SAndroid Build Coastguard Worker 394*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. The duration a user should stay in an Audience. It 395*d5c09012SAndroid Build Coastguard Worker // cannot be set to more than 540 days. 396*d5c09012SAndroid Build Coastguard Worker int32 membership_duration_days = 4 [ 397*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 398*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE 399*d5c09012SAndroid Build Coastguard Worker ]; 400*d5c09012SAndroid Build Coastguard Worker 401*d5c09012SAndroid Build Coastguard Worker // Output only. It is automatically set by GA to false if this is an NPA 402*d5c09012SAndroid Build Coastguard Worker // Audience and is excluded from ads personalization. 403*d5c09012SAndroid Build Coastguard Worker bool ads_personalization_enabled = 5 404*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OUTPUT_ONLY]; 405*d5c09012SAndroid Build Coastguard Worker 406*d5c09012SAndroid Build Coastguard Worker // Optional. Specifies an event to log when a user joins the Audience. If not 407*d5c09012SAndroid Build Coastguard Worker // set, no event is logged when a user joins the Audience. 408*d5c09012SAndroid Build Coastguard Worker AudienceEventTrigger event_trigger = 6 409*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = OPTIONAL]; 410*d5c09012SAndroid Build Coastguard Worker 411*d5c09012SAndroid Build Coastguard Worker // Immutable. Specifies how long an exclusion lasts for users that meet the 412*d5c09012SAndroid Build Coastguard Worker // exclusion filter. It is applied to all EXCLUDE filter clauses and is 413*d5c09012SAndroid Build Coastguard Worker // ignored when there is no EXCLUDE filter clause in the Audience. 414*d5c09012SAndroid Build Coastguard Worker AudienceExclusionDurationMode exclusion_duration_mode = 7 415*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = IMMUTABLE]; 416*d5c09012SAndroid Build Coastguard Worker 417*d5c09012SAndroid Build Coastguard Worker // Required. Immutable. Unordered list. Filter clauses that define the 418*d5c09012SAndroid Build Coastguard Worker // Audience. All clauses will be AND’ed together. 419*d5c09012SAndroid Build Coastguard Worker repeated AudienceFilterClause filter_clauses = 8 [ 420*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = IMMUTABLE, 421*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = REQUIRED, 422*d5c09012SAndroid Build Coastguard Worker (google.api.field_behavior) = UNORDERED_LIST 423*d5c09012SAndroid Build Coastguard Worker ]; 424*d5c09012SAndroid Build Coastguard Worker} 425