埋点专题 · 预测市场

预测市场
埋点规范

技术侧整理版本,待与 BI 对齐确认。涵盖 5 PV · 9 Click · 2 Callback,共 16 个有效埋点事件,字段与 API 类型对齐。

导出埋点清单 CSV
project_type = predict SDK @region-lib/[email protected] ⏳ 待 BI 对齐确认 更新于 2026-05-26
5
PageView 事件
9
Click 事件
2
Callback 事件
16
总计有效事件

为什么要精简

产品原始需求表中存在重复事件(同一 btn_name 跨页面多次列出)和低价值事件(高频按键触发、被动关闭等)。全量照单实现会产生大量噪音,淹没真实转化信号,增加 BI 清洗成本。
合并
相同语义的事件用参数字段区分而非拆成多条。
例:体育大类筛选与联赛筛选合并为 switch_sport_filter,通过 filter_type 区分层级。
删除
以下类型事件不单独埋点
· 被动关闭行为(可通过漏斗缺口反推)
· 纯 UI 偏好操作(如显示/隐藏资产)
· 高频输入事件(如金额每次按键)
复用
关键业务数据随 Callback 事件一并上报,不单独设立。
例:交易金额、市场 ID 随 trackCallbackCollect 的扩展字段携带,无需单独触发输入事件。

公共参数

所有事件均携带以下字段,通过 setTrackerInfo() 在页面 onMounted 时注入。

