文档版本:v1.0 最后更新:2026-04-05 12:36:25
本文档用于定义当前项目中,原生内容卡、H5 详情页、H5 互动任务页、增强结果页 的最小埋点口径与结果回传结构,避免后续出现“曝光、点击、任务完成、业务落库”混为一谈的情况。
核心结论:
展示埋点、交互埋点、任务结果回传必须分层定义;H5 可以上报行为与任务结果,但不能直接决定打点成功或比赛状态。
本文档重点解决以下问题:
submitResult 回传 H5 任务页结果适用范围:
不适用范围:
H5 回传的任务结果只表示:
它不直接表示:
埋点事件主要用于:
业务落库主要用于:
这两者可以共用部分字段,但不能视为同一条链路。
若埋点上报失败:
若 submitResult 或内容面 API 落库失败:
建议将相关事件分为三层:
用于记录页面或卡片是否被看到。
例如:
用于记录用户在页面中的关键操作。
例如:
用于记录任务是否完成,以及完成后产出的结果对象。
例如:
无论是原生内容卡还是 H5 页面,建议统一携带以下字段:
eventId
活动标识sessionId
对局标识controlId
点位标识;非点位页面可为空taskId
任务标识;非任务页面可为空pageCode
H5 页面编码pageType
页面类型bridgeVersion
Bridge 协议版本contentSource
内容来源triggerSource
触发来源timestamp
事件时间建议补充字段:
userIdtenantIdvariantIdresultIddeviceTypenetworkType字段说明:
contentSource
建议取值:native-card h5-content h5-task h5-resulttriggerSource
建议取值:auto-popup card-cta map-click result-action建议统一定义以下 pageType:
native-content-cardh5-content-pageh5-task-pagenative-result-pageh5-result-page这样可以保证:
结合当前待办中的口径,建议先正式收口以下事件:
content_card_enter表示内容卡实际展示给用户。
建议时机:
content_card_close表示内容卡被关闭。
建议补充原因字段:
closeReason = auto-dismisscloseReason = user-closecloseReason = replacedcloseReason = open-h5content_card_cta_click表示用户点击内容卡主 CTA。
建议补充字段:
ctaKeytargetTypetargetPageCoderesult_page_enter表示原生结果页进入。
该事件用于与 H5 增强结果页做漏斗对比。
h5_page_enter表示 H5 页面真实进入。
建议在:
之后触发,而不是在 web-view 打开瞬间就记。
h5_page_exit表示 H5 页面退出。
建议补充:
exitReason = closeexitReason = backexitReason = bridge-closeexitReason = replacedexitReason = errorh5_cta_click表示 H5 页内关键 CTA 被点击。
建议至少带:
ctaKeyctaLabeltaskIdh5_interaction表示任务页关键互动动作。
建议只用于关键动作,不记录所有噪声操作。
推荐 actionKey:
start-tasktake-photorecord-audiosubmit-formshareretry若页面属于互动任务页,建议增加一组任务态事件:
task_viewed表示用户已看到任务主体。
task_started表示用户开始任务,不再只是浏览。
task_progressed表示阶段性推进。
适用场景:
建议带:
stepIdstepIndexstepStatustask_completed表示任务完成,但不代表业务一定已成功落库。
task_failed表示任务失败。
建议补充:
errorCodeerrorStagetask_cancelled表示用户主动放弃任务。
submitResult 推荐结构建议将 submitResult 视为“结果层回传”,而不是普通点击埋点。
推荐最小结构:
{
"id": "req-002",
"channel": "request",
"type": "submitResult",
"payload": {
"taskId": "task-photo-control-3",
"taskType": "photo-checkin",
"attemptId": "attempt-001",
"status": "completed",
"pageCode": "task-control-3-photo",
"controlId": "control-3",
"result": {
"assetId": "img-001"
}
}
}
字段建议:
taskId
任务标识taskType
任务类型attemptId
一次任务尝试标识status
任务结果状态pageCode
页面编码controlId
关联点位result
结构化结果对象submitResult.status 建议口径建议第一阶段只正式支持:
completedfailedcancelledskipped建议解释:
completed
用户已完成任务目标failed
本次任务尝试失败cancelled
用户主动退出或放弃skipped
允许跳过的任务被明确跳过当前不建议第一阶段就把过多中间状态做成业务落库状态。
例如:
viewedstartedprogressed这些更适合作为埋点事件,而不是最终任务结果状态。
result 结果对象建议不同任务类型建议分别约定 result:
{
"assetId": "img-001",
"assetType": "image",
"count": 1
}
{
"assetId": "audio-001",
"assetType": "audio",
"durationMs": 12000
}
{
"formId": "form-001",
"submissionId": "sub-001"
}
{
"questionSetId": "quiz-001",
"score": 3,
"total": 5
}
原则:
result 保持结构化result建议内容面 API 承接:
submitResult 后的业务落库建议最小落库对象至少包含:
eventIdsessionIdcontrolIdtaskIdattemptIdpageCodestatusresultJsonsubmittedAt建议能力边界:
为避免重复点击、网络重试或页面重进导致重复落库,建议:
建议以:
sessionIdtaskIdattemptId作为一次任务尝试的幂等键。
建议以下事件在单次页面进入内只记一次:
h5_page_entertask_viewedtask_startedtask_completed以下事件允许多次:
h5_cta_clickh5_interactiontask_progressed但建议带:
sequencestepIdtimestamp建议的最小时机如下:
content_card_entercontent_card_closecontent_card_cta_clickh5_page_entertask_viewedtask_startedtask_progressedsubmitResult(completed) 前:task_completedresult_page_enterh5_page_enterh5_open_failedsubmitResult 失败建议第一阶段只先正式收口以下事件,不一开始扩太大:
content_card_entercontent_card_closecontent_card_cta_clickresult_page_enterh5_page_enterh5_page_exith5_cta_clicktask_viewedtask_startedtask_completedtask_failedtask_cancelled以及一个正式回传动作:
submitResult这样已经足够支撑:
submitResult 兼做曝光埋点本规范补充收口以下文档中的未定项:
原生与 H5 Bridge 规范H5 增强与内容扩展层方案混合体验架构方案API 与发布物边界约定MyToDo 中已出现的内容卡与结果页事件线索定位上:
Bridge 规范 负责通信动作最适合当前项目的做法不是让 H5 自己发明一套任务体系,而是:
由主系统定义统一上下文、统一事件口径、统一结果回传结构,让 H5 只负责增强体验与任务执行。