1// Copyright 2020 Google LLC 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15syntax = "proto3"; 16 17package google.cloud.recommendationengine.v1beta1; 18 19import "google/api/annotations.proto"; 20import "google/api/field_behavior.proto"; 21import "google/api/httpbody.proto"; 22import "google/api/resource.proto"; 23import "google/cloud/recommendationengine/v1beta1/import.proto"; 24import "google/cloud/recommendationengine/v1beta1/user_event.proto"; 25import "google/longrunning/operations.proto"; 26import "google/protobuf/timestamp.proto"; 27import "google/api/client.proto"; 28 29option csharp_namespace = "Google.Cloud.RecommendationEngine.V1Beta1"; 30option go_package = "cloud.google.com/go/recommendationengine/apiv1beta1/recommendationenginepb;recommendationenginepb"; 31option java_multiple_files = true; 32option java_package = "com.google.cloud.recommendationengine.v1beta1"; 33option objc_class_prefix = "RECAI"; 34option php_namespace = "Google\\Cloud\\RecommendationEngine\\V1beta1"; 35option ruby_package = "Google::Cloud::RecommendationEngine::V1beta1"; 36 37// Service for ingesting end user actions on the customer website. 38service UserEventService { 39 option (google.api.default_host) = "recommendationengine.googleapis.com"; 40 option (google.api.oauth_scopes) = 41 "https://www.googleapis.com/auth/cloud-platform"; 42 43 // Writes a single user event. 44 rpc WriteUserEvent(WriteUserEventRequest) returns (UserEvent) { 45 option (google.api.http) = { 46 post: "/v1beta1/{parent=projects/*/locations/*/catalogs/*/eventStores/*}/userEvents:write" 47 body: "user_event" 48 }; 49 option (google.api.method_signature) = "parent,user_event"; 50 } 51 52 // Writes a single user event from the browser. This uses a GET request to 53 // due to browser restriction of POST-ing to a 3rd party domain. 54 // 55 // This method is used only by the Recommendations AI JavaScript pixel. 56 // Users should not call this method directly. 57 rpc CollectUserEvent(CollectUserEventRequest) returns (google.api.HttpBody) { 58 option (google.api.http) = { 59 get: "/v1beta1/{parent=projects/*/locations/*/catalogs/*/eventStores/*}/userEvents:collect" 60 }; 61 option (google.api.method_signature) = "parent,user_event,uri,ets"; 62 } 63 64 // Gets a list of user events within a time range, with potential filtering. 65 rpc ListUserEvents(ListUserEventsRequest) returns (ListUserEventsResponse) { 66 option (google.api.http) = { 67 get: "/v1beta1/{parent=projects/*/locations/*/catalogs/*/eventStores/*}/userEvents" 68 }; 69 option (google.api.method_signature) = "parent,filter"; 70 } 71 72 // Deletes permanently all user events specified by the filter provided. 73 // Depending on the number of events specified by the filter, this operation 74 // could take hours or days to complete. To test a filter, use the list 75 // command first. 76 rpc PurgeUserEvents(PurgeUserEventsRequest) 77 returns (google.longrunning.Operation) { 78 option (google.api.http) = { 79 post: "/v1beta1/{parent=projects/*/locations/*/catalogs/*/eventStores/*}/userEvents:purge" 80 body: "*" 81 }; 82 option (google.longrunning.operation_info) = { 83 response_type: "google.cloud.recommendationengine.v1beta1.PurgeUserEventsResponse" 84 metadata_type: "google.cloud.recommendationengine.v1beta1.PurgeUserEventsMetadata" 85 }; 86 option (google.api.method_signature) = "parent,filter,force"; 87 } 88 89 // Bulk import of User events. Request processing might be 90 // synchronous. Events that already exist are skipped. 91 // Use this method for backfilling historical user events. 92 // 93 // Operation.response is of type ImportResponse. Note that it is 94 // possible for a subset of the items to be successfully inserted. 95 // Operation.metadata is of type ImportMetadata. 96 rpc ImportUserEvents(ImportUserEventsRequest) 97 returns (google.longrunning.Operation) { 98 option (google.api.http) = { 99 post: "/v1beta1/{parent=projects/*/locations/*/catalogs/*/eventStores/*}/userEvents:import" 100 body: "*" 101 }; 102 option (google.longrunning.operation_info) = { 103 response_type: "google.cloud.recommendationengine.v1beta1.ImportUserEventsResponse" 104 metadata_type: "google.cloud.recommendationengine.v1beta1.ImportMetadata" 105 }; 106 option (google.api.method_signature) = 107 "parent,request_id,input_config,errors_config"; 108 } 109} 110 111// Request message for PurgeUserEvents method. 112message PurgeUserEventsRequest { 113 // Required. The resource name of the event_store under which the events are 114 // created. The format is 115 // `projects/${projectId}/locations/global/catalogs/${catalogId}/eventStores/${eventStoreId}` 116 string parent = 1 [ 117 (google.api.field_behavior) = REQUIRED, 118 (google.api.resource_reference) = { 119 type: "recommendationengine.googleapis.com/EventStore" 120 } 121 ]; 122 123 // Required. The filter string to specify the events to be deleted. Empty 124 // string filter is not allowed. This filter can also be used with 125 // ListUserEvents API to list events that will be deleted. The eligible fields 126 // for filtering are: 127 // * eventType - UserEvent.eventType field of type string. 128 // * eventTime - in ISO 8601 "zulu" format. 129 // * visitorId - field of type string. Specifying this will delete all events 130 // associated with a visitor. 131 // * userId - field of type string. Specifying this will delete all events 132 // associated with a user. 133 // Example 1: Deleting all events in a time range. 134 // `eventTime > "2012-04-23T18:25:43.511Z" eventTime < 135 // "2012-04-23T18:30:43.511Z"` 136 // Example 2: Deleting specific eventType in time range. 137 // `eventTime > "2012-04-23T18:25:43.511Z" eventType = "detail-page-view"` 138 // Example 3: Deleting all events for a specific visitor 139 // `visitorId = visitor1024` 140 // The filtering fields are assumed to have an implicit AND. 141 string filter = 2 [(google.api.field_behavior) = REQUIRED]; 142 143 // Optional. The default value is false. Override this flag to true to 144 // actually perform the purge. If the field is not set to true, a sampling of 145 // events to be deleted will be returned. 146 bool force = 3 [(google.api.field_behavior) = OPTIONAL]; 147} 148 149// Metadata related to the progress of the PurgeUserEvents operation. 150// This will be returned by the google.longrunning.Operation.metadata field. 151message PurgeUserEventsMetadata { 152 // The ID of the request / operation. 153 string operation_name = 1; 154 155 // Operation create time. 156 google.protobuf.Timestamp create_time = 2; 157} 158 159// Response of the PurgeUserEventsRequest. If the long running operation is 160// successfully done, then this message is returned by the 161// google.longrunning.Operations.response field. 162message PurgeUserEventsResponse { 163 // The total count of events purged as a result of the operation. 164 int64 purged_events_count = 1; 165 166 // A sampling of events deleted (or will be deleted) depending on the `force` 167 // property in the request. Max of 500 items will be returned. 168 repeated UserEvent user_events_sample = 2; 169} 170 171// Request message for WriteUserEvent method. 172message WriteUserEventRequest { 173 // Required. The parent eventStore resource name, such as 174 // `projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store`. 175 string parent = 1 [ 176 (google.api.field_behavior) = REQUIRED, 177 (google.api.resource_reference) = { 178 type: "recommendationengine.googleapis.com/EventStore" 179 } 180 ]; 181 182 // Required. User event to write. 183 UserEvent user_event = 2 [(google.api.field_behavior) = REQUIRED]; 184} 185 186// Request message for CollectUserEvent method. 187message CollectUserEventRequest { 188 // Required. The parent eventStore name, such as 189 // `projects/1234/locations/global/catalogs/default_catalog/eventStores/default_event_store`. 190 string parent = 1 [ 191 (google.api.field_behavior) = REQUIRED, 192 (google.api.resource_reference) = { 193 type: "recommendationengine.googleapis.com/EventStore" 194 } 195 ]; 196 197 // Required. URL encoded UserEvent proto. 198 string user_event = 2 [(google.api.field_behavior) = REQUIRED]; 199 200 // Optional. The url including cgi-parameters but excluding the hash fragment. 201 // The URL must be truncated to 1.5K bytes to conservatively be under the 2K 202 // bytes. This is often more useful than the referer url, because many 203 // browsers only send the domain for 3rd party requests. 204 string uri = 3 [(google.api.field_behavior) = OPTIONAL]; 205 206 // Optional. The event timestamp in milliseconds. This prevents browser 207 // caching of otherwise identical get requests. The name is abbreviated to 208 // reduce the payload bytes. 209 int64 ets = 4 [(google.api.field_behavior) = OPTIONAL]; 210} 211 212// Request message for ListUserEvents method. 213message ListUserEventsRequest { 214 // Required. The parent eventStore resource name, such as 215 // `projects/*/locations/*/catalogs/default_catalog/eventStores/default_event_store`. 216 string parent = 1 [ 217 (google.api.field_behavior) = REQUIRED, 218 (google.api.resource_reference) = { 219 type: "recommendationengine.googleapis.com/EventStore" 220 } 221 ]; 222 223 // Optional. Maximum number of results to return per page. If zero, the 224 // service will choose a reasonable default. 225 int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; 226 227 // Optional. The previous ListUserEventsResponse.next_page_token. 228 string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; 229 230 // Optional. Filtering expression to specify restrictions over 231 // returned events. This is a sequence of terms, where each term applies some 232 // kind of a restriction to the returned user events. Use this expression to 233 // restrict results to a specific time range, or filter events by eventType. 234 // eg: eventTime > "2012-04-23T18:25:43.511Z" eventsMissingCatalogItems 235 // eventTime<"2012-04-23T18:25:43.511Z" eventType=search 236 // 237 // We expect only 3 types of fields: 238 // 239 // * eventTime: this can be specified a maximum of 2 times, once with a 240 // less than operator and once with a greater than operator. The 241 // eventTime restrict should result in one contiguous valid eventTime 242 // range. 243 // 244 // * eventType: only 1 eventType restriction can be specified. 245 // 246 // * eventsMissingCatalogItems: specififying this will restrict results 247 // to events for which catalog items were not found in the catalog. The 248 // default behavior is to return only those events for which catalog 249 // items were found. 250 // 251 // Some examples of valid filters expressions: 252 // 253 // * Example 1: eventTime > "2012-04-23T18:25:43.511Z" 254 // eventTime < "2012-04-23T18:30:43.511Z" 255 // * Example 2: eventTime > "2012-04-23T18:25:43.511Z" 256 // eventType = detail-page-view 257 // * Example 3: eventsMissingCatalogItems 258 // eventType = search eventTime < "2018-04-23T18:30:43.511Z" 259 // * Example 4: eventTime > "2012-04-23T18:25:43.511Z" 260 // * Example 5: eventType = search 261 // * Example 6: eventsMissingCatalogItems 262 string filter = 4 [(google.api.field_behavior) = OPTIONAL]; 263} 264 265// Response message for ListUserEvents method. 266message ListUserEventsResponse { 267 // The user events. 268 repeated UserEvent user_events = 1; 269 270 // If empty, the list is complete. If nonempty, the token to pass to the next 271 // request's ListUserEvents.page_token. 272 string next_page_token = 2; 273} 274