html
<!-- 1. 引入配置 + 设置你的产品信息 -->
<script src="survey-config.js"></script>
<script>
window.SURVEY_CONFIG = {
productName: '我的产品',
tasks: [
{ id:'T1', label:'完成注册', detect:'signup_done' },
{ id:'T2', label:'完成下单', detect:'order_done' },
{ id:'T3', label:'完成支付', detect:'payment_done' }
]
};
</script>
<!-- 2. 引入核心文件 -->
<script src="tracker.js"></script>
<script src="survey.js"></script>
javascript
// 用户完成某个步骤时调用一次,Survey 自动响应
UserTestTracker.milestone('signup_done'); // 注册完成 → 触发 T1 任务
UserTestTracker.milestone('order_done'); // 下单完成 → 触发 T2 任务
UserTestTracker.milestone('payment_done'); // 支付完成 → 触发 T3 + 总结问卷
模块功能定制方式tracker.js6 维埋点(操作/犹豫/困惑/停留/里程碑/热区)改 TRACKER_CONFIG.endpoint 即可survey.js主动问卷(任务面板 + checkpoint 微问卷 + SUS/EV/NPS)改 SURVEY_CONFIG.tasks 即可
html
<script src="tracker-config.js"></script>
<script>
// ★ 必须设置:数据上报地址
window.TRACKER_CONFIG.endpoint = 'https://your-server.com/track';
// ★ 推荐设置:milestone 映射(让 survey.js 能跨产品工作)
window.TRACKER_CONFIG.milestones = {
'signup_done': 'step1_done',
'order_complete':'step2_done',
'payment_done': 'task_done'
};
// ★ 可选:自定义 action 识别
window.TRACKER_CONFIG.actionMap = {
'.signup-btn': 'signup',
'#checkout-btn':'purchase',
'.play-btn': 'play_video'
};
</script>
<script src="tracker.js"></script>
html
<script src="survey-config.js"></script>
<script>
// ★ 推荐设置:产品名称(用于问卷文案)
window.SURVEY_CONFIG.productName = '我的产品';
// ★ 必须设置:任务列表(核心定制点)
window.SURVEY_CONFIG.tasks = [
{ id:'T1', label:'完成注册流程', detect:'step1_done' },
{ id:'T2', label:'完成首次下单', detect:'step2_done' },
{ id:'T3', label:'完成支付', detect:'task_done' }
];
// ★ 推荐设置:情境问卷(checkpoint)
window.SURVEY_CONFIG.checkpoints = [
{
id: 'signup_ease',
trigger: 'step1_done',
delay: 1500,
type: 'rating',
question: '注册流程顺利吗?',
scale: 5,
labels: ['很困难', '有点绕', '还行', '比较顺', '一下就找到了'],
allowComment: true,
commentPH: '在哪卡住过?(可选)'
}
];
</script>
<script src="survey.js"></script>
javascript
// 业务完成某个步骤时调用一次,Survey 自动响应
UserTestTracker.milestone('signup_done'); // 注册完成 → 触发 T1 任务 + 对应 checkpoint
UserTestTracker.milestone('step2_done'); // 下单完成
UserTestTracker.milestone('task_done'); // 支付完成 → 触发 T3 + 任务结束 + 总结问卷
text
user-test-toolkit/
├── SKILL.md # 本文档
├── references/
│ ├── tracker-spec.md # Tracker 完整 API 参考
│ └── survey-spec.md # Survey 配置参考 + 题型说明
└── assets/
├── tracker.js # 埋点系统(v3,支持配置)
├── tracker-config.js # Tracker 配置模板(即插即用)
├── survey.js # 问卷引擎(v3,支持配置)
└── survey-config.js # Survey 配置模板(零基础定制)
配置项类型默认值说明endpointstring''必填。埋点上报地址,如 'https://your-server.com/track'``flushIntervalnumber8000批量上报间隔(ms)maxQueuenumber30缓存超过此条数立即上报milestonesobject内置映射milestone 名称映射表: { 业务名: 通用名 }``actionMapobject{}action 自动分类选择器映射disabledbooleanfalse``true = 记录但不上报
配置项类型默认值说明productNamestring'本产品'问卷文案中的产品名称tasksarray内置默认任务定义数组(见下方格式)checkpointsarray内置默认情境问卷数组(见下方格式)welcomeInternalobject内置默认内部测试欢迎页文案welcomeUserobject内置默认外部用户欢迎页文案testVideoUrlstring'assets/test-video.mov'测试素材下载地址openQuestion1/2string内置默认总结问卷开放题文本
javascript
{
id: 'T1', // 唯一ID
label: '完成注册流程', // 显示给用户的任务描述
hint: '用手机号注册', // 内部模式显示的提示(可选)
detect: 'signup_done' // 触发的 milestone 名称(映射后)
}
javascript
// rating 型(李克特评分)
{
id: 'signup_ease',
trigger: 'signup_done', // 映射前的 milestone 名称
delay: 1500, // 延迟触发(ms)
type: 'rating',
question: '注册流程顺利吗?',
scale: 5, // 5 或 7 分
labels: ['很困难', ..., '很顺利'], // 两端标签
allowComment: true, // 是否显示评论框
commentPH: '在哪卡住过?' // 评论 placeholder
}
// sam 型(SAM 情绪模型)
{
id: 'post_use_sam',
trigger: 'task_done',
delay: 2000,
type: 'sam',
question: '使用后感觉如何?',
dims: [
{ id: 'arousal', label: '紧张程度', l: '很放松', r: '很焦虑' },
{ id: 'valence', label: '满意程度', l: '不满意', r: '很满意' }
]
}
type说明detail 字段enter页面访问url, referrer, screen, viewportfirst_interact首次交互how(click/scroll/enter_key/focus_input), hesitation(秒)click点击target(CSS选择器), x/y(%), action(分类名称)frustration困惑行为target, repeats(次数), hintfile_select文件选择name, sizeMB, typefocus输入框聚焦targetinput_enter回车提交inputId, lengthscroll滚动深度depth(%)tab_away/back页面切换elapsed(秒)leave页面离开duration, scrollDepth, interactions, hesitationerrorJS 错误msg, file, linemilestone业务里程碑name(映射后), originalName(映射前)phase_start/end阶段标记phaseupload_progress/done/fail上传pct / url,sizeMB / errormps_statusMPS 状态status, elapsedsurvey_show/answer/skip/exit_submit问卷事件—task_complete任务完成taskId, label, elapsed
javascript
// 底层
UserTestTracker.record(type, detail) // 记录任意事件
UserTestTracker.flush() // 强制刷新缓冲区
// 里程碑(最常用)
UserTestTracker.milestone(name) // 记录 milestone(自动映射)
UserTestTracker.milestone(name, extra) // 带附加数据
// 阶段
UserTestTracker.phaseStart(name)
UserTestTracker.phaseEnd(name)
// 上传
UserTestTracker.uploadProgress(pct) // 0-100
UserTestTracker.uploadDone(url, sizeMB)
UserTestTracker.uploadFail(err)
// MPS 状态(保留给特定场景)
UserTestTracker.mpsStatus(status, elapsed)
// 问卷联动(Survey 内部使用)
UserTestTracker.surveyShow(id, type)
UserTestTracker.surveyAnswer(data)
UserTestTracker.surveySkip(id)
UserTestTracker.surveyExitSubmit(data)
UserTestTracker.taskComplete(taskId, label)
// 信息
UserTestTracker.uid // 当前用户 ID
UserTestTracker.testRound // 当前测试轮次
UserTestTracker.sessionId // 当前会话 ID
assets/test-video.movTRACKER_CONFIG.endpoint + SURVEY_CONFIG.tasks?uid=user001&test=round1&smode=teststype=user)/track 端点汇总tracker.js,不引 survey.jssmode=test 参数输出来源内容操作序列JSONtracker完整用户行为路径(时间线)犹豫/困惑标记tracker入口问题 + 困惑点定位里程碑转化率tracker核心漏斗各步骤到达率SUS 评分survey exit可用性量化分(0-100)NPS 评分survey exit推荐意愿(-100~100)EV 情绪分survey exit9题情绪价值均值三词标签survey exit用户心智关键词开放反馈survey exit定性问题和建议
bash
cd ~/.codebuddy/skills/user-test-toolkit
git init
git add .
git commit -m "feat: user-test-toolkit v3 configurable"
git remote add origin https://github.com/YOUR_USERNAME/user-test-toolkit.git
git push -u origin main
其他人使用:
bash
git clone https://github.com/YOUR_USERNAME/user-test-toolkit.git
# 或作为 submodule