|
@@ -0,0 +1,224 @@
|
|
|
|
|
+# Saas VOC
|
|
|
|
|
+
|
|
|
|
|
+国内电商 VOC(Voice of Customer)通用模板。项目以德玛仕为首个案例,在不影响现有跨境电商系统和线上数据库的前提下,复用现有 Angular VOC 页面、Parse 数据访问模式,以及 Fmode 封装的 JustOneAPI 电商数据中转能力。
|
|
|
|
|
+
|
|
|
|
|
+> 当前阶段:方案确认与仓库初始化,尚未开始复制或修改业务代码。
|
|
|
|
|
+>
|
|
|
|
|
+> 更新时间:2026-07-22
|
|
|
|
|
+
|
|
|
|
|
+## 项目目标
|
|
|
|
|
+
|
|
|
|
|
+在 2026-07-25 前优先接通一个最小、可部署、可复用的国内电商 VOC 闭环:
|
|
|
|
|
+
|
|
|
|
|
+1. 导入德玛仕商品经营数据和竞品映射。
|
|
|
|
|
+2. 通过 Fmode `voc-e-commerce` 中转接口获取国内电商商品和评论数据。
|
|
|
|
|
+3. 将商品、评论和竞品关系写入全新的独立数据库。
|
|
|
|
|
+4. 复用现有 VOC 页面,展示商品列表、情绪分布、负面问题和竞品对比。
|
|
|
|
|
+
|
|
|
|
|
+## 隔离原则
|
|
|
|
|
+
|
|
|
|
|
+- 不连接、不写入现有跨境电商线上库。
|
|
|
|
|
+- 新建独立 PostgreSQL 数据库和独立 Parse 应用配置。
|
|
|
|
|
+- 现有 `msq-voc-web`、`moshengqi-server` 仅作为代码和数据模型参考。
|
|
|
|
|
+- JustOneAPI 上游密钥只保留在 Fmode 服务端,本项目只使用 Fmode API Key。
|
|
|
|
|
+- Fmode API Key、Parse master key、数据库连接串不得进入浏览器代码或 Git。
|
|
|
|
|
+
|
|
|
|
|
+## 总体架构
|
|
|
|
|
+
|
|
|
|
|
+```text
|
|
|
|
|
+Saas VOC Web
|
|
|
|
|
+ |-- 读取新 Parse 应用中的商品、评论和分析结果
|
|
|
|
|
+ |-- 调用本项目服务端任务,不直接持有任何私钥
|
|
|
|
|
+ |
|
|
|
|
|
+Saas VOC Server / Worker
|
|
|
|
|
+ |-- 使用 FMODE_API_KEY
|
|
|
|
|
+ |-- 调用 /api/voc-e-commerce/{platform}/{upstream-path}
|
|
|
|
|
+ |-- 清洗并写入新 Parse 数据库
|
|
|
|
|
+ |
|
|
|
|
|
+Fmode voc-e-commerce
|
|
|
|
|
+ |-- 鉴权、计费、缓存、重试
|
|
|
|
|
+ |-- 隐藏 JustOneAPI token
|
|
|
|
|
+ |
|
|
|
|
|
+JustOneAPI
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 最小复用策略
|
|
|
|
|
+
|
|
|
|
|
+现有前端大量代码把 `asin` 当作“商品唯一字符串”,而不是执行 ASIN 格式校验。为了在截止日前降低改动量,首版不做全项目全局重命名。
|
|
|
|
|
+
|
|
|
|
|
+采用兼容层方案:
|
|
|
|
|
+
|
|
|
|
|
+- 新模型的标准字段使用 `platform` 和 `productId`。
|
|
|
|
|
+- 唯一商品键使用 `platform:productId`,不能只使用商品 ID。
|
|
|
|
|
+- 国内平台商品 ID 一律按字符串保存,避免长数字精度丢失。
|
|
|
|
|
+- 复用旧组件时,由适配器临时提供 `asin = productId` 兼容字段。
|
|
|
|
|
+- 新增代码只使用 `productId`,后续再逐步移除 `asin` 兼容字段。
|
|
|
|
|
+
|
|
|
|
|
+这样可以复用商品选择器、VOC 图表、评论情绪统计和部分 Parse 查询封装,同时避免让新数据库继续以 Amazon 为核心语义。
|
|
|
|
|
+
|
|
|
|
|
+## 新数据库
|
|
|
|
|
+
|
|
|
|
|
+计划使用独立 Parse 应用和独立 PostgreSQL 数据库。实际连接信息只通过部署环境配置,不写入本仓库。
|
|
|
|
|
+
|
|
|
|
|
+首版最小数据类:
|
|
|
|
|
+
|
|
|
|
|
+### Product
|
|
|
|
|
+
|
|
|
|
|
+- `platform`: `jd`、`taobao`、`tmall`、`pdd`、`douyin`、`1688` 等
|
|
|
|
|
+- `productId`: 平台商品 ID
|
|
|
|
|
+- `productKey`: `${platform}:${productId}`
|
|
|
|
|
+- `asin`: 临时兼容字段,值与 `productId` 相同
|
|
|
|
|
+- `role`: `own` 或 `competitor`
|
|
|
|
|
+- `brand`、`title`、`model`
|
|
|
|
|
+- `category1`、`category2`、`category3`
|
|
|
|
|
+- `source`: `excel` 或 `justone`
|
|
|
|
|
+- `rawData`: 必要时保留原始响应
|
|
|
|
|
+
|
|
|
|
|
+### ProductMetricDaily
|
|
|
|
|
+
|
|
|
|
|
+- `productKey`、`date`
|
|
|
|
|
+- 成交金额、成交件数、订单数、客户数
|
|
|
|
|
+- 曝光、点击、访客、浏览、加购
|
|
|
|
|
+- 转化率、退款金额、退款件数
|
|
|
|
|
+- 唯一键:`productKey:date`
|
|
|
|
|
+
|
|
|
|
|
+### ProductRelation
|
|
|
|
|
+
|
|
|
|
|
+- `ownProductKey`
|
|
|
|
|
+- `competitorProductKey`
|
|
|
|
|
+- `competitorBrand`
|
|
|
|
|
+- `category`
|
|
|
|
|
+- 唯一键:`ownProductKey:competitorProductKey`
|
|
|
|
|
+
|
|
|
|
|
+### ProductReview
|
|
|
|
|
+
|
|
|
|
|
+- `platform`、`productId`、`productKey`
|
|
|
|
|
+- `reviewId`、`rating`、`title`、`content`
|
|
|
|
|
+- `reviewDate`、`helpful`、`verified`
|
|
|
|
|
+- `role`: `own` 或 `competitor`
|
|
|
|
|
+- `source`: `justone` 或 `file`
|
|
|
|
|
+- 唯一键优先使用 `platform:productId:reviewId`,无 reviewId 时使用内容哈希
|
|
|
|
|
+
|
|
|
|
|
+### ImportBatch
|
|
|
|
|
+
|
|
|
|
|
+- `fileName`、`fileHash`、`type`
|
|
|
|
|
+- `status`、`total`、`success`、`failed`
|
|
|
|
|
+- `errorSummary`、`startedAt`、`finishedAt`
|
|
|
|
|
+
|
|
|
|
|
+## Fmode 电商中转
|
|
|
|
|
+
|
|
|
|
|
+后端参考模块:
|
|
|
|
|
+
|
|
|
|
|
+`E:\workspace\server\future-server\fmode-server\modules\voc-e-commerce`
|
|
|
|
|
+
|
|
|
|
|
+已确认能力:
|
|
|
|
|
+
|
|
|
|
|
+- 路由已挂载到 `/api/voc-e-commerce`。
|
|
|
|
|
+- 支持 `GET /health`、`GET /test` 和任意上游路径透传。
|
|
|
|
|
+- 平台由路径第一段识别,例如 `jd/...`、`taobao/...`、`1688/...`。
|
|
|
|
|
+- 支持 GET、POST、PUT、PATCH 参数转发。
|
|
|
|
|
+- 上游 POST 类接口使用 `application/x-www-form-urlencoded`。
|
|
|
|
|
+- 支持超时、重试、响应缓存和失败结果不计费。
|
|
|
|
|
+- Fmode `sk-` Key 可通过 `Authorization: Bearer ...` 或 `x-api-key` 传入。
|
|
|
|
|
+- 缓存命中和上游成功请求都会按当前规则计费。
|
|
|
|
|
+- 返回外层统一为 `{ code: 200, data: upstreamResponse }`。
|
|
|
|
|
+
|
|
|
|
|
+服务端调用示意:
|
|
|
|
|
+
|
|
|
|
|
+```bash
|
|
|
|
|
+curl "${FMODE_SERVER_URL}/api/voc-e-commerce/jd/search-item-list/v1?keyword=demo&page=1" \
|
|
|
|
|
+ -H "x-api-key: ${FMODE_API_KEY}"
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+注意:`FMODE_API_KEY` 只能存在于服务端或本地开发环境,不能放入 Angular 环境文件或静态资源。
|
|
|
|
|
+
|
|
|
|
|
+## 德玛仕案例数据
|
|
|
|
|
+
|
|
|
|
|
+当前输入文件:
|
|
|
|
|
+
|
|
|
|
|
+`E:\xwechat_files\wxid_ay08t6ugo2h922_df4f\msg\file\2026-07\德玛仕产品及竟品收集0721.xlsx`
|
|
|
|
|
+
|
|
|
|
|
+已完成只读分析:
|
|
|
|
|
+
|
|
|
|
|
+- `德玛仕产品基础数据`:9,717 条日数据,时间范围 2026-07-14 至 2026-07-20。
|
|
|
|
|
+- 2,817 个有经营数据的唯一 SKU。
|
|
|
|
|
+- 2 个一级类目、10 个二级类目、49 个三级类目。
|
|
|
|
|
+- 37 个经营指标字段,包含成交、流量、加购、下单和退款。
|
|
|
|
|
+- `竟对品牌及编码`:28 个自有 SKU 映射、37 个唯一竞品 SKU、10 个类目。
|
|
|
|
|
+- 自有 SKU `100204398739` 在经营数据中没有对应记录,需要作为缺失数据标记。
|
|
|
|
|
+- 两个自有 SKU 尚未填写竞品,不能进入竞品对比。
|
|
|
|
|
+- 文件没有评论正文,不能单独形成真实 VOC 分析结果。
|
|
|
|
|
+
|
|
|
|
|
+## 首版页面
|
|
|
|
|
+
|
|
|
|
|
+只保留最容易接通的页面:
|
|
|
|
|
+
|
|
|
|
|
+1. 登录页:复用现有 Parse 登录模式。
|
|
|
|
|
+2. 商品与竞品:类目筛选、SKU 搜索、经营指标和竞品映射。
|
|
|
|
|
+3. VOC 分析:评分情绪、问题标签、负面评论原声、样本量提示。
|
|
|
|
|
+4. 商品对比:同类自有商品和竞品的评分、评论量、负面问题对比。
|
|
|
|
|
+5. 数据状态:导入批次、采集状态、失败原因和最近更新时间。
|
|
|
|
|
+
|
|
|
|
|
+首版不接入大模型。情绪先按评分计算:4 至 5 星为正向,3 星为中性,1 至 2 星为负向;问题标签使用可配置的商用电器中文词典。
|
|
|
|
|
+
|
|
|
|
|
+## 当前进度
|
|
|
|
|
+
|
|
|
|
|
+- [x] 新 Git 仓库初始化
|
|
|
|
|
+- [x] 现有跨境前端、后端和数据库模型盘点
|
|
|
|
|
+- [x] 德玛仕 Excel 结构和数据量核对
|
|
|
|
|
+- [x] `voc-e-commerce` 路由、鉴权、计费、缓存和重试逻辑核对
|
|
|
|
|
+- [x] 本机 Fmode API Key 存在性和格式核对,未输出密钥
|
|
|
|
|
+- [x] 确定新数据库隔离方案
|
|
|
|
|
+- [x] 确定 `productId` 标准字段和 `asin` 临时兼容方案
|
|
|
|
|
+- [ ] 创建新 PostgreSQL 数据库和 Parse 应用
|
|
|
|
|
+- [ ] 验证 JustOneAPI 京东商品详情与评论接口路径和返回字段
|
|
|
|
|
+- [ ] 建立最小前端和服务端目录
|
|
|
|
|
+- [ ] 实现德玛仕 Excel 幂等导入
|
|
|
|
|
+- [ ] 接通商品、评论、竞品关系和 VOC 页面
|
|
|
|
|
+- [ ] 完成构建、部署和验收
|
|
|
|
|
+
|
|
|
|
|
+## 已知问题
|
|
|
|
|
+
|
|
|
|
|
+### 生产 API 联调受阻
|
|
|
|
|
+
|
|
|
|
|
+2026-07-22 使用本机 Fmode API Key 联调时,`server.fmode.cn:443` TCP 可达,但 TLS 握手被连接端重置。业务搜索请求没有成功发出,也没有消耗 API 额度。
|
|
|
|
|
+
|
|
|
|
|
+在该问题修复前,只能确认模块代码、路由挂载和自动测试覆盖,不能把 JustOneAPI 的实际字段契约标记为已验证。
|
|
|
|
|
+
|
|
|
|
|
+### 上游凭证需要环境化
|
|
|
|
|
+
|
|
|
|
|
+参考模块当前存在上游 token 默认值。正式复用前必须删除源码默认凭证,只允许使用 `VOC_E_COMMERCE_TOKEN` 或 `JUSTONE_TOKEN` 环境变量,并轮换已经进入源码历史的旧 token。
|
|
|
|
|
+
|
|
|
|
|
+### 评论数据尚缺
|
|
|
|
|
+
|
|
|
|
|
+德玛仕 Excel 只有商品经营数据和竞品编码。真实 VOC 演示还需要:
|
|
|
|
|
+
|
|
|
|
|
+- 修复 Fmode 生产接口后从 JustOneAPI 采集评论;或
|
|
|
|
|
+- 提供一份评论 CSV/XLSX,至少包含平台、商品 ID、评分、正文和评论时间。
|
|
|
|
|
+
|
|
|
|
|
+## 截止日前任务顺序
|
|
|
|
|
+
|
|
|
|
|
+1. 创建新数据库和 Parse 应用,验证完全隔离。
|
|
|
|
|
+2. 修复或确认 Fmode 生产域名 TLS 入口。
|
|
|
|
|
+3. 用一个德玛仕京东 SKU 验证搜索、详情、评论三个上游接口。
|
|
|
|
|
+4. 建立领域适配器,在 DTO 层提供 `asin` 兼容字段。
|
|
|
|
|
+5. 导入商品经营数据和竞品关系。
|
|
|
|
|
+6. 接通评论采集或评论文件导入。
|
|
|
|
|
+7. 复制并精简商品列表、VOC 分析和竞品对比页面。
|
|
|
|
|
+8. 完成幂等导入、空数据、错误状态和构建验收。
|
|
|
|
|
+
|
|
|
|
|
+## 暂不包含
|
|
|
|
|
+
|
|
|
|
|
+- Amazon、Sorftime、SP-API 和跨境订单链路
|
|
|
|
|
+- 京东、淘宝、天猫等平台的定时全量采集
|
|
|
|
|
+- 多租户计费和复杂权限后台
|
|
|
|
|
+- AI 自动报告、行动建议、研发闭环
|
|
|
|
|
+- 社媒、退货、订单、库存和广告分析
|
|
|
|
|
+- 实时预警、消息推送和复杂导出
|
|
|
|
|
+
|
|
|
|
|
+## 参考代码
|
|
|
|
|
+
|
|
|
|
|
+- 跨境 VOC 前端:`E:\workspace\msq-voc-web`
|
|
|
|
|
+- 跨境系统后端:`E:\workspace\server\moshengqi-server`
|
|
|
|
|
+- 国内电商数据中转:`E:\workspace\server\future-server\fmode-server\modules\voc-e-commerce`
|
|
|
|
|
+
|