Blame view

docs/proto/user_action.proto 8.85 KB
323a720b   tangwang   docs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
  syntax = "proto3";
  
  package ua.v1;
  
  // UA: 站内全站埋点统一事件模型(推荐/搜索/画像/转化)
  //
  // 设计要点:
  // - 单条事件统一骨架(identity/time/page/trace/device + oneof event)
  // - trace_id 串联一次搜索/推荐请求产生的曝光与后续点击/详情/加购等
  // - 支持 pageview 携带曝光列表、搜索筛选上下文、购物车/结账快照、购买明细
  
  // 详细事件子类型(可选),用于更细粒度区分同一主类型下的来源/动作。
  // 例如:CLICK + SEARCH_RESULT_ITEM_CLICK / RECOMMEND_ITEM_CLICK
  enum EventId {
    EVENT_ID_UNSPECIFIED = 0;
  
    // 搜索相关 (1-99)
    EVENT_ID_SEARCH_SUBMIT = 1;
    EVENT_ID_SEARCH_SUGGESTION_CLICK = 2;
    EVENT_ID_SEARCH_RESULT_EXPOSURE = 3;
    EVENT_ID_SEARCH_RESULT_ITEM_CLICK = 4;
  
    // 推荐相关 (100-199)
    EVENT_ID_RECOMMEND_REQUEST = 100;
    EVENT_ID_RECOMMEND_EXPOSURE = 101;
    EVENT_ID_RECOMMEND_ITEM_CLICK = 102;
  
    // 页面/浏览 (200-299)
    EVENT_ID_PAGE_VIEW = 200;
    EVENT_ID_VIEW_ITEM = 201;
  
    // 购物车/结账 (300-399)
    EVENT_ID_ADD_TO_CART = 300;
    EVENT_ID_REMOVE_FROM_CART = 301;
    EVENT_ID_CART_VIEW = 302;
    EVENT_ID_CHECKOUT_STEP_VIEW = 330;
    EVENT_ID_CHECKOUT_STEP_COMPLETE = 331;
  
    // 购买 (400-499)
    EVENT_ID_PURCHASE = 400;
    EVENT_ID_PAYMENT_SUCCESS = 401;
  }
  
  // 行为主类型(用于统计/分流;细分用 EventId 或各事件内字段表达)
  enum ActionType {
    ACTION_TYPE_UNSPECIFIED = 0;
    ACTION_TYPE_PAGEVIEW = 1;
    ACTION_TYPE_EXPOSURE = 2;
    ACTION_TYPE_CLICK = 3;
    ACTION_TYPE_VIEW_ITEM = 4;
    ACTION_TYPE_ADD_TO_CART = 5;
    ACTION_TYPE_REMOVE_FROM_CART = 6;
    ACTION_TYPE_CART = 7;
    ACTION_TYPE_CHECKOUT = 8;
    ACTION_TYPE_PURCHASE = 9;
    ACTION_TYPE_SEARCH = 10;
    ACTION_TYPE_FILTER = 11;
  }
  
  // 页面类型(可按业务扩展;无法归类时用 OTHER 并填 page_id/page_name/url)
  enum PageType {
    PAGE_TYPE_UNSPECIFIED = 0;
    PAGE_TYPE_HOME = 1;
    PAGE_TYPE_SEARCH_RESULT = 2;
    PAGE_TYPE_CATEGORY_PAGE = 3;
    PAGE_TYPE_COLLECTION_PAGE = 4; // 活动页/专题页/聚合页
    PAGE_TYPE_PRODUCT_DETAIL = 5;
    PAGE_TYPE_CART_PAGE = 6;
    PAGE_TYPE_CHECKOUT_PAGE = 7;
    PAGE_TYPE_ORDER_CONFIRM = 8;
    PAGE_TYPE_MERCHANT_SHOP = 9;
    PAGE_TYPE_OTHER = 99;
  }
  
  // 排序方式(无法覆盖时,用 CUSTOM 并填 sort_key)
  enum SortType {
    SORT_TYPE_UNSPECIFIED = 0;
    SORT_TYPE_RELEVANCE = 1;
    SORT_TYPE_PRICE_ASC = 2;
    SORT_TYPE_PRICE_DESC = 3;
    SORT_TYPE_SALES_DESC = 4;
    SORT_TYPE_NEWEST_DESC = 5;
    SORT_TYPE_CUSTOM = 99;
  }
  
  // 结账阶段(可按业务扩展)
  enum CheckoutStep {
    CHECKOUT_STEP_UNSPECIFIED = 0;
    CHECKOUT_STEP_CART = 1;
    CHECKOUT_STEP_SHIPPING = 2;
    CHECKOUT_STEP_PAYMENT = 3;
    CHECKOUT_STEP_REVIEW = 4;
    CHECKOUT_STEP_COMPLETE = 5;
  }
  
  message UserActionEvent {
    // 基础标识
    string tenant_id = 1;          // 租户/店铺/商家ID
    string user_id = 2;            // 登录用户ID(未登录可为空)
    string anonymous_id = 3;       // 匿名用户ID(建议 cookie 级别稳定)
    string device_id = 4;          // 设备指纹(可选)
    string ip = 5;                 // 客户端IP(可选)
  
    // 时间
    int64 event_timestamp_ms = 6;  // 行为发生时刻(毫秒)
  
    // 事件类型
    ActionType action_type = 7;    // 行为主类型
    EventId event_id = 8;          // 详细事件子类型(可选)
  
    // 公共上下文
    PageInfo page = 9;
    TraceInfo trace = 10;
    DeviceProfile device = 11;
    ContextProfile context = 12;
  
    // 具体事件载荷
    oneof event {
      PageViewEvent page_view = 20;
      ExposureEvent exposure = 21;
      ClickEvent click = 22;
      ViewItemEvent view_item = 23;
      SearchEvent search = 24;
      FilterEvent filter = 25;
      CartEvent cart = 26;
      CheckoutEvent checkout = 27;
      PurchaseEvent purchase = 28;
    }
  
    Extra extra = 90;              // 扩展字段(灵活KV)
  }
  
  message PageInfo {
    PageType page_type = 1;
    string page_id = 2;            // 页面唯一标识(如活动页ID/类目ID/自定义key)
    string page_name = 3;          // 可读名称(可选)
    string url = 4;                // 完整URL(可选)
    string path = 5;               // path(可选)
    string refer_url = 6;          // 来源URL(可选)
    string lang = 7;               // 页面语言(可选)
  
    // 模块信息:用于表达曝光/点击发生在哪个模块
    string module_id = 20;         // e.g. "search_result", "recommend_home"
    int32 position = 21;           // 在本屏/本列表的位置(从0开始;无则填 -1)
  }
  
  message TraceInfo {
    // 串联一次搜索/推荐请求产生的曝光与后续点击/详情/加购
    string trace_id = 1;
  
    // 会话ID(同一次访问,跨多个 trace_id)
    string session_id = 2;
  
    // 实验/流量
    string abtest_id = 10;         // 实验ID、流量组标识
  }
  
  message ContextProfile {
    // 业务自定义来源(如 "shopify-web", "app", "mini-program")
    string source = 1;
  }
  
  message DeviceProfile {
    string os = 1;                 // e.g. "Windows", "macOS", "iOS", "Android"
    string user_agent = 2;         // 浏览器UA
    string cookie_id = 3;          // 首次访问生成的持久化Cookie ID
    int32 viewport_width = 4;
    int32 viewport_height = 5;
  }
  
  // 商品/内容基础信息(埋点侧尽量带齐,便于离线特征构建)
  message Item {
    string spu_id = 1;
    string sku_id = 2;
    string snapshot_id = 3;        // 特征快照ID(可选)
    string category_id = 4;
    string brand_id = 5;
    string title = 6;
  
    // 可选:价格与属性(若能拿到)
    string currency = 20;          // e.g. "USD"
    double price = 21;             // 单价
    map<string, string> properties = 30; // 颜色/尺码等扩展属性
  }
  
  // 搜索上下文:既可作为 SearchEvent 的主体,也可挂载在 exposure/click 上
  message SearchContext {
    string search_query = 1;
    string suggestion_used = 2;
    int32 result_count = 3;
    int32 page_number = 4;         // 从1开始
    SortType sort_type = 5;
    string sort_key = 6;           // sort_type=CUSTOM 时使用
    repeated FilterParam filters = 7;
  }
  
  message FilterParam {
    string key = 1;                // e.g. "color", "price"
    repeated string values = 2;    // e.g. ["red","blue"]
    string op = 3;                 // e.g. "in", "range"
  }
  
  // Pageview:建议可携带“本次渲染曝光的商品列表”(用于特征与归因)
  message PageViewEvent {
    int64 dwell_time_ms = 1;       // 停留时长(如无法计算可缺省)
    repeated ExposedItem exposed_items = 2; // 可选:首屏/本次渲染曝光
    SearchContext search_context = 3;       // 若该 pageview 属于搜索结果页,可填
  }
  
  // 曝光:可用于列表页/推荐位/活动页等
  message ExposureEvent {
    repeated ExposedItem items = 1;         // 一次曝光可批量上报多商品
    SearchContext search_context = 2;       // 搜索流量曝光需填(推荐流量可不填)
  }
  
  message ExposedItem {
    Item item = 1;
    int32 position = 2;             // 从0开始
    string module_id = 3;           // e.g. "search_result"
  }
  
  // 点击:用于列表/推荐位点击商品等
  message ClickEvent {
    Item item = 1;
    int32 position = 2;
    string module_id = 3;
    SearchContext search_context = 4; // 若点击发生在搜索结果中,需填
  }
  
  // 详情页浏览:建议与 Pageview 区分,便于训练“商品级浏览”序列
  message ViewItemEvent {
    Item item = 1;
    int64 dwell_time_ms = 2;        // 在详情页停留(建议)
  }
  
  // 搜索:提交/改词/使用建议词等
  message SearchEvent {
    SearchContext search_context = 1;
  }
  
  // 筛选:筛选条件变更(也可与搜索事件合并;这里单独提供便于实时系统消费)
  message FilterEvent {
    SearchContext search_context = 1;
  }
  
  // 购物车:加购/移除/查看等,建议尽量携带快照
  message CartEvent {
    // 动作相关商品(对 add/remove 有意义)
    Item item = 1;
    int32 quantity = 2;            // 加/减数量(可选)
  
    CartSnapshot cart_snapshot = 10; // 当前购物车快照(强烈建议)
  }
  
  message CartSnapshot {
    repeated CartItem items = 1;
    string currency = 2;
    double cart_total_value = 3;   // 购物车总价(可选)
  }
  
  message CartItem {
    Item item = 1;
    int32 quantity = 2;
    double line_total_value = 3;   // 行总价(可选)
  }
  
  // 结账:shipping/payment 等阶段状态
  message CheckoutEvent {
    CheckoutStep step = 1;
    string shipping_country = 2;   // 用于跨境/税费/配送推荐
    string payment_method = 3;     // 可选
    CartSnapshot cart_snapshot = 10;
  }
  
  // 购买:订单完成/支付成功等
  message PurchaseEvent {
    string order_id = 1;
    string currency = 2;
    double order_total_value = 3;
    repeated PurchasedItem items = 4;
  
    // 若能保留主要来源 trace,用于归因(可选)
    string attribution_trace_id = 10;
  }
  
  message PurchasedItem {
    Item item = 1;
    int32 quantity = 2;
    double paid_price = 3;         // 实付单价(可选)
  }
  
  message Extra {
    map<string, string> debug_info = 1;
  }