| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453 | // Copyright 2022 Google LLC//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at////     http://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.syntax = "proto3";package google.cloud.discoveryengine.v1beta;import "google/api/field_behavior.proto";import "google/api/resource.proto";import "google/cloud/discoveryengine/v1beta/common.proto";import "google/protobuf/duration.proto";import "google/protobuf/timestamp.proto";option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Beta";option go_package = "google.golang.org/genproto/googleapis/cloud/discoveryengine/v1beta;discoveryengine";option java_multiple_files = true;option java_outer_classname = "UserEventProto";option java_package = "com.google.cloud.discoveryengine.v1beta";option objc_class_prefix = "DISCOVERYENGINE";option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1beta";option ruby_package = "Google::Cloud::DiscoveryEngine::V1beta";// UserEvent captures all metadata information DiscoveryEngine API needs to know// about how end users interact with customers' website.message UserEvent {  // Required. User event type. Allowed values are:  //  // Generic values:  // * `search`: Search for Documents.  // * `view-item`: Detailed page view of a Document.  // * `view-item-list`: View of a panel or ordered list of Documents.  // * `view-home-page`: View of the home page.  // * `view-category-page`: View of a category page, e.g. Home > Men > Jeans  //  // Retail-related values:  // * `add-to-cart`: Add an item(s) to cart, e.g. in Retail online shopping  // * `purchase`: Purchase an item(s)  //  // Media-related values:  // * `media-play`: Start/resume watching a video, playing a song, etc.  // * `media-complete`: Finished or stopped midway through a video, song, etc.  string event_type = 1 [(google.api.field_behavior) = REQUIRED];  // Required. A unique identifier for tracking visitors.  //  // For example, this could be implemented with an HTTP cookie, which should be  // able to uniquely identify a visitor on a single device. This unique  // identifier should not change if the visitor log in/out of the website.  //  // Do not set the field to the same fixed ID for different users. This mixes  // the event history of those users together, which results in degraded model  // quality.  //  // The field must be a UTF-8 encoded string with a length limit of 128  // characters. Otherwise, an INVALID_ARGUMENT error is returned.  //  // The field should not contain PII or user-data. We recommend to use Google  // Analytics [Client  // ID](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#clientId)  // for this field.  string user_pseudo_id = 2 [(google.api.field_behavior) = REQUIRED];  // Only required for  // [UserEventService.ImportUserEvents][google.cloud.discoveryengine.v1beta.UserEventService.ImportUserEvents]  // method. Timestamp of when the user event happened.  google.protobuf.Timestamp event_time = 3;  // Information about the end user.  UserInfo user_info = 4;  // Should set to true if the request is made directly from the end user, in  // which case the  // [UserEvent.user_info.user_agent][google.cloud.discoveryengine.v1beta.UserInfo.user_agent]  // can be populated from the HTTP request.  //  // This flag should be set only if the API request is made directly from the  // end user such as a mobile app (and not if a gateway or a server is  // processing and pushing the user events).  //  // This should not be set when using the JavaScript tag in  // [UserEventService.CollectUserEvent][google.cloud.discoveryengine.v1beta.UserEventService.CollectUserEvent].  bool direct_user_request = 5;  // A unique identifier for tracking a visitor session with a length limit of  // 128 bytes. A session is an aggregation of an end user behavior in a time  // span.  //  // A general guideline to populate the sesion_id:  // 1. If user has no activity for 30 min, a new session_id should be assigned.  // 2. The session_id should be unique across users, suggest use uuid or add  // [UserEvent.user_pseudo_id][google.cloud.discoveryengine.v1beta.UserEvent.user_pseudo_id]  // as prefix.  string session_id = 6;  // Page metadata such as categories and other critical information for certain  // event types such as `view-category-page`.  PageInfo page_info = 7;  // Token to attribute an API response to user action(s) to trigger the event.  //  // Highly recommended for user events that are the result of  // [PredictionService.Predict][]. This field enables accurate attribution of  // recommendation model performance.  //  // The value must be one of:  //  // * [PredictResponse.attribution_token][] for events that are the result of  // [PredictionService.Predict][].  // * [SearchResponse.attribution_token][google.cloud.discoveryengine.v1beta.SearchResponse.attribution_token] for events that are the result of  // [SearchService.Search][].  // * [CompleteQueryResponse.attribution_token][] for events that are the  // result of [SearchService.CompleteQuery][].  //  // This token enables us to accurately attribute page view or conversion  // completion back to the event and the particular predict response containing  // this clicked/purchased product. If user clicks on product K in the  // recommendation results, pass [PredictResponse.attribution_token][] as a URL  // parameter to product K's page. When recording events on product K's page,  // log the [PredictResponse.attribution_token][] to this field.  string attribution_token = 8;  // The filter syntax consists of an expression language for constructing a  // predicate from one or more fields of the documents being filtered.  //  // One example is for `search` events, the associated  // [SearchService.SearchRequest][] may contain a filter expression in  // [SearchService.SearchRequest.filter][] conforming to  // https://google.aip.dev/160#filtering.  //  // Similarly, for `view-item-list` events that are generated from a  // [PredictionService.PredictRequest][], this field may be populated directly  // from [PredictionService.PredictRequest.filter][] conforming to  // https://google.aip.dev/160#filtering.  //  // The value must be a UTF-8 encoded string with a length limit of 1,000  // characters. Otherwise, an INVALID_ARGUMENT error is returned.  string filter = 9;  // List of Documents associated with this user event.  //  // This field is optional except for the following event types:  //  // * `view-item`  // * `add-to-cart`  // * `purchase`  // * `media-play`  // * `media-complete`  //  // In a `search` event, this field represents the documents returned to the  // end user on the current page (the end user may have not finished browsing  // the whole page yet). When a new page is returned to the end user, after  // pagination/filtering/ordering even for the same query, a new `search` event  // with different  // [UserEvent.documents][google.cloud.discoveryengine.v1beta.UserEvent.documents]  // is desired.  repeated DocumentInfo documents = 10;  // Panel metadata associated with this user event.  PanelInfo panel = 11;  // Search API details related to the event.  //  // This field should be set for `search` event.  SearchInfo search_info = 12;  // CompleteQuery API details related to the event.  //  // This field should be set for `search` event when autocomplete function is  // enabled and the user clicks a suggestion for search.  CompletionInfo completion_info = 13;  // The transaction metadata (if any) associated with this user event.  TransactionInfo transaction_info = 14;  // A list of identifiers for the independent experiment groups this user event  // belongs to. This is used to distinguish between user events associated with  // different experiment setups on the customer end.  repeated string tag_ids = 15;  // The promotion IDs if this is an event associated with promotions.  // Currently, this field is restricted to at most one ID.  repeated string promotion_ids = 16;  // Extra user event features to include in the recommendation model.  // These attributes must NOT contain data that needs to be parsed or processed  // further, e.g. JSON or other encodings.  //  // If you provide custom attributes for ingested user events, also include  // them in the user events that you associate with prediction requests. Custom  // attribute formatting must be consistent between imported events and events  // provided with prediction requests. This lets the DiscoveryEngine API use  // those custom attributes when training models and serving predictions, which  // helps improve recommendation quality.  //  // This field needs to pass all below criteria, otherwise an INVALID_ARGUMENT  // error is returned:  //  // * The key must be a UTF-8 encoded string with a length limit of 5,000  //   characters.  // * For text attributes, at most 400 values are allowed. Empty values are not  //   allowed. Each value must be a UTF-8 encoded string with a length limit of  //   256 characters.  // * For number attributes, at most 400 values are allowed.  //  // For product recommendations, an example of extra user information is  // traffic_channel, which is how a user arrives at the site. Users can arrive  // at the site by coming to the site directly, coming through Google  // search, or in other ways.  map<string, CustomAttribute> attributes = 17;  // Media-specific info.  MediaInfo media_info = 18;}// Detailed page information.message PageInfo {  // A unique ID of a web page view.  //  // This should be kept the same for all user events triggered from the same  // pageview. For example, an item detail page view could trigger multiple  // events as the user is browsing the page. The `pageViewId` property should  // be kept the same for all these events so that they can be grouped together  // properly.  //  // When using the client side event reporting with JavaScript pixel and Google  // Tag Manager, this value is filled in automatically.  string pageview_id = 1;  // The most specific category associated with a category page.  //  // To represent full path of category, use '>' sign to separate different  // hierarchies. If '>' is part of the category name, please replace it with  // other character(s).  //  // Category pages include special pages such as sales or promotions. For  // instance, a special sale page may have the category hierarchy:  // "pageCategory" : "Sales > 2017 Black Friday Deals".  //  // Required for `view-category-page` events. Other event types should not set  // this field. Otherwise, an INVALID_ARGUMENT error is returned.  string page_category = 2;  // Complete URL (window.location.href) of the user's current page.  //  // When using the client side event reporting with JavaScript pixel and Google  // Tag Manager, this value is filled in automatically. Maximum length 5,000  // characters.  string uri = 3;  // The referrer URL of the current page.  //  // When using the client side event reporting with JavaScript pixel and Google  // Tag Manager, this value is filled in automatically. However, some browser  // privacy restrictions may cause this field to be empty.  string referrer_uri = 4;}// Detailed search information.message SearchInfo {  // The user's search query.  //  // See  // [SearchRequest.query][google.cloud.discoveryengine.v1beta.SearchRequest.query]  // for definition.  //  // The value must be a UTF-8 encoded string with a length limit of 5,000  // characters. Otherwise, an INVALID_ARGUMENT error is returned.  //  // At least one of  // [search_query][google.cloud.discoveryengine.v1beta.SearchInfo.search_query]  // or [page_categories][] is required for `search` events. Other event types  // should not set this field. Otherwise, an INVALID_ARGUMENT error is  // returned.  string search_query = 1;  // The order in which products are returned, if applicable.  //  // See  // [SearchRequest.order_by][google.cloud.discoveryengine.v1beta.SearchRequest.order_by]  // for definition and syntax.  //  // The value must be a UTF-8 encoded string with a length limit of 1,000  // characters. Otherwise, an INVALID_ARGUMENT error is returned.  //  // This can only be set for `search` events. Other event types should not set  // this field. Otherwise, an INVALID_ARGUMENT error is returned.  string order_by = 2;  // An integer that specifies the current offset for pagination (the 0-indexed  // starting location, amongst the products deemed by the API as relevant).  //  // See  // [SearchRequest.offset][google.cloud.discoveryengine.v1beta.SearchRequest.offset]  // for definition.  //  // If this field is negative, an INVALID_ARGUMENT is returned.  //  // This can only be set for `search` events. Other event types should not set  // this field. Otherwise, an INVALID_ARGUMENT error is returned.  optional int32 offset = 3;}// Detailed completion information including completion attribution token and// clicked completion info.message CompletionInfo {  // End user selected [CompleteQueryResponse.CompletionResult.suggestion][].  string selected_suggestion = 1;  // End user selected [CompleteQueryResponse.CompletionResult.suggestion][]  // position, starting from 0.  int32 selected_position = 2;}// A transaction represents the entire purchase transaction.message TransactionInfo {  // Required. Total non-zero value associated with the transaction. This value  // may include shipping, tax, or other adjustments to the total value that you  // want to include.  optional float value = 1 [(google.api.field_behavior) = REQUIRED];  // Required. Currency code. Use three-character ISO-4217 code.  string currency = 2 [(google.api.field_behavior) = REQUIRED];  // The transaction ID with a length limit of 128 characters.  string transaction_id = 3;  // All the taxes associated with the transaction.  optional float tax = 4;  // All the costs associated with the products. These can be manufacturing  // costs, shipping expenses not borne by the end user, or any other costs,  // such that:  //  // * Profit =  // [value][google.cloud.discoveryengine.v1beta.TransactionInfo.value] -  // [tax][google.cloud.discoveryengine.v1beta.TransactionInfo.tax] -  // [cost][google.cloud.discoveryengine.v1beta.TransactionInfo.cost]  optional float cost = 5;  // The total discount(s) value applied to this transaction.  // This figure should be excluded from  // [TransactionInfo.value][google.cloud.discoveryengine.v1beta.TransactionInfo.value]  //  // For example, if a user paid  // [TransactionInfo.value][google.cloud.discoveryengine.v1beta.TransactionInfo.value]  // amount, then nominal (pre-discount) value of the transaction is the sum of  // [TransactionInfo.value][google.cloud.discoveryengine.v1beta.TransactionInfo.value]  // and  // [TransactionInfo.discount_value][google.cloud.discoveryengine.v1beta.TransactionInfo.discount_value]  //  // This means that profit is calculated the same way, regardless of the  // discount value, and that  // [TransactionInfo.discount_value][google.cloud.discoveryengine.v1beta.TransactionInfo.discount_value]  // can be larger than  // [TransactionInfo.value][google.cloud.discoveryengine.v1beta.TransactionInfo.value]:  //  // * Profit =  // [value][google.cloud.discoveryengine.v1beta.TransactionInfo.value] -  // [tax][google.cloud.discoveryengine.v1beta.TransactionInfo.tax] -  // [cost][google.cloud.discoveryengine.v1beta.TransactionInfo.cost]  optional float discount_value = 6;}// Detailed document information associated with a user event.message DocumentInfo {  // A required descriptor of the associated Document.  //  // * If [id][google.cloud.discoveryengine.v1beta.DocumentInfo.id] is  // specified, then the default values for <location>, <data_store_id>, and  // <branch_id> are used when annotating with the stored Document.  //  // * If [name][google.cloud.discoveryengine.v1beta.DocumentInfo.name] is  // specified, then the provided values (default values allowed) for  // <location>, <data_store_id>, and <branch_id> are used when annotating with  // the stored Document.  oneof document_descriptor {    // Required. The Document resource ID.    string id = 1 [(google.api.field_behavior) = REQUIRED];    // Required. The Document resource full name, of the form:    // projects/<project_id>/locations/<location>/dataStores/<data_store_id>/branches/<branch_id>/documents/<document_id>    string name = 2 [      (google.api.field_behavior) = REQUIRED,      (google.api.resource_reference) = {        type: "discoveryengine.googleapis.com/Document"      }    ];  }  // Quantity of the Document associated with the user event. Defaults to 1.  //  // For example, this field will be 2 if two quantities of the same Document  // are involved in a `add-to-cart` event.  //  // Required for events of the following event types:  // * `add-to-cart`  // * `purchase`  optional int32 quantity = 3;  // The promotion IDs associated with this Document.  // Currently, this field is restricted to at most one ID.  repeated string promotion_ids = 4;}// Detailed panel information associated with a user event.message PanelInfo {  // Required. The panel ID.  string panel_id = 2 [(google.api.field_behavior) = REQUIRED];  // The display name of the panel.  string display_name = 3;  // The ordered position of the panel, if shown to the user with other panels.  // If set, then  // [total_panels][google.cloud.discoveryengine.v1beta.PanelInfo.total_panels]  // must also be set.  optional int32 panel_position = 4;  // The total number of panels, including this one, shown to the user.  // Must be set if  // [panel_position][google.cloud.discoveryengine.v1beta.PanelInfo.panel_position]  // is set.  optional int32 total_panels = 5;}// Media-specific user event information.message MediaInfo {  // The media progress time in seconds, if applicable.  // For example, if the end user has finished 90 seconds of a playback video,  // then [MediaInfo.media_progress_duration.seconds][Duration.seconds] should  // be set to 90.  google.protobuf.Duration media_progress_duration = 1;  // Media progress should be computed using only the media_progress_duration  // relative to the media total length.  //  // This value must be between [0, 1.0] inclusive.  //  // If this is not a playback or the progress cannot be computed (e.g. ongoing  // livestream), this field should be unset.  optional float media_progress_percentage = 2;}
 |