xref: /aosp_15_r20/external/googleapis/google/cloud/recommendationengine/v1beta1/user_event_service.proto (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
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