字段类型必填说明
project_typestring固定值 "predict"(Assets 导航页除外,为 "Assets"
project_namestring页面标识,见 PageView 表
btn_typestring是(Click)"button" | "banner" | "link" | "menu" | "tab" | "card"
btn_namestring是(Click)按钮英文 ID,用于数据聚合,不随 UI 文案变动
btn_labelstring是(Click)按钮展示文案(英文),多态用 | 分隔
referrer_urlstring否(自动注入)用户进入当前页面前的来源 URL,来自 document.referrer,SDK 自动采集,无需业务代码手动传

PageView 事件 5 个

触发时机:页面 onMounted,先调用 setTrackerInfo({ project_type, project_name }) 再调用 trackPageViewCollect(),无额外参数。

project_name业务页面路由(参考)
predictCrypto加密预测市场列表页/predict
predictSports体育预测市场列表页/predict/sports
predictWorld世界预测市场列表页/predict/world
predictDetail预测市场详情页/predict/detail/:id
PredictionAccount持仓账户页/predict/position

Click 事件 9 个

调用方式:$tracker.trackBtnClickCollect({ btn_name, btn_label, ...extra }) 或声明式指令 v-tracker卡片跳转(market_detail)用 trackClickBeconCollect 防丢点。所有 ID 字段与 API 类型一致:event_id 对应 EventItemVo.eventIdmarket_id 对应 MarketSubVo.id,均为 string

预测列表页 project_name: predictCrypto / predictSports / predictWorld
btn_name业务描述btn_typebtn_label扩展参数
switch_market_category 切换一级分类 Tab tabCrypto | Sports | World category_slug: "crypto-assets" | "sports" | "world"
filter_market 所有筛选操作(币种 / 体育大类 / 联赛 / 市场类型),通过 filter_type 区分 button / menu / tab filter_type:见下方枚举速查
filter_value:tag slug 或 UI 值
category_id:number(对应 CategoryNode.id,传给 /event/list?categoryId
market_detail 点击任意卡片进入详情(加密 / 体育 / 世界均用此事件) card event_id: string(EventItemVo.eventId)
event_title: string(EventItemVo.title)
trade_market_option 点击卡片内选项(Yes/No 或体育胜平负)发起交易 buttonYes | No | Home Win | Draw | Away Win event_id: string, market_id: string(MarketSubVo.id)
outcome: string(outcomes 的 key,如 "Yes"/"No"/"team0_win"/"draw"/"team1_win"
预测市场详情页 project_name: predictDetail
btn_name业务描述btn_typebtn_label扩展参数
trade_market_option 详情页选项列表选择方向 buttonYes | No event_id: string, market_id: string, outcome: "Yes" | "No"
submit_buy_order 点击买入按钮提交下单(对应 POST /trade/buy) buttonBuy Yes | Buy No event_id: string, market_id: string, outcome: "Yes" | "No"
usdt_amount: string(BuyOrderBody.usdtAmount,单位 USDT,最小 5)
持仓账户页 project_name: PredictionAccount(导航入口为 Assets)
btn_name业务描述project_namebtn_typebtn_label扩展参数
open_prediction_account侧边导航进入预测账户AssetsmenuPrediction Account
switch_position_tab切换持仓 / 已结算 TabPredictionAccounttabPositions | Settlements tab: "positions" | "settlements"(分别对应 /position/list 和 /settlement/list)
sell_position点击持仓「Sell」按钮PredictionAccountbuttonSell event_id: string, market_id: string
outcome: "Yes" | "No"(PositionItem.outcomeLabel)
confirm_sell_position确认卖出弹窗 Confirm(对应 POST /trade/sell)PredictionAccountbuttonConfirm event_id: string, market_id: string

Callback 事件 2 个

调用方式:$tracker.trackCallbackCollect({ ret_code, ...extra }),在 POST /trade/buy / POST /trade/sell 响应后触发。ret_code = 0 表示成功;order_status 取自 BuyOrderResult.status

事件触发时机project_nameret_code扩展参数
买入下单结果 POST /trade/buy 响应后 predictDetail 接口返回码(0=成功) event_id: string(EventItemVo.eventId)
market_id: string(MarketSubVo.id)
outcome: "Yes" | "No"
usdt_amount: string(BuyOrderBody.usdtAmount,单位 USDT)
order_status: "NEW" | "CANCELLED" | "FAILED" | "SUBMITTING"(BuyOrderResult.status)
卖出下单结果 POST /trade/sell 响应后 PredictionAccount 接口返回码(0=成功) event_id: string
market_id: string
outcome: "Yes" | "No"(PositionItem.outcomeLabel)
order_status: "NEW" | "CANCELLED" | "FAILED" | "SUBMITTING"

枚举值速查

btn_type 枚举
适用事件
buttontrade_market_option / switch_trade_side / submit_buy_order / sell_position / confirm / cancel
bannermy_prediction_orders
tabswitch_market_category / switch_position_tab / filter_market(market_type)
menuopen_prediction_account / filter_market(sport_category / sport_league)
cardmarket_detail / view_position_detail
linkview_trade_rules
project_name 枚举
对应页面 / 路由
predictCrypto加密预测列表 /predict
predictSports体育预测列表 /predict/sports
predictWorld世界预测列表 /predict/world
predictDetail预测市场详情 /predict/detail/:id
PredictionAccount持仓账户页 /predict/position
Assets侧边资产导航(open_prediction_account 来源)
outcome 枚举(取自 API MarketSubVo.outcomes key)
市场类型outcome 可选值API 来源
加密 / 世界预测"Yes" | "No"outcomes Record 的 key;PositionItem.outcomeLabel
体育 moneyline"team0_win" | "draw" | "team1_win"MarketSubVo.wdlSlot
tab(持仓页)"positions" | "settlements"对应 /position/list 与 /settlement/list
order_status 枚举(Callback 用,取自 BuyOrderResult.status)
含义
"NEW"订单已创建,正在处理
"SUBMITTING"正在提交到 CLOB
"PENDING_FUNDING"等待资金划转
"CANCELLED"已取消(含部分成交后取消)
"FAILED"订单失败
filter_market 枚举(filter_type + filter_value + category_id,来自 /categories API)
filter_type含义filter_value(tag slug)category_id适用页面
"crypto_asset" 加密币种筛选 "bitcoin" | "ethereum" | "solana" | "ripple" | "micro-strategy" 101 / 102 / 103 / 104 / 105 predictCrypto
"sport_category" 体育大类切换(L2) "world-cup" | "football" 301 / 302 predictSports
"sport_league" 联赛切换(L3,football 子项) "premier-league" | "champions-league" | "la-liga" | "ligue1" | "serie-a" | "mls" | "bundesliga" 30201–30207 predictSports
"market_type" 体育市场类型 Tab(Games/Props) "games" | "props" —(UI Tab,不传 categoryId) predictSports

Tag 分类树(来自接口)

以下为 GET /ce/pm/v1/api/categories 返回的完整 CategoryNode 数据。filter_value 取 slug,category_id 取 id(传给 /event/list?categoryId),两者都需要随 filter_market 事件上报。

加密资产 slug: crypto-assets · id: 100

filter_value(slug)category_id(埋点值)中文名translateKeymarketCount
bitcoin101比特币pmBitcoin90
ethereum102以太坊pmEthereum15
solana103索拉纳pmSolana37
ripple104瑞波pmRipple18
micro-strategy105微策略pmMicroStrategy133

体育 slug: sports · id: 300

层级filter_value(slug)category_id(埋点值)中文名filter_type
L2 大类 world-cup301世界杯 sport_category
L2 大类 football302足球 sport_category
└ L3premier-league30201英超sport_league
└ L3champions-league30202欧冠sport_league
└ L3la-liga30203西甲sport_league
└ L3ligue130204法甲sport_league
└ L3serie-a30205意甲sport_league
└ L3mls30206美职联sport_league
└ L3bundesliga30207德甲sport_league

世界 slug: world · id: 500

filter_value(slug)category_id(埋点值)中文名translateKeymarketCount
trump501特朗普pmTrump20
fed-interest-rate502美联储利率pmFedInterestRate28
macro-indicators503宏观指标pmMacroIndicators22
inflation504通货膨胀pmInflation15
体育 L4(各联赛下的 match / event 子类型,如 premier-league-match)当前埋点方案不区分到 L4,filter_type = "sport_league" 取 L3 slug 即可。若后续需要上报更细粒度,可新增 filter_sub_type 字段。