1*d5c09012SAndroid Build Coastguard Worker// Copyright 2021 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.cloud.retail.v2; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 21*d5c09012SAndroid Build Coastguard Worker 22*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Retail.V2"; 23*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/retail/apiv2/retailpb;retailpb"; 24*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 25*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "CommonProto"; 26*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.retail.v2"; 27*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "RETAIL"; 28*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Retail\\V2"; 29*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Retail::V2"; 30*d5c09012SAndroid Build Coastguard Worker 31*d5c09012SAndroid Build Coastguard Worker// At which level we offer configuration for attributes. 32*d5c09012SAndroid Build Coastguard Workerenum AttributeConfigLevel { 33*d5c09012SAndroid Build Coastguard Worker // Value used when unset. In this case, server behavior defaults to 34*d5c09012SAndroid Build Coastguard Worker // [CATALOG_LEVEL_ATTRIBUTE_CONFIG][google.cloud.retail.v2.AttributeConfigLevel.CATALOG_LEVEL_ATTRIBUTE_CONFIG]. 35*d5c09012SAndroid Build Coastguard Worker ATTRIBUTE_CONFIG_LEVEL_UNSPECIFIED = 0; 36*d5c09012SAndroid Build Coastguard Worker 37*d5c09012SAndroid Build Coastguard Worker // At this level, we honor the attribute configurations set in 38*d5c09012SAndroid Build Coastguard Worker // [Product.attributes][google.cloud.retail.v2.Product.attributes]. 39*d5c09012SAndroid Build Coastguard Worker PRODUCT_LEVEL_ATTRIBUTE_CONFIG = 1; 40*d5c09012SAndroid Build Coastguard Worker 41*d5c09012SAndroid Build Coastguard Worker // At this level, we honor the attribute configurations set in 42*d5c09012SAndroid Build Coastguard Worker // [CatalogConfig.attribute_configs][]. 43*d5c09012SAndroid Build Coastguard Worker CATALOG_LEVEL_ATTRIBUTE_CONFIG = 2; 44*d5c09012SAndroid Build Coastguard Worker} 45*d5c09012SAndroid Build Coastguard Worker 46*d5c09012SAndroid Build Coastguard Worker// The type of solution. 47*d5c09012SAndroid Build Coastguard Workerenum SolutionType { 48*d5c09012SAndroid Build Coastguard Worker // Default value. 49*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_UNSPECIFIED = 0; 50*d5c09012SAndroid Build Coastguard Worker 51*d5c09012SAndroid Build Coastguard Worker // Used for Recommendations AI. 52*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_RECOMMENDATION = 1; 53*d5c09012SAndroid Build Coastguard Worker 54*d5c09012SAndroid Build Coastguard Worker // Used for Retail Search. 55*d5c09012SAndroid Build Coastguard Worker SOLUTION_TYPE_SEARCH = 2; 56*d5c09012SAndroid Build Coastguard Worker} 57*d5c09012SAndroid Build Coastguard Worker 58*d5c09012SAndroid Build Coastguard Worker// If filtering for recommendations is enabled. 59*d5c09012SAndroid Build Coastguard Workerenum RecommendationsFilteringOption { 60*d5c09012SAndroid Build Coastguard Worker // Value used when unset. 61*d5c09012SAndroid Build Coastguard Worker // In this case, server behavior defaults to 62*d5c09012SAndroid Build Coastguard Worker // [RECOMMENDATIONS_FILTERING_DISABLED][google.cloud.retail.v2.RecommendationsFilteringOption.RECOMMENDATIONS_FILTERING_DISABLED]. 63*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED = 0; 64*d5c09012SAndroid Build Coastguard Worker 65*d5c09012SAndroid Build Coastguard Worker // Recommendation filtering is disabled. 66*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_DISABLED = 1; 67*d5c09012SAndroid Build Coastguard Worker 68*d5c09012SAndroid Build Coastguard Worker // Recommendation filtering is enabled. 69*d5c09012SAndroid Build Coastguard Worker RECOMMENDATIONS_FILTERING_ENABLED = 3; 70*d5c09012SAndroid Build Coastguard Worker} 71*d5c09012SAndroid Build Coastguard Worker 72*d5c09012SAndroid Build Coastguard Worker// The use case of Cloud Retail Search. 73*d5c09012SAndroid Build Coastguard Workerenum SearchSolutionUseCase { 74*d5c09012SAndroid Build Coastguard Worker // The value when it's unspecified. In this case, server behavior defaults to 75*d5c09012SAndroid Build Coastguard Worker // [SEARCH_SOLUTION_USE_CASE_SEARCH][google.cloud.retail.v2.SearchSolutionUseCase.SEARCH_SOLUTION_USE_CASE_SEARCH]. 76*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_UNSPECIFIED = 0; 77*d5c09012SAndroid Build Coastguard Worker 78*d5c09012SAndroid Build Coastguard Worker // Search use case. Expects the traffic has a non-empty 79*d5c09012SAndroid Build Coastguard Worker // [query][google.cloud.retail.v2.SearchRequest.query]. 80*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_SEARCH = 1; 81*d5c09012SAndroid Build Coastguard Worker 82*d5c09012SAndroid Build Coastguard Worker // Browse use case. Expects the traffic has an empty 83*d5c09012SAndroid Build Coastguard Worker // [query][google.cloud.retail.v2.SearchRequest.query]. 84*d5c09012SAndroid Build Coastguard Worker SEARCH_SOLUTION_USE_CASE_BROWSE = 2; 85*d5c09012SAndroid Build Coastguard Worker} 86*d5c09012SAndroid Build Coastguard Worker 87*d5c09012SAndroid Build Coastguard Worker// Metadata that is used to define a condition that triggers an action. 88*d5c09012SAndroid Build Coastguard Worker// A valid condition must specify at least one of 'query_terms' or 89*d5c09012SAndroid Build Coastguard Worker// 'products_filter'. If multiple fields are specified, the condition is met if 90*d5c09012SAndroid Build Coastguard Worker// all the fields are satisfied e.g. if a set of query terms and product_filter 91*d5c09012SAndroid Build Coastguard Worker// are set, then only items matching the product_filter for requests with a 92*d5c09012SAndroid Build Coastguard Worker// query matching the query terms wil get boosted. 93*d5c09012SAndroid Build Coastguard Workermessage Condition { 94*d5c09012SAndroid Build Coastguard Worker // Query terms that we want to match on. 95*d5c09012SAndroid Build Coastguard Worker message QueryTerm { 96*d5c09012SAndroid Build Coastguard Worker // The value of the term to match on. 97*d5c09012SAndroid Build Coastguard Worker // Value cannot be empty. 98*d5c09012SAndroid Build Coastguard Worker // Value can have at most 3 terms if specified as a partial match. Each 99*d5c09012SAndroid Build Coastguard Worker // space separated string is considered as one term. 100*d5c09012SAndroid Build Coastguard Worker // For example, "a b c" is 3 terms and allowed, but " a b c d" is 4 terms 101*d5c09012SAndroid Build Coastguard Worker // and not allowed for a partial match. 102*d5c09012SAndroid Build Coastguard Worker string value = 1; 103*d5c09012SAndroid Build Coastguard Worker 104*d5c09012SAndroid Build Coastguard Worker // Whether this is supposed to be a full or partial match. 105*d5c09012SAndroid Build Coastguard Worker bool full_match = 2; 106*d5c09012SAndroid Build Coastguard Worker } 107*d5c09012SAndroid Build Coastguard Worker 108*d5c09012SAndroid Build Coastguard Worker // Used for time-dependent conditions. 109*d5c09012SAndroid Build Coastguard Worker // Example: Want to have rule applied for week long sale. 110*d5c09012SAndroid Build Coastguard Worker message TimeRange { 111*d5c09012SAndroid Build Coastguard Worker // Start of time range. Range is inclusive. 112*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp start_time = 1; 113*d5c09012SAndroid Build Coastguard Worker 114*d5c09012SAndroid Build Coastguard Worker // End of time range. Range is inclusive. 115*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp end_time = 2; 116*d5c09012SAndroid Build Coastguard Worker } 117*d5c09012SAndroid Build Coastguard Worker 118*d5c09012SAndroid Build Coastguard Worker // A list (up to 10 entries) of terms to match the query on. If not 119*d5c09012SAndroid Build Coastguard Worker // specified, match all queries. 120*d5c09012SAndroid Build Coastguard Worker // If many query terms are specified, the condition 121*d5c09012SAndroid Build Coastguard Worker // is matched if any of the terms is a match (i.e. using the OR operator). 122*d5c09012SAndroid Build Coastguard Worker repeated QueryTerm query_terms = 1; 123*d5c09012SAndroid Build Coastguard Worker 124*d5c09012SAndroid Build Coastguard Worker // Range of time(s) specifying when Condition is active. 125*d5c09012SAndroid Build Coastguard Worker // Condition true if any time range matches. 126*d5c09012SAndroid Build Coastguard Worker repeated TimeRange active_time_range = 3; 127*d5c09012SAndroid Build Coastguard Worker} 128*d5c09012SAndroid Build Coastguard Worker 129*d5c09012SAndroid Build Coastguard Worker// A rule is a condition-action pair 130*d5c09012SAndroid Build Coastguard Worker// 131*d5c09012SAndroid Build Coastguard Worker// * A condition defines when a rule is to be triggered. 132*d5c09012SAndroid Build Coastguard Worker// * An action specifies what occurs on that trigger. 133*d5c09012SAndroid Build Coastguard Worker// Currently rules only work for [controls][google.cloud.retail.v2.Control] with 134*d5c09012SAndroid Build Coastguard Worker// [SOLUTION_TYPE_SEARCH][google.cloud.retail.v2.SolutionType.SOLUTION_TYPE_SEARCH]. 135*d5c09012SAndroid Build Coastguard Workermessage Rule { 136*d5c09012SAndroid Build Coastguard Worker // A boost action to apply to results matching condition specified above. 137*d5c09012SAndroid Build Coastguard Worker message BoostAction { 138*d5c09012SAndroid Build Coastguard Worker // Strength of the condition boost, which must be in [-1, 1]. Negative 139*d5c09012SAndroid Build Coastguard Worker // boost means demotion. Default is 0.0. 140*d5c09012SAndroid Build Coastguard Worker // 141*d5c09012SAndroid Build Coastguard Worker // Setting to 1.0 gives the item a big promotion. However, it does not 142*d5c09012SAndroid Build Coastguard Worker // necessarily mean that the boosted item will be the top result at all 143*d5c09012SAndroid Build Coastguard Worker // times, nor that other items will be excluded. Results could still be 144*d5c09012SAndroid Build Coastguard Worker // shown even when none of them matches the condition. And results that 145*d5c09012SAndroid Build Coastguard Worker // are significantly more relevant to the search query can still trump 146*d5c09012SAndroid Build Coastguard Worker // your heavily favored but irrelevant items. 147*d5c09012SAndroid Build Coastguard Worker // 148*d5c09012SAndroid Build Coastguard Worker // Setting to -1.0 gives the item a big demotion. However, results that 149*d5c09012SAndroid Build Coastguard Worker // are deeply relevant might still be shown. The item will have an 150*d5c09012SAndroid Build Coastguard Worker // upstream battle to get a fairly high ranking, but it is not blocked out 151*d5c09012SAndroid Build Coastguard Worker // completely. 152*d5c09012SAndroid Build Coastguard Worker // 153*d5c09012SAndroid Build Coastguard Worker // Setting to 0.0 means no boost applied. The boosting condition is 154*d5c09012SAndroid Build Coastguard Worker // ignored. 155*d5c09012SAndroid Build Coastguard Worker float boost = 1; 156*d5c09012SAndroid Build Coastguard Worker 157*d5c09012SAndroid Build Coastguard Worker // The filter can have a max size of 5000 characters. 158*d5c09012SAndroid Build Coastguard Worker // An expression which specifies which products to apply an action to. 159*d5c09012SAndroid Build Coastguard Worker // The syntax and supported fields are the same as a filter expression. See 160*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter] for 161*d5c09012SAndroid Build Coastguard Worker // detail syntax and limitations. 162*d5c09012SAndroid Build Coastguard Worker // 163*d5c09012SAndroid Build Coastguard Worker // Examples: 164*d5c09012SAndroid Build Coastguard Worker // 165*d5c09012SAndroid Build Coastguard Worker // * To boost products with product ID "product_1" or "product_2", and 166*d5c09012SAndroid Build Coastguard Worker // color 167*d5c09012SAndroid Build Coastguard Worker // "Red" or "Blue":<br> 168*d5c09012SAndroid Build Coastguard Worker // *(id: ANY("product_1", "product_2"))<br>* 169*d5c09012SAndroid Build Coastguard Worker // *AND<br>* 170*d5c09012SAndroid Build Coastguard Worker // *(colorFamilies: ANY("Red", "Blue"))<br>* 171*d5c09012SAndroid Build Coastguard Worker string products_filter = 2; 172*d5c09012SAndroid Build Coastguard Worker } 173*d5c09012SAndroid Build Coastguard Worker 174*d5c09012SAndroid Build Coastguard Worker // * Rule Condition: 175*d5c09012SAndroid Build Coastguard Worker // - No 176*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2.Condition.query_terms] 177*d5c09012SAndroid Build Coastguard Worker // provided is a global match. 178*d5c09012SAndroid Build Coastguard Worker // - 1 or more 179*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2.Condition.query_terms] 180*d5c09012SAndroid Build Coastguard Worker // provided are combined with OR operator. 181*d5c09012SAndroid Build Coastguard Worker // * Action Input: The request query and filter that are applied to the 182*d5c09012SAndroid Build Coastguard Worker // retrieved products, in addition to any filters already provided with the 183*d5c09012SAndroid Build Coastguard Worker // SearchRequest. The AND operator is used to combine the query's existing 184*d5c09012SAndroid Build Coastguard Worker // filters with the filter rule(s). NOTE: May result in 0 results when 185*d5c09012SAndroid Build Coastguard Worker // filters conflict. 186*d5c09012SAndroid Build Coastguard Worker // * Action Result: Filters the returned objects to be ONLY those that passed 187*d5c09012SAndroid Build Coastguard Worker // the filter. 188*d5c09012SAndroid Build Coastguard Worker message FilterAction { 189*d5c09012SAndroid Build Coastguard Worker // A filter to apply on the matching condition results. Supported features: 190*d5c09012SAndroid Build Coastguard Worker // 191*d5c09012SAndroid Build Coastguard Worker // * [filter][google.cloud.retail.v2.Rule.FilterAction.filter] must be set. 192*d5c09012SAndroid Build Coastguard Worker // * Filter syntax is identical to 193*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter]. See 194*d5c09012SAndroid Build Coastguard Worker // more 195*d5c09012SAndroid Build Coastguard Worker // details at the Retail Search 196*d5c09012SAndroid Build Coastguard Worker // [user guide](/retail/search/docs/filter-and-order#filter). 197*d5c09012SAndroid Build Coastguard Worker // * To filter products with product ID "product_1" or "product_2", and 198*d5c09012SAndroid Build Coastguard Worker // color 199*d5c09012SAndroid Build Coastguard Worker // "Red" or "Blue":<br> 200*d5c09012SAndroid Build Coastguard Worker // *(id: ANY("product_1", "product_2"))<br>* 201*d5c09012SAndroid Build Coastguard Worker // *AND<br>* 202*d5c09012SAndroid Build Coastguard Worker // *(colorFamilies: ANY("Red", "Blue"))<br>* 203*d5c09012SAndroid Build Coastguard Worker string filter = 1; 204*d5c09012SAndroid Build Coastguard Worker } 205*d5c09012SAndroid Build Coastguard Worker 206*d5c09012SAndroid Build Coastguard Worker // Redirects a shopper to a specific page. 207*d5c09012SAndroid Build Coastguard Worker // 208*d5c09012SAndroid Build Coastguard Worker // * Rule Condition: 209*d5c09012SAndroid Build Coastguard Worker // - Must specify 210*d5c09012SAndroid Build Coastguard Worker // [Condition.query_terms][google.cloud.retail.v2.Condition.query_terms]. 211*d5c09012SAndroid Build Coastguard Worker // * Action Input: Request Query 212*d5c09012SAndroid Build Coastguard Worker // * Action Result: Redirects shopper to provided uri. 213*d5c09012SAndroid Build Coastguard Worker message RedirectAction { 214*d5c09012SAndroid Build Coastguard Worker // URL must have length equal or less than 2000 characters. 215*d5c09012SAndroid Build Coastguard Worker string redirect_uri = 1; 216*d5c09012SAndroid Build Coastguard Worker } 217*d5c09012SAndroid Build Coastguard Worker 218*d5c09012SAndroid Build Coastguard Worker // Creates a set of terms that will be treated as synonyms of each other. 219*d5c09012SAndroid Build Coastguard Worker // Example: synonyms of "sneakers" and "shoes": 220*d5c09012SAndroid Build Coastguard Worker // 221*d5c09012SAndroid Build Coastguard Worker // * "sneakers" will use a synonym of "shoes". 222*d5c09012SAndroid Build Coastguard Worker // * "shoes" will use a synonym of "sneakers". 223*d5c09012SAndroid Build Coastguard Worker message TwowaySynonymsAction { 224*d5c09012SAndroid Build Coastguard Worker // Defines a set of synonyms. 225*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 synonyms. 226*d5c09012SAndroid Build Coastguard Worker // Must specify at least 2 synonyms. 227*d5c09012SAndroid Build Coastguard Worker repeated string synonyms = 1; 228*d5c09012SAndroid Build Coastguard Worker } 229*d5c09012SAndroid Build Coastguard Worker 230*d5c09012SAndroid Build Coastguard Worker // Maps a set of terms to a set of synonyms. 231*d5c09012SAndroid Build Coastguard Worker // Set of synonyms will be treated as synonyms of each query term only. 232*d5c09012SAndroid Build Coastguard Worker // `query_terms` will not be treated as synonyms of each other. 233*d5c09012SAndroid Build Coastguard Worker // Example: "sneakers" will use a synonym of "shoes". 234*d5c09012SAndroid Build Coastguard Worker // "shoes" will not use a synonym of "sneakers". 235*d5c09012SAndroid Build Coastguard Worker message OnewaySynonymsAction { 236*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 237*d5c09012SAndroid Build Coastguard Worker // Will treat synonyms as their synonyms. 238*d5c09012SAndroid Build Coastguard Worker // Not themselves synonyms of the synonyms. 239*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 240*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 3; 241*d5c09012SAndroid Build Coastguard Worker 242*d5c09012SAndroid Build Coastguard Worker // Defines a set of synonyms. 243*d5c09012SAndroid Build Coastguard Worker // Cannot contain duplicates. 244*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 synonyms. 245*d5c09012SAndroid Build Coastguard Worker repeated string synonyms = 4; 246*d5c09012SAndroid Build Coastguard Worker 247*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 248*d5c09012SAndroid Build Coastguard Worker repeated string oneway_terms = 2; 249*d5c09012SAndroid Build Coastguard Worker } 250*d5c09012SAndroid Build Coastguard Worker 251*d5c09012SAndroid Build Coastguard Worker // Prevents `query_term` from being associated with specified terms during 252*d5c09012SAndroid Build Coastguard Worker // search. 253*d5c09012SAndroid Build Coastguard Worker // Example: Don't associate "gShoe" and "cheap". 254*d5c09012SAndroid Build Coastguard Worker message DoNotAssociateAction { 255*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 256*d5c09012SAndroid Build Coastguard Worker // Will not consider do_not_associate_terms for search if in search query. 257*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 258*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 2; 259*d5c09012SAndroid Build Coastguard Worker 260*d5c09012SAndroid Build Coastguard Worker // Cannot contain duplicates or the query term. 261*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 262*d5c09012SAndroid Build Coastguard Worker repeated string do_not_associate_terms = 3; 263*d5c09012SAndroid Build Coastguard Worker 264*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 265*d5c09012SAndroid Build Coastguard Worker repeated string terms = 1; 266*d5c09012SAndroid Build Coastguard Worker } 267*d5c09012SAndroid Build Coastguard Worker 268*d5c09012SAndroid Build Coastguard Worker // Replaces a term in the query. Multiple replacement candidates can be 269*d5c09012SAndroid Build Coastguard Worker // specified. All `query_terms` will be replaced with the replacement term. 270*d5c09012SAndroid Build Coastguard Worker // Example: Replace "gShoe" with "google shoe". 271*d5c09012SAndroid Build Coastguard Worker message ReplacementAction { 272*d5c09012SAndroid Build Coastguard Worker // Terms from the search query. 273*d5c09012SAndroid Build Coastguard Worker // Will be replaced by replacement term. 274*d5c09012SAndroid Build Coastguard Worker // Can specify up to 100 terms. 275*d5c09012SAndroid Build Coastguard Worker repeated string query_terms = 2; 276*d5c09012SAndroid Build Coastguard Worker 277*d5c09012SAndroid Build Coastguard Worker // Term that will be used for replacement. 278*d5c09012SAndroid Build Coastguard Worker string replacement_term = 3; 279*d5c09012SAndroid Build Coastguard Worker 280*d5c09012SAndroid Build Coastguard Worker // Will be [deprecated = true] post migration; 281*d5c09012SAndroid Build Coastguard Worker string term = 1; 282*d5c09012SAndroid Build Coastguard Worker } 283*d5c09012SAndroid Build Coastguard Worker 284*d5c09012SAndroid Build Coastguard Worker // Prevents a term in the query from being used in search. 285*d5c09012SAndroid Build Coastguard Worker // Example: Don't search for "shoddy". 286*d5c09012SAndroid Build Coastguard Worker message IgnoreAction { 287*d5c09012SAndroid Build Coastguard Worker // Terms to ignore in the search query. 288*d5c09012SAndroid Build Coastguard Worker repeated string ignore_terms = 1; 289*d5c09012SAndroid Build Coastguard Worker } 290*d5c09012SAndroid Build Coastguard Worker 291*d5c09012SAndroid Build Coastguard Worker // An action must be provided. 292*d5c09012SAndroid Build Coastguard Worker oneof action { 293*d5c09012SAndroid Build Coastguard Worker // A boost action. 294*d5c09012SAndroid Build Coastguard Worker BoostAction boost_action = 2; 295*d5c09012SAndroid Build Coastguard Worker 296*d5c09012SAndroid Build Coastguard Worker // Redirects a shopper to a specific page. 297*d5c09012SAndroid Build Coastguard Worker RedirectAction redirect_action = 3; 298*d5c09012SAndroid Build Coastguard Worker 299*d5c09012SAndroid Build Coastguard Worker // Treats specific term as a synonym with a group of terms. 300*d5c09012SAndroid Build Coastguard Worker // Group of terms will not be treated as synonyms with the specific term. 301*d5c09012SAndroid Build Coastguard Worker OnewaySynonymsAction oneway_synonyms_action = 6; 302*d5c09012SAndroid Build Coastguard Worker 303*d5c09012SAndroid Build Coastguard Worker // Prevents term from being associated with other terms. 304*d5c09012SAndroid Build Coastguard Worker DoNotAssociateAction do_not_associate_action = 7; 305*d5c09012SAndroid Build Coastguard Worker 306*d5c09012SAndroid Build Coastguard Worker // Replaces specific terms in the query. 307*d5c09012SAndroid Build Coastguard Worker ReplacementAction replacement_action = 8; 308*d5c09012SAndroid Build Coastguard Worker 309*d5c09012SAndroid Build Coastguard Worker // Ignores specific terms from query during search. 310*d5c09012SAndroid Build Coastguard Worker IgnoreAction ignore_action = 9; 311*d5c09012SAndroid Build Coastguard Worker 312*d5c09012SAndroid Build Coastguard Worker // Filters results. 313*d5c09012SAndroid Build Coastguard Worker FilterAction filter_action = 10; 314*d5c09012SAndroid Build Coastguard Worker 315*d5c09012SAndroid Build Coastguard Worker // Treats a set of terms as synonyms of one another. 316*d5c09012SAndroid Build Coastguard Worker TwowaySynonymsAction twoway_synonyms_action = 11; 317*d5c09012SAndroid Build Coastguard Worker } 318*d5c09012SAndroid Build Coastguard Worker 319*d5c09012SAndroid Build Coastguard Worker // Required. The condition that triggers the rule. 320*d5c09012SAndroid Build Coastguard Worker // If the condition is empty, the rule will always apply. 321*d5c09012SAndroid Build Coastguard Worker Condition condition = 1 [(google.api.field_behavior) = REQUIRED]; 322*d5c09012SAndroid Build Coastguard Worker} 323*d5c09012SAndroid Build Coastguard Worker 324*d5c09012SAndroid Build Coastguard Worker// An intended audience of the [Product][google.cloud.retail.v2.Product] for 325*d5c09012SAndroid Build Coastguard Worker// whom it's sold. 326*d5c09012SAndroid Build Coastguard Workermessage Audience { 327*d5c09012SAndroid Build Coastguard Worker // The genders of the audience. Strongly encouraged to use the standard 328*d5c09012SAndroid Build Coastguard Worker // values: "male", "female", "unisex". 329*d5c09012SAndroid Build Coastguard Worker // 330*d5c09012SAndroid Build Coastguard Worker // At most 5 values are allowed. Each value must be a UTF-8 encoded string 331*d5c09012SAndroid Build Coastguard Worker // with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error 332*d5c09012SAndroid Build Coastguard Worker // is returned. 333*d5c09012SAndroid Build Coastguard Worker // 334*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 335*d5c09012SAndroid Build Coastguard Worker // [gender](https://support.google.com/merchants/answer/6324479). Schema.org 336*d5c09012SAndroid Build Coastguard Worker // property 337*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedGender](https://schema.org/suggestedGender). 338*d5c09012SAndroid Build Coastguard Worker repeated string genders = 1; 339*d5c09012SAndroid Build Coastguard Worker 340*d5c09012SAndroid Build Coastguard Worker // The age groups of the audience. Strongly encouraged to use the standard 341*d5c09012SAndroid Build Coastguard Worker // values: "newborn" (up to 3 months old), "infant" (3–12 months old), 342*d5c09012SAndroid Build Coastguard Worker // "toddler" (1–5 years old), "kids" (5–13 years old), "adult" (typically 343*d5c09012SAndroid Build Coastguard Worker // teens or older). 344*d5c09012SAndroid Build Coastguard Worker // 345*d5c09012SAndroid Build Coastguard Worker // At most 5 values are allowed. Each value must be a UTF-8 encoded string 346*d5c09012SAndroid Build Coastguard Worker // with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error 347*d5c09012SAndroid Build Coastguard Worker // is returned. 348*d5c09012SAndroid Build Coastguard Worker // 349*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 350*d5c09012SAndroid Build Coastguard Worker // [age_group](https://support.google.com/merchants/answer/6324463). 351*d5c09012SAndroid Build Coastguard Worker // Schema.org property 352*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedMinAge](https://schema.org/suggestedMinAge) and 353*d5c09012SAndroid Build Coastguard Worker // [Product.audience.suggestedMaxAge](https://schema.org/suggestedMaxAge). 354*d5c09012SAndroid Build Coastguard Worker repeated string age_groups = 2; 355*d5c09012SAndroid Build Coastguard Worker} 356*d5c09012SAndroid Build Coastguard Worker 357*d5c09012SAndroid Build Coastguard Worker// The color information of a [Product][google.cloud.retail.v2.Product]. 358*d5c09012SAndroid Build Coastguard Workermessage ColorInfo { 359*d5c09012SAndroid Build Coastguard Worker // The standard color families. Strongly recommended to use the following 360*d5c09012SAndroid Build Coastguard Worker // standard color groups: "Red", "Pink", "Orange", "Yellow", "Purple", 361*d5c09012SAndroid Build Coastguard Worker // "Green", "Cyan", "Blue", "Brown", "White", "Gray", "Black" and 362*d5c09012SAndroid Build Coastguard Worker // "Mixed". Normally it is expected to have only 1 color family. May consider 363*d5c09012SAndroid Build Coastguard Worker // using single "Mixed" instead of multiple values. 364*d5c09012SAndroid Build Coastguard Worker // 365*d5c09012SAndroid Build Coastguard Worker // A maximum of 5 values are allowed. Each value must be a UTF-8 encoded 366*d5c09012SAndroid Build Coastguard Worker // string with a length limit of 128 characters. Otherwise, an 367*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 368*d5c09012SAndroid Build Coastguard Worker // 369*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 370*d5c09012SAndroid Build Coastguard Worker // [color](https://support.google.com/merchants/answer/6324487). Schema.org 371*d5c09012SAndroid Build Coastguard Worker // property [Product.color](https://schema.org/color). 372*d5c09012SAndroid Build Coastguard Worker repeated string color_families = 1; 373*d5c09012SAndroid Build Coastguard Worker 374*d5c09012SAndroid Build Coastguard Worker // The color display names, which may be different from standard color family 375*d5c09012SAndroid Build Coastguard Worker // names, such as the color aliases used in the website frontend. Normally 376*d5c09012SAndroid Build Coastguard Worker // it is expected to have only 1 color. May consider using single "Mixed" 377*d5c09012SAndroid Build Coastguard Worker // instead of multiple values. 378*d5c09012SAndroid Build Coastguard Worker // 379*d5c09012SAndroid Build Coastguard Worker // A maximum of 75 colors are allowed. Each value must be a UTF-8 encoded 380*d5c09012SAndroid Build Coastguard Worker // string with a length limit of 128 characters. Otherwise, an 381*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 382*d5c09012SAndroid Build Coastguard Worker // 383*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 384*d5c09012SAndroid Build Coastguard Worker // [color](https://support.google.com/merchants/answer/6324487). Schema.org 385*d5c09012SAndroid Build Coastguard Worker // property [Product.color](https://schema.org/color). 386*d5c09012SAndroid Build Coastguard Worker repeated string colors = 2; 387*d5c09012SAndroid Build Coastguard Worker} 388*d5c09012SAndroid Build Coastguard Worker 389*d5c09012SAndroid Build Coastguard Worker// A custom attribute that is not explicitly modeled in 390*d5c09012SAndroid Build Coastguard Worker// [Product][google.cloud.retail.v2.Product]. 391*d5c09012SAndroid Build Coastguard Workermessage CustomAttribute { 392*d5c09012SAndroid Build Coastguard Worker // The textual values of this custom attribute. For example, `["yellow", 393*d5c09012SAndroid Build Coastguard Worker // "green"]` when the key is "color". 394*d5c09012SAndroid Build Coastguard Worker // 395*d5c09012SAndroid Build Coastguard Worker // Empty string is not allowed. Otherwise, an INVALID_ARGUMENT error is 396*d5c09012SAndroid Build Coastguard Worker // returned. 397*d5c09012SAndroid Build Coastguard Worker // 398*d5c09012SAndroid Build Coastguard Worker // Exactly one of [text][google.cloud.retail.v2.CustomAttribute.text] or 399*d5c09012SAndroid Build Coastguard Worker // [numbers][google.cloud.retail.v2.CustomAttribute.numbers] should be set. 400*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 401*d5c09012SAndroid Build Coastguard Worker repeated string text = 1; 402*d5c09012SAndroid Build Coastguard Worker 403*d5c09012SAndroid Build Coastguard Worker // The numerical values of this custom attribute. For example, `[2.3, 15.4]` 404*d5c09012SAndroid Build Coastguard Worker // when the key is "lengths_cm". 405*d5c09012SAndroid Build Coastguard Worker // 406*d5c09012SAndroid Build Coastguard Worker // Exactly one of [text][google.cloud.retail.v2.CustomAttribute.text] or 407*d5c09012SAndroid Build Coastguard Worker // [numbers][google.cloud.retail.v2.CustomAttribute.numbers] should be set. 408*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 409*d5c09012SAndroid Build Coastguard Worker repeated double numbers = 2; 410*d5c09012SAndroid Build Coastguard Worker 411*d5c09012SAndroid Build Coastguard Worker // This field is normally ignored unless 412*d5c09012SAndroid Build Coastguard Worker // [AttributesConfig.attribute_config_level][google.cloud.retail.v2.AttributesConfig.attribute_config_level] 413*d5c09012SAndroid Build Coastguard Worker // of the [Catalog][google.cloud.retail.v2.Catalog] is set to the deprecated 414*d5c09012SAndroid Build Coastguard Worker // 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about product-level 415*d5c09012SAndroid Build Coastguard Worker // attribute configuration, see [Configuration 416*d5c09012SAndroid Build Coastguard Worker // modes](https://cloud.google.com/retail/docs/attribute-config#config-modes). 417*d5c09012SAndroid Build Coastguard Worker // If true, custom attribute values are searchable by text queries in 418*d5c09012SAndroid Build Coastguard Worker // [SearchService.Search][google.cloud.retail.v2.SearchService.Search]. 419*d5c09012SAndroid Build Coastguard Worker // 420*d5c09012SAndroid Build Coastguard Worker // This field is ignored in a [UserEvent][google.cloud.retail.v2.UserEvent]. 421*d5c09012SAndroid Build Coastguard Worker // 422*d5c09012SAndroid Build Coastguard Worker // Only set if type [text][google.cloud.retail.v2.CustomAttribute.text] is 423*d5c09012SAndroid Build Coastguard Worker // set. Otherwise, a INVALID_ARGUMENT error is returned. 424*d5c09012SAndroid Build Coastguard Worker optional bool searchable = 3 [deprecated = true]; 425*d5c09012SAndroid Build Coastguard Worker 426*d5c09012SAndroid Build Coastguard Worker // This field is normally ignored unless 427*d5c09012SAndroid Build Coastguard Worker // [AttributesConfig.attribute_config_level][google.cloud.retail.v2.AttributesConfig.attribute_config_level] 428*d5c09012SAndroid Build Coastguard Worker // of the [Catalog][google.cloud.retail.v2.Catalog] is set to the deprecated 429*d5c09012SAndroid Build Coastguard Worker // 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about product-level 430*d5c09012SAndroid Build Coastguard Worker // attribute configuration, see [Configuration 431*d5c09012SAndroid Build Coastguard Worker // modes](https://cloud.google.com/retail/docs/attribute-config#config-modes). 432*d5c09012SAndroid Build Coastguard Worker // If true, custom attribute values are indexed, so that they can be filtered, 433*d5c09012SAndroid Build Coastguard Worker // faceted or boosted in 434*d5c09012SAndroid Build Coastguard Worker // [SearchService.Search][google.cloud.retail.v2.SearchService.Search]. 435*d5c09012SAndroid Build Coastguard Worker // 436*d5c09012SAndroid Build Coastguard Worker // This field is ignored in a [UserEvent][google.cloud.retail.v2.UserEvent]. 437*d5c09012SAndroid Build Coastguard Worker // 438*d5c09012SAndroid Build Coastguard Worker // See [SearchRequest.filter][google.cloud.retail.v2.SearchRequest.filter], 439*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.facet_specs][google.cloud.retail.v2.SearchRequest.facet_specs] 440*d5c09012SAndroid Build Coastguard Worker // and 441*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.boost_spec][google.cloud.retail.v2.SearchRequest.boost_spec] 442*d5c09012SAndroid Build Coastguard Worker // for more details. 443*d5c09012SAndroid Build Coastguard Worker optional bool indexable = 4 [deprecated = true]; 444*d5c09012SAndroid Build Coastguard Worker} 445*d5c09012SAndroid Build Coastguard Worker 446*d5c09012SAndroid Build Coastguard Worker// Fulfillment information, such as the store IDs for in-store pickup or region 447*d5c09012SAndroid Build Coastguard Worker// IDs for different shipping methods. 448*d5c09012SAndroid Build Coastguard Workermessage FulfillmentInfo { 449*d5c09012SAndroid Build Coastguard Worker // The fulfillment type, including commonly used types (such as pickup in 450*d5c09012SAndroid Build Coastguard Worker // store and same day delivery), and custom types. Customers have to map 451*d5c09012SAndroid Build Coastguard Worker // custom types to their display names before rendering UI. 452*d5c09012SAndroid Build Coastguard Worker // 453*d5c09012SAndroid Build Coastguard Worker // Supported values: 454*d5c09012SAndroid Build Coastguard Worker // 455*d5c09012SAndroid Build Coastguard Worker // * "pickup-in-store" 456*d5c09012SAndroid Build Coastguard Worker // * "ship-to-store" 457*d5c09012SAndroid Build Coastguard Worker // * "same-day-delivery" 458*d5c09012SAndroid Build Coastguard Worker // * "next-day-delivery" 459*d5c09012SAndroid Build Coastguard Worker // * "custom-type-1" 460*d5c09012SAndroid Build Coastguard Worker // * "custom-type-2" 461*d5c09012SAndroid Build Coastguard Worker // * "custom-type-3" 462*d5c09012SAndroid Build Coastguard Worker // * "custom-type-4" 463*d5c09012SAndroid Build Coastguard Worker // * "custom-type-5" 464*d5c09012SAndroid Build Coastguard Worker // 465*d5c09012SAndroid Build Coastguard Worker // If this field is set to an invalid value other than these, an 466*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 467*d5c09012SAndroid Build Coastguard Worker string type = 1; 468*d5c09012SAndroid Build Coastguard Worker 469*d5c09012SAndroid Build Coastguard Worker // The IDs for this [type][google.cloud.retail.v2.FulfillmentInfo.type], such 470*d5c09012SAndroid Build Coastguard Worker // as the store IDs for 471*d5c09012SAndroid Build Coastguard Worker // [FulfillmentInfo.type.pickup-in-store][google.cloud.retail.v2.FulfillmentInfo.type] 472*d5c09012SAndroid Build Coastguard Worker // or the region IDs for 473*d5c09012SAndroid Build Coastguard Worker // [FulfillmentInfo.type.same-day-delivery][google.cloud.retail.v2.FulfillmentInfo.type]. 474*d5c09012SAndroid Build Coastguard Worker // 475*d5c09012SAndroid Build Coastguard Worker // A maximum of 3000 values are allowed. Each value must be a string with a 476*d5c09012SAndroid Build Coastguard Worker // length limit of 30 characters, matching the pattern `[a-zA-Z0-9_-]+`, such 477*d5c09012SAndroid Build Coastguard Worker // as "store1" or "REGION-2". Otherwise, an INVALID_ARGUMENT error is 478*d5c09012SAndroid Build Coastguard Worker // returned. 479*d5c09012SAndroid Build Coastguard Worker repeated string place_ids = 2; 480*d5c09012SAndroid Build Coastguard Worker} 481*d5c09012SAndroid Build Coastguard Worker 482*d5c09012SAndroid Build Coastguard Worker// [Product][google.cloud.retail.v2.Product] image. Recommendations AI and 483*d5c09012SAndroid Build Coastguard Worker// Retail Search do not use product images to improve prediction and search 484*d5c09012SAndroid Build Coastguard Worker// results. However, product images can be returned in results, and are shown in 485*d5c09012SAndroid Build Coastguard Worker// prediction or search previews in the console. 486*d5c09012SAndroid Build Coastguard Workermessage Image { 487*d5c09012SAndroid Build Coastguard Worker // Required. URI of the image. 488*d5c09012SAndroid Build Coastguard Worker // 489*d5c09012SAndroid Build Coastguard Worker // This field must be a valid UTF-8 encoded URI with a length limit of 5,000 490*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 491*d5c09012SAndroid Build Coastguard Worker // 492*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 493*d5c09012SAndroid Build Coastguard Worker // [image_link](https://support.google.com/merchants/answer/6324350). 494*d5c09012SAndroid Build Coastguard Worker // Schema.org property [Product.image](https://schema.org/image). 495*d5c09012SAndroid Build Coastguard Worker string uri = 1 [(google.api.field_behavior) = REQUIRED]; 496*d5c09012SAndroid Build Coastguard Worker 497*d5c09012SAndroid Build Coastguard Worker // Height of the image in number of pixels. 498*d5c09012SAndroid Build Coastguard Worker // 499*d5c09012SAndroid Build Coastguard Worker // This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 500*d5c09012SAndroid Build Coastguard Worker // returned. 501*d5c09012SAndroid Build Coastguard Worker int32 height = 2; 502*d5c09012SAndroid Build Coastguard Worker 503*d5c09012SAndroid Build Coastguard Worker // Width of the image in number of pixels. 504*d5c09012SAndroid Build Coastguard Worker // 505*d5c09012SAndroid Build Coastguard Worker // This field must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 506*d5c09012SAndroid Build Coastguard Worker // returned. 507*d5c09012SAndroid Build Coastguard Worker int32 width = 3; 508*d5c09012SAndroid Build Coastguard Worker} 509*d5c09012SAndroid Build Coastguard Worker 510*d5c09012SAndroid Build Coastguard Worker// A floating point interval. 511*d5c09012SAndroid Build Coastguard Workermessage Interval { 512*d5c09012SAndroid Build Coastguard Worker // The lower bound of the interval. If neither of the min fields are set, then 513*d5c09012SAndroid Build Coastguard Worker // the lower bound is negative infinity. 514*d5c09012SAndroid Build Coastguard Worker // 515*d5c09012SAndroid Build Coastguard Worker // This field must not be larger than max. 516*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 517*d5c09012SAndroid Build Coastguard Worker oneof min { 518*d5c09012SAndroid Build Coastguard Worker // Inclusive lower bound. 519*d5c09012SAndroid Build Coastguard Worker double minimum = 1; 520*d5c09012SAndroid Build Coastguard Worker 521*d5c09012SAndroid Build Coastguard Worker // Exclusive lower bound. 522*d5c09012SAndroid Build Coastguard Worker double exclusive_minimum = 2; 523*d5c09012SAndroid Build Coastguard Worker } 524*d5c09012SAndroid Build Coastguard Worker 525*d5c09012SAndroid Build Coastguard Worker // The upper bound of the interval. If neither of the max fields are set, then 526*d5c09012SAndroid Build Coastguard Worker // the upper bound is positive infinity. 527*d5c09012SAndroid Build Coastguard Worker // 528*d5c09012SAndroid Build Coastguard Worker // This field must be not smaller than min. 529*d5c09012SAndroid Build Coastguard Worker // Otherwise, an INVALID_ARGUMENT error is returned. 530*d5c09012SAndroid Build Coastguard Worker oneof max { 531*d5c09012SAndroid Build Coastguard Worker // Inclusive upper bound. 532*d5c09012SAndroid Build Coastguard Worker double maximum = 3; 533*d5c09012SAndroid Build Coastguard Worker 534*d5c09012SAndroid Build Coastguard Worker // Exclusive upper bound. 535*d5c09012SAndroid Build Coastguard Worker double exclusive_maximum = 4; 536*d5c09012SAndroid Build Coastguard Worker } 537*d5c09012SAndroid Build Coastguard Worker} 538*d5c09012SAndroid Build Coastguard Worker 539*d5c09012SAndroid Build Coastguard Worker// The price information of a [Product][google.cloud.retail.v2.Product]. 540*d5c09012SAndroid Build Coastguard Workermessage PriceInfo { 541*d5c09012SAndroid Build Coastguard Worker // The price range of all 542*d5c09012SAndroid Build Coastguard Worker // [variant][google.cloud.retail.v2.Product.Type.VARIANT] 543*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product] having the same 544*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2.Product.primary_product_id]. 545*d5c09012SAndroid Build Coastguard Worker message PriceRange { 546*d5c09012SAndroid Build Coastguard Worker // The inclusive 547*d5c09012SAndroid Build Coastguard Worker // [Product.pricing_info.price][google.cloud.retail.v2.PriceInfo.price] 548*d5c09012SAndroid Build Coastguard Worker // interval of all [variant][google.cloud.retail.v2.Product.Type.VARIANT] 549*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product] having the same 550*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2.Product.primary_product_id]. 551*d5c09012SAndroid Build Coastguard Worker Interval price = 1; 552*d5c09012SAndroid Build Coastguard Worker 553*d5c09012SAndroid Build Coastguard Worker // The inclusive 554*d5c09012SAndroid Build Coastguard Worker // [Product.pricing_info.original_price][google.cloud.retail.v2.PriceInfo.original_price] 555*d5c09012SAndroid Build Coastguard Worker // internal of all [variant][google.cloud.retail.v2.Product.Type.VARIANT] 556*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product] having the same 557*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2.Product.primary_product_id]. 558*d5c09012SAndroid Build Coastguard Worker Interval original_price = 2; 559*d5c09012SAndroid Build Coastguard Worker } 560*d5c09012SAndroid Build Coastguard Worker 561*d5c09012SAndroid Build Coastguard Worker // The 3-letter currency code defined in [ISO 562*d5c09012SAndroid Build Coastguard Worker // 4217](https://www.iso.org/iso-4217-currency-codes.html). 563*d5c09012SAndroid Build Coastguard Worker // 564*d5c09012SAndroid Build Coastguard Worker // If this field is an unrecognizable currency code, an INVALID_ARGUMENT 565*d5c09012SAndroid Build Coastguard Worker // error is returned. 566*d5c09012SAndroid Build Coastguard Worker // 567*d5c09012SAndroid Build Coastguard Worker // The [Product.Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] 568*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product]s with the same 569*d5c09012SAndroid Build Coastguard Worker // [Product.primary_product_id][google.cloud.retail.v2.Product.primary_product_id] 570*d5c09012SAndroid Build Coastguard Worker // must share the same 571*d5c09012SAndroid Build Coastguard Worker // [currency_code][google.cloud.retail.v2.PriceInfo.currency_code]. Otherwise, 572*d5c09012SAndroid Build Coastguard Worker // a FAILED_PRECONDITION error is returned. 573*d5c09012SAndroid Build Coastguard Worker string currency_code = 1; 574*d5c09012SAndroid Build Coastguard Worker 575*d5c09012SAndroid Build Coastguard Worker // Price of the product. 576*d5c09012SAndroid Build Coastguard Worker // 577*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 578*d5c09012SAndroid Build Coastguard Worker // [price](https://support.google.com/merchants/answer/6324371). Schema.org 579*d5c09012SAndroid Build Coastguard Worker // property [Offer.price](https://schema.org/price). 580*d5c09012SAndroid Build Coastguard Worker float price = 2; 581*d5c09012SAndroid Build Coastguard Worker 582*d5c09012SAndroid Build Coastguard Worker // Price of the product without any discount. If zero, by default set to be 583*d5c09012SAndroid Build Coastguard Worker // the [price][google.cloud.retail.v2.PriceInfo.price]. If set, 584*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2.PriceInfo.original_price] should be 585*d5c09012SAndroid Build Coastguard Worker // greater than or equal to [price][google.cloud.retail.v2.PriceInfo.price], 586*d5c09012SAndroid Build Coastguard Worker // otherwise an INVALID_ARGUMENT error is thrown. 587*d5c09012SAndroid Build Coastguard Worker float original_price = 3; 588*d5c09012SAndroid Build Coastguard Worker 589*d5c09012SAndroid Build Coastguard Worker // The costs associated with the sale of a particular product. Used for gross 590*d5c09012SAndroid Build Coastguard Worker // profit reporting. 591*d5c09012SAndroid Build Coastguard Worker // 592*d5c09012SAndroid Build Coastguard Worker // * Profit = [price][google.cloud.retail.v2.PriceInfo.price] - 593*d5c09012SAndroid Build Coastguard Worker // [cost][google.cloud.retail.v2.PriceInfo.cost] 594*d5c09012SAndroid Build Coastguard Worker // 595*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 596*d5c09012SAndroid Build Coastguard Worker // [cost_of_goods_sold](https://support.google.com/merchants/answer/9017895). 597*d5c09012SAndroid Build Coastguard Worker float cost = 4; 598*d5c09012SAndroid Build Coastguard Worker 599*d5c09012SAndroid Build Coastguard Worker // The timestamp when the [price][google.cloud.retail.v2.PriceInfo.price] 600*d5c09012SAndroid Build Coastguard Worker // starts to be effective. This can be set as a future timestamp, and the 601*d5c09012SAndroid Build Coastguard Worker // [price][google.cloud.retail.v2.PriceInfo.price] is only used for search 602*d5c09012SAndroid Build Coastguard Worker // after 603*d5c09012SAndroid Build Coastguard Worker // [price_effective_time][google.cloud.retail.v2.PriceInfo.price_effective_time]. 604*d5c09012SAndroid Build Coastguard Worker // If so, the 605*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2.PriceInfo.original_price] must be 606*d5c09012SAndroid Build Coastguard Worker // set and [original_price][google.cloud.retail.v2.PriceInfo.original_price] 607*d5c09012SAndroid Build Coastguard Worker // is used before 608*d5c09012SAndroid Build Coastguard Worker // [price_effective_time][google.cloud.retail.v2.PriceInfo.price_effective_time]. 609*d5c09012SAndroid Build Coastguard Worker // 610*d5c09012SAndroid Build Coastguard Worker // Do not set if [price][google.cloud.retail.v2.PriceInfo.price] is always 611*d5c09012SAndroid Build Coastguard Worker // effective because it will cause additional latency during search. 612*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp price_effective_time = 5; 613*d5c09012SAndroid Build Coastguard Worker 614*d5c09012SAndroid Build Coastguard Worker // The timestamp when the [price][google.cloud.retail.v2.PriceInfo.price] 615*d5c09012SAndroid Build Coastguard Worker // stops to be effective. The [price][google.cloud.retail.v2.PriceInfo.price] 616*d5c09012SAndroid Build Coastguard Worker // is used for search before 617*d5c09012SAndroid Build Coastguard Worker // [price_expire_time][google.cloud.retail.v2.PriceInfo.price_expire_time]. If 618*d5c09012SAndroid Build Coastguard Worker // this field is set, the 619*d5c09012SAndroid Build Coastguard Worker // [original_price][google.cloud.retail.v2.PriceInfo.original_price] must be 620*d5c09012SAndroid Build Coastguard Worker // set and [original_price][google.cloud.retail.v2.PriceInfo.original_price] 621*d5c09012SAndroid Build Coastguard Worker // is used after 622*d5c09012SAndroid Build Coastguard Worker // [price_expire_time][google.cloud.retail.v2.PriceInfo.price_expire_time]. 623*d5c09012SAndroid Build Coastguard Worker // 624*d5c09012SAndroid Build Coastguard Worker // Do not set if [price][google.cloud.retail.v2.PriceInfo.price] is always 625*d5c09012SAndroid Build Coastguard Worker // effective because it will cause additional latency during search. 626*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp price_expire_time = 6; 627*d5c09012SAndroid Build Coastguard Worker 628*d5c09012SAndroid Build Coastguard Worker // Output only. The price range of all the child 629*d5c09012SAndroid Build Coastguard Worker // [Product.Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT] 630*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product]s grouped together on the 631*d5c09012SAndroid Build Coastguard Worker // [Product.Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 632*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product]. Only populated for 633*d5c09012SAndroid Build Coastguard Worker // [Product.Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY] 634*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product]s. 635*d5c09012SAndroid Build Coastguard Worker // 636*d5c09012SAndroid Build Coastguard Worker // Note: This field is OUTPUT_ONLY for 637*d5c09012SAndroid Build Coastguard Worker // [ProductService.GetProduct][google.cloud.retail.v2.ProductService.GetProduct]. 638*d5c09012SAndroid Build Coastguard Worker // Do not set this field in API requests. 639*d5c09012SAndroid Build Coastguard Worker PriceRange price_range = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; 640*d5c09012SAndroid Build Coastguard Worker} 641*d5c09012SAndroid Build Coastguard Worker 642*d5c09012SAndroid Build Coastguard Worker// The rating of a [Product][google.cloud.retail.v2.Product]. 643*d5c09012SAndroid Build Coastguard Workermessage Rating { 644*d5c09012SAndroid Build Coastguard Worker // The total number of ratings. This value is independent of the value of 645*d5c09012SAndroid Build Coastguard Worker // [rating_histogram][google.cloud.retail.v2.Rating.rating_histogram]. 646*d5c09012SAndroid Build Coastguard Worker // 647*d5c09012SAndroid Build Coastguard Worker // This value must be nonnegative. Otherwise, an INVALID_ARGUMENT error is 648*d5c09012SAndroid Build Coastguard Worker // returned. 649*d5c09012SAndroid Build Coastguard Worker int32 rating_count = 1; 650*d5c09012SAndroid Build Coastguard Worker 651*d5c09012SAndroid Build Coastguard Worker // The average rating of the [Product][google.cloud.retail.v2.Product]. 652*d5c09012SAndroid Build Coastguard Worker // 653*d5c09012SAndroid Build Coastguard Worker // The rating is scaled at 1-5. Otherwise, an INVALID_ARGUMENT error is 654*d5c09012SAndroid Build Coastguard Worker // returned. 655*d5c09012SAndroid Build Coastguard Worker float average_rating = 2; 656*d5c09012SAndroid Build Coastguard Worker 657*d5c09012SAndroid Build Coastguard Worker // List of rating counts per rating value (index = rating - 1). The list is 658*d5c09012SAndroid Build Coastguard Worker // empty if there is no rating. If the list is non-empty, its size is 659*d5c09012SAndroid Build Coastguard Worker // always 5. Otherwise, an INVALID_ARGUMENT error is returned. 660*d5c09012SAndroid Build Coastguard Worker // 661*d5c09012SAndroid Build Coastguard Worker // For example, [41, 14, 13, 47, 303]. It means that the 662*d5c09012SAndroid Build Coastguard Worker // [Product][google.cloud.retail.v2.Product] got 41 ratings with 1 star, 14 663*d5c09012SAndroid Build Coastguard Worker // ratings with 2 star, and so on. 664*d5c09012SAndroid Build Coastguard Worker repeated int32 rating_histogram = 3; 665*d5c09012SAndroid Build Coastguard Worker} 666*d5c09012SAndroid Build Coastguard Worker 667*d5c09012SAndroid Build Coastguard Worker// Information of an end user. 668*d5c09012SAndroid Build Coastguard Workermessage UserInfo { 669*d5c09012SAndroid Build Coastguard Worker // Highly recommended for logged-in users. Unique identifier for logged-in 670*d5c09012SAndroid Build Coastguard Worker // user, such as a user name. Don't set for anonymous users. 671*d5c09012SAndroid Build Coastguard Worker // 672*d5c09012SAndroid Build Coastguard Worker // Always use a hashed value for this ID. 673*d5c09012SAndroid Build Coastguard Worker // 674*d5c09012SAndroid Build Coastguard Worker // Don't set the field to the same fixed ID for different users. This mixes 675*d5c09012SAndroid Build Coastguard Worker // the event history of those users together, which results in degraded 676*d5c09012SAndroid Build Coastguard Worker // model quality. 677*d5c09012SAndroid Build Coastguard Worker // 678*d5c09012SAndroid Build Coastguard Worker // The field must be a UTF-8 encoded string with a length limit of 128 679*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 680*d5c09012SAndroid Build Coastguard Worker string user_id = 1; 681*d5c09012SAndroid Build Coastguard Worker 682*d5c09012SAndroid Build Coastguard Worker // The end user's IP address. This field is used to extract location 683*d5c09012SAndroid Build Coastguard Worker // information for personalization. 684*d5c09012SAndroid Build Coastguard Worker // 685*d5c09012SAndroid Build Coastguard Worker // This field must be either an IPv4 address (e.g. "104.133.9.80") or an IPv6 686*d5c09012SAndroid Build Coastguard Worker // address (e.g. "2001:0db8:85a3:0000:0000:8a2e:0370:7334"). Otherwise, an 687*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 688*d5c09012SAndroid Build Coastguard Worker // 689*d5c09012SAndroid Build Coastguard Worker // This should not be set when: 690*d5c09012SAndroid Build Coastguard Worker // 691*d5c09012SAndroid Build Coastguard Worker // * setting 692*d5c09012SAndroid Build Coastguard Worker // [SearchRequest.user_info][google.cloud.retail.v2.SearchRequest.user_info]. 693*d5c09012SAndroid Build Coastguard Worker // * using the JavaScript tag in 694*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2.UserEventService.CollectUserEvent] 695*d5c09012SAndroid Build Coastguard Worker // or if 696*d5c09012SAndroid Build Coastguard Worker // [direct_user_request][google.cloud.retail.v2.UserInfo.direct_user_request] 697*d5c09012SAndroid Build Coastguard Worker // is set. 698*d5c09012SAndroid Build Coastguard Worker string ip_address = 2; 699*d5c09012SAndroid Build Coastguard Worker 700*d5c09012SAndroid Build Coastguard Worker // User agent as included in the HTTP header. Required for getting 701*d5c09012SAndroid Build Coastguard Worker // [SearchResponse.sponsored_results][google.cloud.retail.v2.SearchResponse.sponsored_results]. 702*d5c09012SAndroid Build Coastguard Worker // 703*d5c09012SAndroid Build Coastguard Worker // The field must be a UTF-8 encoded string with a length limit of 1,000 704*d5c09012SAndroid Build Coastguard Worker // characters. Otherwise, an INVALID_ARGUMENT error is returned. 705*d5c09012SAndroid Build Coastguard Worker // 706*d5c09012SAndroid Build Coastguard Worker // This should not be set when using the client side event reporting with 707*d5c09012SAndroid Build Coastguard Worker // GTM or JavaScript tag in 708*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2.UserEventService.CollectUserEvent] 709*d5c09012SAndroid Build Coastguard Worker // or if 710*d5c09012SAndroid Build Coastguard Worker // [direct_user_request][google.cloud.retail.v2.UserInfo.direct_user_request] 711*d5c09012SAndroid Build Coastguard Worker // is set. 712*d5c09012SAndroid Build Coastguard Worker string user_agent = 3; 713*d5c09012SAndroid Build Coastguard Worker 714*d5c09012SAndroid Build Coastguard Worker // True if the request is made directly from the end user, in which case the 715*d5c09012SAndroid Build Coastguard Worker // [ip_address][google.cloud.retail.v2.UserInfo.ip_address] and 716*d5c09012SAndroid Build Coastguard Worker // [user_agent][google.cloud.retail.v2.UserInfo.user_agent] can be populated 717*d5c09012SAndroid Build Coastguard Worker // from the HTTP request. This flag should be set only if the API request is 718*d5c09012SAndroid Build Coastguard Worker // made directly from the end user such as a mobile app (and not if a gateway 719*d5c09012SAndroid Build Coastguard Worker // or a server is processing and pushing the user events). 720*d5c09012SAndroid Build Coastguard Worker // 721*d5c09012SAndroid Build Coastguard Worker // This should not be set when using the JavaScript tag in 722*d5c09012SAndroid Build Coastguard Worker // [UserEventService.CollectUserEvent][google.cloud.retail.v2.UserEventService.CollectUserEvent]. 723*d5c09012SAndroid Build Coastguard Worker bool direct_user_request = 4; 724*d5c09012SAndroid Build Coastguard Worker} 725*d5c09012SAndroid Build Coastguard Worker 726*d5c09012SAndroid Build Coastguard Worker// The inventory information at a place (e.g. a store) identified 727*d5c09012SAndroid Build Coastguard Worker// by a place ID. 728*d5c09012SAndroid Build Coastguard Workermessage LocalInventory { 729*d5c09012SAndroid Build Coastguard Worker // The place ID for the current set of inventory information. 730*d5c09012SAndroid Build Coastguard Worker string place_id = 1; 731*d5c09012SAndroid Build Coastguard Worker 732*d5c09012SAndroid Build Coastguard Worker // Product price and cost information. 733*d5c09012SAndroid Build Coastguard Worker // 734*d5c09012SAndroid Build Coastguard Worker // Google Merchant Center property 735*d5c09012SAndroid Build Coastguard Worker // [price](https://support.google.com/merchants/answer/6324371). 736*d5c09012SAndroid Build Coastguard Worker PriceInfo price_info = 2; 737*d5c09012SAndroid Build Coastguard Worker 738*d5c09012SAndroid Build Coastguard Worker // Additional local inventory attributes, for example, store name, promotion 739*d5c09012SAndroid Build Coastguard Worker // tags, etc. 740*d5c09012SAndroid Build Coastguard Worker // 741*d5c09012SAndroid Build Coastguard Worker // This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT 742*d5c09012SAndroid Build Coastguard Worker // error is returned: 743*d5c09012SAndroid Build Coastguard Worker // 744*d5c09012SAndroid Build Coastguard Worker // * At most 30 attributes are allowed. 745*d5c09012SAndroid Build Coastguard Worker // * The key must be a UTF-8 encoded string with a length limit of 32 746*d5c09012SAndroid Build Coastguard Worker // characters. 747*d5c09012SAndroid Build Coastguard Worker // * The key must match the pattern: `[a-zA-Z0-9][a-zA-Z0-9_]*`. For example, 748*d5c09012SAndroid Build Coastguard Worker // key0LikeThis or KEY_1_LIKE_THIS. 749*d5c09012SAndroid Build Coastguard Worker // * The attribute values must be of the same type (text or number). 750*d5c09012SAndroid Build Coastguard Worker // * Only 1 value is allowed for each attribute. 751*d5c09012SAndroid Build Coastguard Worker // * For text values, the length limit is 256 UTF-8 characters. 752*d5c09012SAndroid Build Coastguard Worker // * The attribute does not support search. The `searchable` field should be 753*d5c09012SAndroid Build Coastguard Worker // unset or set to false. 754*d5c09012SAndroid Build Coastguard Worker // * The max summed total bytes of custom attribute keys and values per 755*d5c09012SAndroid Build Coastguard Worker // product is 5MiB. 756*d5c09012SAndroid Build Coastguard Worker map<string, CustomAttribute> attributes = 3; 757*d5c09012SAndroid Build Coastguard Worker 758*d5c09012SAndroid Build Coastguard Worker // Input only. Supported fulfillment types. Valid fulfillment type values 759*d5c09012SAndroid Build Coastguard Worker // include commonly used types (such as pickup in store and same day 760*d5c09012SAndroid Build Coastguard Worker // delivery), and custom types. Customers have to map custom types to their 761*d5c09012SAndroid Build Coastguard Worker // display names before rendering UI. 762*d5c09012SAndroid Build Coastguard Worker // 763*d5c09012SAndroid Build Coastguard Worker // Supported values: 764*d5c09012SAndroid Build Coastguard Worker // 765*d5c09012SAndroid Build Coastguard Worker // * "pickup-in-store" 766*d5c09012SAndroid Build Coastguard Worker // * "ship-to-store" 767*d5c09012SAndroid Build Coastguard Worker // * "same-day-delivery" 768*d5c09012SAndroid Build Coastguard Worker // * "next-day-delivery" 769*d5c09012SAndroid Build Coastguard Worker // * "custom-type-1" 770*d5c09012SAndroid Build Coastguard Worker // * "custom-type-2" 771*d5c09012SAndroid Build Coastguard Worker // * "custom-type-3" 772*d5c09012SAndroid Build Coastguard Worker // * "custom-type-4" 773*d5c09012SAndroid Build Coastguard Worker // * "custom-type-5" 774*d5c09012SAndroid Build Coastguard Worker // 775*d5c09012SAndroid Build Coastguard Worker // If this field is set to an invalid value other than these, an 776*d5c09012SAndroid Build Coastguard Worker // INVALID_ARGUMENT error is returned. 777*d5c09012SAndroid Build Coastguard Worker // 778*d5c09012SAndroid Build Coastguard Worker // All the elements must be distinct. Otherwise, an INVALID_ARGUMENT error is 779*d5c09012SAndroid Build Coastguard Worker // returned. 780*d5c09012SAndroid Build Coastguard Worker repeated string fulfillment_types = 4 781*d5c09012SAndroid Build Coastguard Worker [(google.api.field_behavior) = INPUT_ONLY]; 782*d5c09012SAndroid Build Coastguard Worker} 783