geo/docs/plans/2026-05-31-003-feat-geo-mon...

559 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "feat: GEO Platform Monetization Closed Loop"
type: feat
status: completed
date: "2026-05-31"
origin: docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md
secondary-origin: docs/brainstorms/2026-05-31-geo-platform-monetization-closed-loop-requirements.md
---
## Summary
修复 GEO 诊断系统(当前空输入=0 分)、建设免费 GEO 健康分获客入口、接入真实支付与功能限制、添加 AI 内容生成能力、打通内容分发与效果归因闭环,实现从获客到续费的完整商业变现链路。同时用 API 契约测试驱动核心功能修复,辅以少量 E2E 烟雾测试验证关键用户路径。
## Problem Frame
GEO 平台已具备 8 个 Agent、6 维度诊断框架、内容 Pipeline、知识库 RAG 等模块,但三个致命问题阻断了变现闭环:(1) 诊断系统使用空输入调用,永远返回 0 分,产品核心价值为零;(2) 内容 Pipeline 只做格式化不生成内容,核心付费功能缺失;(3) 支付是模拟的没有功能限制用户无付费动力。此外Onboarding 缺少付费墙触发点、分发没有实际发布集成、监控没有归因逻辑、邮件服务未接入业务系统——各模块存在但互不连通。
## Requirements
Origin: `docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md`
- R1. 修复诊断系统:实现自动数据采集,让诊断产出非零有差异的评分 → U1
- R2. 添加 AI 内容生成阶段:在 ContentPipeline 前端添加 Stage 0 → U5
- R3. 接入真实支付:微信支付+支付宝+功能限制中间件 → U4
- R4. 建设免费 GEO 健康分公开页面 → U2
- R5. 重设计 Onboarding 流程,嵌入付费墙触发点 → U3
- R6. 执行闭环:内容分发集成微信/知乎/头条 → U5
- R7. 效果归因系统 → U6
- R8. 为诊断 API 编写契约测试 → U1
- R9. 为公开健康分 API 编写契约测试 → U2
- R10. 为内容生成 API 编写契约测试 → U5
- R11. 为支付 API 编写契约测试 → U4
- R12. 编写跨步骤集成测试 → U8
- R13. 编写获客路径 E2E 烟雾测试 → U9
- R14. 编写核心流程 E2E 烟雾测试 → U9
- R15. 完成后端测试目录统一验证 → U8
- R16. 建立共享 fixture 体系 → U8
## Key Technical Decisions
KTD-1. **诊断自动数据采集采用"AI 平台查询+CitationRecord 分析"双通道方案V1 跳过网站爬取)。** 通过调用现有 AI 平台适配器查询品牌关键词分析引用情况,通过分析已有 CitationRecord 数据聚合引用指标。网站爬取通道留待 V2 迭代降低首版复杂度。AI 平台查询填充"引用就绪度"维度CitationRecord 分析填充"E-E-A-T/主题权威"维度,品牌官网 URL 解析填充"内容可提取性/Schema 标记"维度(基于简单 HTTP GET + HTML 解析,非完整爬取)。
KTD-2. **免费 GEO 健康分页面为独立公开页面,不依赖现有 Dashboard。** 新建 `/health-score` 路由,无需认证即可访问。结果缓存 24 小时(按品牌名+竞品哈希),避免重复查询消耗 API 额度。
KTD-3. **支付集成采用微信支付+支付宝双通道。** 使用官方 SDK后端实现支付回调 Webhook 处理订阅状态更新。
KTD-4. **AI 内容生成集成到现有 ContentPipeline 前端。** 在 Stage 1(RuleValidator) 之前添加 Stage 0(AI Generator),基于诊断结果+RAG 知识库+LLM 生成初稿,后续阶段不变。
KTD-5. **效果归因采用"内容发布时间窗口+引用变化关联"方案。** 发布内容时记录时间戳和基线引用数据2-4 周内定期检查引用变化。
KTD-6. **微信公众号采用半自动模式。** 生成内容+格式化+一键复制,用户手动粘贴到公众号编辑器。知乎和头条利用 API 实现自动发布。
KTD-7. **API 契约测试驱动修复E2E 仅做烟雾测试。** 每个核心 API 先写契约测试定义期望行为再修复实现。E2E 只覆盖 2 个最关键路径(获客+核心流程),不追求全面覆盖。
## High-Level Technical Design
```mermaid
flowchart TB
subgraph Phase1["Phase 1: 核心价值修复 + 契约测试"]
A[品牌名输入] --> B[自动数据采集]
B --> B1[AI平台查询]
B --> B2[CitationRecord分析]
B1 & B2 --> C[GEO诊断引擎]
C --> D[6维度评分]
D --> T1[诊断API契约测试]
end
subgraph Phase2["Phase 2: 获客入口 + 契约测试"]
D --> E[免费健康分页面]
E --> F{查看详细建议?}
F -->|免费概要| G[注册]
F -->|完整分析| G
G --> H{执行优化?}
H -->|升级付费| I[订阅支付]
E --> T2[健康分API契约测试]
end
subgraph Phase3["Phase 3: 执行闭环 + 契约测试"]
I --> J[AI内容生成]
J --> K[人工审核]
K --> L[发布到平台]
L --> M[效果归因追踪]
M --> N[ROI报告]
N --> O[续费/升级]
J --> T3[内容生成API契约测试]
I --> T4[支付API契约测试]
end
subgraph Phase4["Phase 4: 集成验证"]
T1 & T2 & T3 & T4 --> T5[跨步骤集成测试]
T5 --> T6[E2E烟雾测试]
end
```
## Implementation Units
### U1. GEO 诊断自动数据采集与修复
**Goal:** 修复当前诊断系统(空输入=0 分),实现自动数据采集填充 GEODiagnosisInput让诊断产出真实有价值的分数。
**Requirements:** R1, R8
**Dependencies:**
**Files:**
- `backend/app/services/diagnosis/geo_diagnosis.py` — 修改诊断服务,添加自动数据采集
- `backend/app/services/diagnosis/data_collector.py` — 新建自动数据采集服务
- `backend/app/api/diagnosis.py` — 修改 API 端点,支持自动采集+异步诊断
- `backend/app/schemas/diagnosis.py` — 新建诊断请求/响应 schema
- `backend/app/models/diagnosis_record.py` — 新建诊断历史记录模型
- `backend/tests/test_api/test_diagnosis_contract.py` — 新建诊断 API 契约测试
- `backend/tests/test_services/test_data_collector.py` — 新建数据采集服务测试
**Approach:**
1. 新建 `DataCollectorService`两个采集通道V1
- AI 平台查询通道:复用现有 `ai_engine` 适配器,查询品牌相关关键词,分析引用情况填充"引用就绪度"维度
- 历史数据通道:从 CitationRecord 聚合已有引用数据,填充"E-E-A-T/主题权威"维度
- 品牌官网解析:简单 HTTP GET + HTML 解析(检查 Schema 标记、标题层级等),填充"内容可提取性/Schema 标记"维度
2. 修改 `GEODiagnosisService.diagnose()` 接受 `DataCollectorOutput` 作为输入
3. 修改诊断 API 端点:`POST /api/v1/diagnosis/geo/{brand_id}` 触发异步诊断,`GET /api/v1/diagnosis/geo/{brand_id}/result` 轮询结果
4. 诊断结果持久化到 `diagnosis_records` 表,支持历史对比
5. 免费版返回综合分+3 核心维度,付费版返回全部 6 维度
6. **先写契约测试**:定义诊断 API 的期望行为(非零评分、维度结构、免费/付费差异),再修复实现
**Execution note:** 先写诊断 API 契约测试(红色),再实现 DataCollectorService 和修改诊断服务(绿色)。
**Patterns to follow:**
- 复用 `backend/app/services/ai_engine/` 下的平台适配器
- 复用 `backend/app/workers/citation_engine.py` 的查询执行模式
- 异步任务模式参考 `backend/app/services/detection/detection_scheduler.py`
- 契约测试参考 `backend/tests/conftest.py` 中的 async_client fixture
**Test scenarios:**
- 输入有效品牌名,自动采集数据并返回非零诊断分数
- 输入不存在的品牌名,返回低分但非零(基于 AI 平台查询结果)
- 免费用户请求诊断,只返回 3 个核心维度
- 付费用户请求诊断,返回全部 6 维度
- 同一品牌 24 小时内重复请求,返回缓存结果
- 诊断结果持久化,第二次诊断可展示历史对比
- 契约测试POST /api/v1/diagnosis/geo/{brand_id} 返回 202 + task_id
- 契约测试GET /api/v1/diagnosis/geo/{brand_id}/result 返回非零 overall_score
**Verification:** 调用 `POST /api/v1/diagnosis/geo/{brand_id}` 返回真实非零评分,且不同品牌评分有差异。契约测试全部通过。
---
### U2. 免费 GEO 健康分公开页面
**Goal:** 建设无需注册即可访问的 GEO 健康分页面,作为获客和市场教育的核心入口。
**Requirements:** R4, R9
**Dependencies:** U1
**Files:**
- `frontend/app/(public)/health-score/page.tsx` — 新建公开健康分页面
- `frontend/app/(public)/health-score/components/ScoreCard.tsx` — 评分卡片组件
- `frontend/app/(public)/health-score/components/CompetitorComparison.tsx` — 竞品对比组件
- `frontend/app/(public)/health-score/components/ShareButton.tsx` — 分享按钮组件
- `frontend/lib/api/health-score.ts` — 健康分 API 客户端
- `backend/app/api/health_score.py` — 新建公开健康分 API无需认证
- `backend/app/schemas/health_score.py` — 健康分响应 schema
- `backend/tests/test_api/test_health_score_contract.py` — 新建健康分 API 契约测试
**Approach:**
1. 新建公开路由 `/health-score`,无需登录即可访问
2. 页面核心交互:输入品牌名 → 30 秒内展示 GEO 健康分报告
3. 报告内容:综合评分(大数字+健康等级色标、3 核心维度雷达图、3 竞品对比柱状图、最严重 3 个问题概要
4. "查看详细修复建议"按钮 → 触发注册弹窗
5. 注册后自动关联本次诊断结果到用户账户
6. 支持生成可分享链接(含品牌名参数)和 PDF 下载
7. 后端:`GET /api/v1/public/health-score?brand=XXX` 无需认证,返回免费版诊断结果
8. 结果缓存 24 小时Redis避免重复查询
**Patterns to follow:**
- 前端页面参考 `frontend/app/(dashboard)/onboarding/Step4HealthReport.tsx` 的报告展示模式
- API 参考 `backend/app/api/diagnosis.py` 但无需认证
- 分享功能参考 `backend/app/api/reports.py` 的 PDF 生成
**Test scenarios:**
- 未登录用户输入品牌名30 秒内看到健康分报告
- 报告包含综合评分、3 维度、3 竞品对比
- 点击"查看详细建议"弹出注册弹窗
- 注册后诊断结果自动关联到账户
- 生成可分享链接,他人打开看到相同报告
- 24 小时内重复查询同一品牌返回缓存结果
- 契约测试GET /api/v1/public/health-score?brand=XXX 返回 200 + 非零评分
- 契约测试:无品牌名参数返回 422
**Verification:** 未登录状态下访问 `/health-score`,输入品牌名后看到完整报告且可分享。契约测试通过。
---
### U3. Onboarding 重设计与转化层
**Goal:** 重设计 Onboarding 流程以"查看 GEO 健康分"为第一步,嵌入付费墙触发点。
**Requirements:** R5
**Dependencies:** U1, U2
**Files:**
- `frontend/app/(dashboard)/onboarding/page.tsx` — 重写 Onboarding 主页面
- `frontend/app/(dashboard)/onboarding/Step0HealthScore.tsx` — 新建第一步:健康分
- `frontend/app/(dashboard)/onboarding/Step1BrandName.tsx` — 修改为简化版
- `frontend/app/(dashboard)/onboarding/Step4HealthReport.tsx` — 修改为含升级提示
- `frontend/app/(dashboard)/onboarding/Step5ActionSuggestions.tsx` — 修改为含执行按钮+付费墙
- `frontend/components/subscription/UpgradePrompt.tsx` — 新建升级提示组件
**Approach:**
1. 新流程Step0(输入品牌名看健康分) → Step1(注册/登录) → Step2(补充竞品信息) → Step3(查看详细报告+升级提示) → Step4(行动建议+执行按钮)
2. Step0 直接复用 U2 的健康分页面组件,嵌入 Onboarding 流程
3. 在以下场景嵌入升级提示:
- 查看详细 6 维度分析时 → "升级 Pro 版查看完整分析"
- 点击执行优化建议时 → "升级 Starter 版开始优化"
- 查看效果归因报告时 → "升级 Pro 版追踪优化效果"
4. 升级提示组件 `UpgradePrompt` 统一管理,显示当前套餐限制和升级收益
**Patterns to follow:**
- 现有 Onboarding 步骤组件模式Step1-5 的 props 接口)
- `useOnboardingData` hook 的数据管理模式
**Test scenarios:**
- 新用户进入 Onboarding第一步看到健康分输入框
- 输入品牌名后看到免费健康分报告
- 注册后继续 Onboarding看到详细报告含升级提示
- 免费用户点击"执行优化"时看到升级弹窗
- 已完成 Onboarding 的用户不再看到引导
**Verification:** 新用户从健康分开始 Onboarding在关键节点看到升级提示。
---
### U4. 真实支付集成与功能限制
**Goal:** 接入微信支付+支付宝,实现功能限制中间件,让付费真正生效。
**Requirements:** R3, R11
**Dependencies:** U3
**Files:**
- `backend/app/services/payment/wechat_pay.py` — 新建微信支付服务
- `backend/app/services/payment/alipay.py` — 新建支付宝服务
- `backend/app/services/payment/base.py` — 新建支付基类
- `backend/app/api/payments.py` — 新建支付 API 端点
- `backend/app/middleware/subscription_enforcement.py` — 新建功能限制中间件
- `backend/app/services/subscription.py` — 修改添加真实支付逻辑
- `backend/app/api/subscriptions.py` — 修改添加支付 Webhook
- `backend/app/models/subscription.py` — 修改添加支付相关字段
- `backend/tests/test_api/test_payment_contract.py` — 新建支付 API 契约测试
- `backend/tests/test_services/test_payment.py` — 新建支付服务测试
**Approach:**
1. 支付基类定义统一接口:`create_order`, `verify_callback`, `refund`
2. 微信支付:使用官方 SDK实现 JSAPI 支付H5 页面)和 Native 支付(扫码)
3. 支付宝:使用官方 SDK实现手机网站支付
4. 支付 Webhook`POST /api/v1/payments/callback/wechat` 和 `/alipay`,验证签名后更新订阅状态
5. 功能限制中间件:在 API 路由层检查用户套餐,超限返回 403+升级提示
6. 限制维度:查询数/品牌数/诊断频率/内容生成数/知识库数/数据保留期
7. **先写契约测试**:定义支付 API 的期望行为(创建订单、回调处理、功能限制)
**Execution note:** 先写支付 API 契约测试(红色),再实现支付服务(绿色)。
**Patterns to follow:**
- 支付回调参考 `backend/app/api/auth.py` 的 Webhook 处理模式
- 功能限制参考 `backend/app/middleware/rate_limit.py` 的中间件模式
- 订阅逻辑复用 `backend/app/services/subscription.py` 的 PLANS 配置
**Test scenarios:**
- 创建支付订单,返回支付链接/二维码
- 支付成功回调,订阅状态更新为 active
- 免费用户超出查询限制,返回 403+升级提示
- Pro 用户在限制内正常使用
- 支付失败回调,订阅状态不变
- 订阅到期,自动降级为免费版
- 契约测试POST /api/v1/payments/orders 返回 201 + order_id + pay_url
- 契约测试POST /api/v1/payments/callback/wechat 验证签名后更新订阅
**Verification:** 完整支付流程:创建订单→支付→回调→订阅激活→功能解锁。契约测试通过。
---
### U5. AI 内容生成与分发集成
**Goal:** 在 ContentPipeline 前端添加 AI 生成阶段,集成知乎/头条 API 发布和微信半自动发布。
**Requirements:** R2, R6, R10
**Dependencies:** U1, U4
**Files:**
- `backend/app/services/content/ai_generator.py` — 新建 AI 内容生成服务
- `backend/app/services/content/content_pipeline.py` — 修改添加 Stage 0
- `backend/app/services/distribution/publishers/zhihu_publisher.py` — 新建知乎发布器
- `backend/app/services/distribution/publishers/toutiao_publisher.py` — 新建头条发布器
- `backend/app/services/distribution/publishers/wechat_publisher.py` — 新建微信半自动发布器
- `backend/app/services/distribution/publish_engine.py` — 新建发布引擎
- `backend/app/api/distribution.py` — 修改添加发布 API
- `backend/tests/test_api/test_content_contract.py` — 新建内容生成 API 契约测试
- `backend/tests/test_services/test_ai_generator.py` — 新建 AI 生成测试
- `backend/tests/test_services/test_publishers.py` — 新建发布器测试
**Approach:**
1. AI 内容生成服务:
- 输入:诊断结果(问题维度)+ RAG 知识库上下文 + 目标关键词 + 目标平台
- 调用 LLM 生成初稿,基于诊断结果针对性优化
- 输出传入现有 PipelineRuleValidator → SensitiveFilter → SEOOptimizer → HTMLGenerator
2. 发布引擎:
- 知乎:通过知乎创作中心 API 发布文章(需 OAuth 授权)
- 头条:通过头条号 API 发布文章(需 API Key
- 微信:生成格式化内容+复制引导,不直接调用 API
3. 发布流程AI 生成 → 人工预览/编辑 → 确认发布 → 调用对应 Publisher → 记录发布状态
4. 发布记录关联到 Content 模型,用于后续归因
**Patterns to follow:**
- AI 生成参考 `backend/app/services/content/content_generation_service.py` 的 LLM 调用模式
- RAG 集成参考 `backend/app/services/knowledge/rag_service.py`
- 平台规则复用 `backend/app/services/distribution/platform_rules.py`
- Publisher 模式参考 `backend/app/services/ai_engine/` 的适配器模式
**Test scenarios:**
- 基于诊断结果+知识库上下文生成针对性优化内容
- 生成内容通过 Pipeline 校验RuleValidator + SensitiveFilter
- 知乎 API 发布成功,返回文章 URL
- 头条 API 发布成功,返回文章 URL
- 微信半自动模式生成格式化内容+复制引导
- 发布记录保存到 Content 模型,状态为 published
- 契约测试POST /api/v1/content/generate 返回 201 + content_id + 生成内容
**Verification:** 从诊断建议到内容生成到发布的完整流程可走通。契约测试通过。
---
### U6. 效果归因系统与 ROI 报告
**Goal:** 建设效果归因系统,追踪已发布内容的 AI 引用变化,生成 ROI 报告证明付费价值。
**Requirements:** R7
**Dependencies:** U5
**Files:**
- `backend/app/services/attribution/attribution_engine.py` — 新建归因引擎
- `backend/app/services/attribution/roi_calculator.py` — 新建 ROI 计算器
- `backend/app/api/attribution.py` — 新建归因 API
- `backend/app/models/attribution_record.py` — 新建归因记录模型
- `backend/app/services/monitoring/monitor_service.py` — 修改集成归因
- `frontend/app/(dashboard)/dashboard/roi/page.tsx` — 新建 ROI 报告页面
- `frontend/lib/api/attribution.ts` — 新建归因 API 客户端
- `backend/tests/test_services/test_attribution.py` — 新建归因测试
**Approach:**
1. 归因引擎核心逻辑:
- 内容发布时记录:发布时间、目标关键词、发布前基线引用数据
- 定期(每 3 天)检查目标关键词的引用变化
- 归因判定:引用率上升 + 新引用内容与已发布内容语义相关 → 归因为该内容贡献
- 归因窗口2-4 周,窗口内持续追踪
2. ROI 计算器:输入订阅费用+归因引用提升+行业平均引用价值,输出 GEO ROI 百分比
3. A/B 对比报告:优化前诊断分数 vs 当前诊断分数,按维度对比
4. 效果保障:如果 2-4 周内无任何引用提升,提供额外优化建议或延长服务
**Patterns to follow:**
- 监控模式参考 `backend/app/services/monitoring/monitor_service.py`
- 定期任务参考 `backend/app/services/detection/detection_scheduler.py`
- 报告生成参考 `backend/app/api/reports.py`
**Test scenarios:**
- 发布内容后自动创建归因追踪记录
- 3 天后检查引用变化,记录 delta
- 引用率上升且语义相关,归因为该内容贡献
- 归因窗口结束后生成 ROI 报告
- 优化前后 A/B 对比报告展示各维度变化
- 无引用提升时提供额外优化建议
**Verification:** 发布内容→2-4 周后→归因报告展示引用提升和 ROI。
---
### U7. 邮件集成与 Dashboard 变现 UI
**Goal:** 将 EmailService 接入业务系统周报、续费提醒Dashboard 添加订阅状态、用量进度、ROI 面板。
**Requirements:** R7 (邮件部分)
**Dependencies:** U4, U6
**Files:**
- `backend/app/services/email_service.py` — 修改添加新模板
- `backend/app/services/email/email_scheduler.py` — 新建邮件调度器
- `backend/app/templates/geo_weekly_report.html` — 新建周报模板
- `backend/app/templates/renewal_reminder.html` — 新建续费提醒模板
- `backend/app/templates/trial_expiring.html` — 新建试用期到期模板
- `frontend/app/(dashboard)/dashboard/page.tsx` — 修改添加变现 UI
- `frontend/components/subscription/SubscriptionStatus.tsx` — 新建订阅状态组件
- `frontend/components/subscription/UsageProgress.tsx` — 新建用量进度组件
- `frontend/components/dashboard/ROICard.tsx` — 新建 ROI 卡片组件
**Approach:**
1. 邮件模板新增GEO 变化周报、续费提醒(到期前 7 天/3 天/1 天)、试用期到期提醒、欢迎邮件
2. 邮件调度器APScheduler 定时任务,每周一发送周报,每日检查续费提醒
3. Dashboard 变现 UI顶部订阅状态栏、用量进度条、ROI 卡片、功能锁定 UI
4. 配置真实 SMTP支持 SendGrid/阿里云邮件推送)
**Patterns to follow:**
- 邮件模板参考 `backend/app/services/email_service.py` 现有模板格式
- Dashboard 组件参考 `frontend/app/(dashboard)/dashboard/page.tsx` 的 KPI 卡片模式
- 订阅状态参考 `backend/app/services/subscription.py` 的 PLANS 配置
**Test scenarios:**
- 每周一自动发送 GEO 变化周报给注册用户
- 订阅到期前 7 天发送续费提醒
- 试用期到期前 3 天发送提醒
- Dashboard 显示当前套餐和用量进度
- 超出用量时显示升级提示
- ROI 卡片展示引用率提升和归因内容
**Verification:** 注册用户收到周报邮件Dashboard 显示订阅状态和 ROI 数据。
---
### U8. API 契约集成测试与测试基础设施
**Goal:** 编写跨步骤集成测试验证完整链路,完成后端测试基础设施统一。
**Requirements:** R12, R15, R16
**Dependencies:** U1, U2, U4, U5
**Files:**
- `backend/tests/test_integration/test_monetization_flow.py` — 新建变现闭环集成测试
- `backend/tests/conftest.py` — 增强 fixture 体系
- `backend/tests/fixtures/auth.py` — 新建认证 fixture 模块
- `backend/tests/fixtures/database.py` — 新建数据库 fixture 模块
- `backend/tests/fixtures/client.py` — 新建 httpx 客户端 fixture 模块
- `backend/tests/fixtures/brands.py` — 新建品牌测试数据 fixture 模块
**Approach:**
1. 编写跨步骤集成测试:品牌创建→诊断→方案→内容生成→效果追踪的完整链路
2. 验证 U1-U5 的 API 契约测试在集成场景下仍然通过
3. 完成后端测试目录统一验证(原 QA 计划 U1
4. 建立共享 fixture 体系:按领域拆分到 `backend/tests/fixtures/`
- auth.pyoverride_get_current_user、auth_token、auth_headers
- database.pyasync_engine、async_session含自动 rollback
- client.pyasync_clienthttpx AsyncClient with app
- brands.py预创建的测试品牌和竞品数据
5. conftest.py 通过 pytest plugin 机制自动加载 fixtures/ 下所有模块
**Patterns to follow:**
- `backend/tests/conftest.py` 现有 fixture 模式
- `backend/tests/test_integration/test_business_flow.py` 现有集成测试模式
**Test scenarios:**
- 品牌创建→诊断→方案→内容生成→效果追踪全链路通过
- 数据在步骤间正确传递(品牌 ID、诊断结果 ID、内容 ID
- 共享 fixture 可被其他测试复用
- 数据库 fixture 在测试结束后自动 rollback
- 多个测试并行运行时 fixture 互不干扰
**Verification:** `cd backend && pytest tests/test_integration/test_monetization_flow.py --tb=short` 通过。`cd backend && pytest tests/ -q` 全部测试被发现且无新增失败。
---
### U9. E2E 烟雾测试
**Goal:** 编写 2 个关键路径的 Playwright E2E 烟雾测试,验证最核心的用户路径端到端可用。
**Requirements:** R13, R14
**Dependencies:** U2, U3
**Files:**
- `frontend/e2e/tests/health-score-smoke.spec.ts` — 新建获客路径烟雾测试
- `frontend/e2e/tests/core-flow-smoke.spec.ts` — 新建核心流程烟雾测试
**Approach:**
1. 获客路径烟雾测试:访问健康分页面→输入品牌名→看到报告→点击注册
2. 核心流程烟雾测试:登录→创建品牌→触发诊断→查看诊断结果
3. 使用独立 setup直接调用 API 创建测试数据),不依赖共享 fixture
4. 确保截图和视频录制配置正确screenshot:on-failure, video:retain-on-failure
**Patterns to follow:**
- `frontend/e2e/tests/login.spec.ts` 现有 E2E 测试模式
- `frontend/e2e/pages/login.page.ts` Page Object 模式
**Test scenarios:**
- 获客路径:未登录→访问 /health-score→输入品牌名→30 秒内看到报告→点击注册→注册弹窗出现
- 核心流程:登录→创建品牌→品牌出现在 Dashboard→触发诊断→诊断结果非零
- 测试失败时自动截图保存
**Verification:** `cd frontend && npx playwright test health-score-smoke core-flow-smoke` 通过。
## Scope Boundaries
**Deferred for later:**
- 网站爬取通道(诊断数据采集 V2
- 全面 E2E 测试覆盖(原 QA 计划 U3/U4/U5 → 上线后逐步扩展)
- 性能基线测试(原 QA 计划 U7 → 上线后有真实负载后建立)
- CI 安全扫描(原 QA 计划 U8 → 上线后集成)
- Alembic 迁移验证(原 QA 计划 U8 → 上线后添加)
- 前端组件测试(原 QA 计划 U10 → 上线后扩展)
- 行业 GEO 基准数据积累
- API 市场开放和第三方集成
- 白标报告和专属客户成功经理
- 多语言和国际 AI 平台支持
- 知识库自动构建(从品牌官网自动提取 GEO 相关信息结构)
- 批量内容生成(一次生成多平台内容)
- 内容日历和排期执行系统
**Outside this product's identity:**
- 传统 SEO 工具功能(关键词排名、外链分析等)
- 广告投放和营销自动化
- 社交媒体管理
- 基础设施级别的渗透测试
**Deferred to follow-up work:**
- E2E 测试迁移到共享 fixtureU9 完成后,将独立 setup 替换为 U8 的共享 fixture
- 性能基线设定阈值和告警(上线后根据数据设定合理阈值)
- 跨浏览器 E2E 扩展(稳定 Chromium 后再扩展)
- 知乎/头条 API OAuth 授权完整流程
- 批量内容生成
## Open Questions
- 微信公众号 OAuth 授权流程的具体实现方案需在 U5 实施时确认
- 知乎和头条 API 的申请和审核周期可能影响 U5 的交付时间
- 诊断自动数据采集的品牌官网解析可能遇到反爬机制,需准备降级方案
- 真实 SMTP 配置需要用户提供邮件服务商账号信息
- 效果归因的具体技术实现方案(基于引用检测还是基于评分变化)
- 付费版定价是否需要调整(当前 ¥199/599/1999 是否匹配价值感知)
## Risks & Dependencies
| Risk | Impact | Mitigation |
|------|--------|------------|
| 诊断数据采集不准确 | 用户不信任健康分,获客失效 | 先用 AI 平台查询数据(已有适配器),品牌官网解析作为增强 |
| 微信/知乎/头条 API 审核不通过 | 分发集成延期 | 微信降级为半自动,知乎/头条备选手动发布 |
| 支付 SDK 集成复杂度超预期 | 付费闭环延期 | 先实现支付宝(文档更友好),微信支付后续迭代 |
| GEO 效果归因窗口内无可见提升 | 用户认为产品无效 | 提供效果保障机制,延长归因窗口或提供额外优化 |
| 免费诊断 API 调用成本过高 | 运营成本失控 | 24 小时缓存+频率限制+深度限制 |
| LLM API Key 不可用影响内容生成 | 核心付费功能不可用 | 支持多 LLM Provider 降级,至少保证一个可用 |
## Sources & Research
- Origin requirements: `docs/brainstorms/2026-05-31-geo-next-phase-core-flow-repair-requirements.md`
- Secondary origin: `docs/brainstorms/2026-05-31-geo-platform-monetization-closed-loop-requirements.md`
- QA plan (downscoped): `docs/plans/2026-05-31-002-test-quality-assurance-system-plan.md`
- Existing diagnosis system: `backend/app/services/diagnosis/geo_diagnosis.py`
- Diagnosis API root cause: `backend/app/api/diagnosis.py` line 75 (`GEODiagnosisInput()`)
- Existing content pipeline: `backend/app/services/content/content_pipeline.py`
- Existing distribution rules: `backend/app/services/distribution/platform_rules.py`
- Existing monitoring: `backend/app/services/monitoring/monitor_service.py`
- Existing subscription: `backend/app/services/subscription.py`
- Existing email: `backend/app/services/email_service.py`
- Existing E2E tests: `frontend/e2e/tests/`