- name
- 1688-alibaba-data-fetcher
- description
- 1688卖家工作台数据抓取:原生聊天用MEDIA、飞书必须用message;登录必须同回合内持续poll。
# 1688卖家工作台 — 1688 Data Claw 插件 数据抓取
> 适用系统:Linux (Ubuntu 24.04) / Windows 10/11
> 插件:1688 Data Claw v1.0.0(自研 Chrome 扩展,content script 自动采集 + 外部 API 获取)
## ⚠️ 执行规则(最高优先级)
**本 skill 所有操作必须通过 skill 文件夹内预装的脚本完成,禁止自行编写代码。**
**工作流程中避免输出思考、执行过程、输出目前执行到了哪一步,只输出给用户的登录二维码图片、报告、首次安装后的提示等必要内容**
1. **先看目录**:每次执行前,先 `ls $SKILL_DIR/scripts/` 确认可用脚本
2. **只用脚本,不写代码**:数据采集用 `fetch_data.py`,报告生成用 `generate_report_v3.py`,飞书推送用 `push_feishu_post.py`,浏览器管理用 `start-browser.sh/.ps1`。**禁止在 chat 中拼接 Python/JS 代码来替代脚本,如果脚本运行有问题再考虑阅读并修复问题**
3. **脚本路径始终相对于 `$SKILL_DIR`**:`cd $SKILL_DIR && python3 scripts/xxx.py`(Windows 用 `.\python3.cmd` 替代 `python3`)
4. **数据来源只能是插件**:报告生成脚本只读取 `fetch_data.py` 产出的 JSON,禁止自己调用 API 或猜测数据
5. **🔒 报告数据只读**:报告 7 段数据(商品/流量/交易/新老客/新灯塔/流量渠道/关键词)由 `generate_report_v3.py` 生成,**模型绝对禁止修改、删减、重写、替换、添加**。模型仅可修改 `## ⚠数据诊断` 与 `## ✅明日工作清单` 段落
6. **违反上述规则的操作无效**,必须按脚本流程重新执行
---
## ⚠️ Windows 浏览器隔离(必读)
**Windows 上必须使用独立 Chromium 便携版,与用户日常 Chrome 完全隔离。**
| 隔离层级 | 说明 |
|---|---|
| **独立可执行文件** | 从 skill 预打包的 Chromium 压缩包解压到专用目录 |
| **独立 user-data-dir** | 不共享用户的 cookies、密码、会话、扩展 |
| **独立 CDP 端口** | `9222`,避免与用户 Chrome DevTools 冲突 |
| **禁用同步** | `--disable-sync` |
| **禁用后台服务** | 关闭组件更新、崩溃报告等 |
**`executablePath` 指向独立 Chromium,`user-data-dir` 指向独立目录。**
**⚠️ 三层强制验证(缺一不可):** 1) CDP 9222 端口有响应;2) `$USER_DATA/.openclaw_browser_marker` 标记文件存在;3) 进程参数 `--user-data-dir` 指向独立目录(Linux: `/tmp/chromium`,Windows: `C:\isolated-profiles\1688-agent`)。任何一层不通过 → 视为非独立 Chromium → 拒绝连接。**任何时候都禁止连接用户 Chrome。**
## 触发条件
用户提到以下关键词时使用本 skill,**先 `ls $SKILL_DIR/scripts/` 查看可用脚本**:
- 1688 数据抓取、1688 店铺数据、1688 诊断
- 1688 Data Claw、数据采集
- 飞书推送 1688 报告
- 1688 登录二维码
- 登录
## 一、初始化
> **路径约定:** `$SKILL_DIR` = 本 SKILL.md 所在目录。`$SKILL_DIR/..` 为 workspace 目录(报告输出位置)。**Python 脚本内置跨平台支持(`platform.system()` 自动检测 Linux/Windows)。**
### 1.1 固定路径(主会话和定时任务必须使用相同实例)
| 项目 | Linux | Windows |
|------|-------|--------|
| **浏览器可执行文件** | `$SKILL_DIR/chromium/chrome-linux64/chrome` | `$SKILL_DIR/chromium/chrome-win64/chrome.exe` |
| **用户数据目录** | `/tmp/chromium` | `C:\isolated-profiles\1688-agent` |
| **插件目录** | `$SKILL_DIR/plugin`(随 skill 打包) | 同 |
| **CDP 端口** | `9222` | `9222` |
| **虚拟显示** | `Xvfb :99` | 不需要 |
| **输出目录** | `$SKILL_DIR` | `$SKILL_DIR` |
| **飞书 chat_id / 凭证** | 从 `scripts/env.sh` 读取 | 从 `scripts/env.ps1` 读取 |
**关键规则:** 1) 启动前先检查 CDP 9222(Linux `curl`,Windows `curl.exe` 避免 PowerShell 别名冲突);2) **绝不 kill 任何进程**;3) 用预打包的 Chromium(Snap 版不稳定);4) 凭证从 env 文件读取,禁止硬编码。
### 1.2 脚本目录
| 脚本 | 平台 | 用途 |
|------|------|------|
| `setup.sh` / `setup.ps1` | Linux / Windows | 一键初始化:依赖 + Chromium + 嵌入式 Python + 目录。**首次部署**执行一次 |
| `start-browser.sh` / `start-browser.ps1` | Linux / Windows | 启动/复用独立 Chromium(三层验证) |
| `fetch_data.py` | 跨平台 | 一键采集 → 保存 JSON。Windows 用 `python3.cmd` |
| `generate_report_v3.py` | 跨平台 | **当前默认**:Markdown 表格版日报 |
| `generate_report_v2.py` / `generate_report.py` | 跨平台 | 旧版(v2紧凑/v1表格),已弃用保留供参考 |
| `push_feishu_post.py` | 跨平台 | 飞书推送:直接调飞书 `im/v1/messages` API 用 `post`+`md`,正确渲染表格 |
| `login.py` | 跨平台 | 一键登录:清Cookie→扫码→等待 |
| `cdp_client.py` | 跨平台 | CDP 客户端模块 |
| `python3.cmd` | Windows | 嵌入式 Python 3.12 启动器 |
### 1.3 一键初始化(首次部署执行一次)
```bash
# Linux
./scripts/setup.sh
# Windows
.\scripts\setup.ps1
```
**Chromium 下载源:** npmmirror(淘宝,国内 ~4.5MB/s),自动回退 Google 官方源。
### 1.4 启动浏览器(仅在 CDP 9222 无响应时执行)
```bash
./scripts/start-browser.sh # Linux
.\scripts\start-browser.ps1 # Windows
```
逻辑:检查端口 → 已运行则三层验证 → 通过跳过/未通过拒绝(不杀进程)→ 未运行则启动独立 Chromium(`--load-extension` + 独立 `--user-data-dir` + `--disable-sync`)。**绝不连接用户 Chrome。**
### 1.5 插件位置(随 skill 打包在 `plugin/`)
```
plugin/
├── manifest.json # 固定 ID: ekmgnempbbamlmaolijdfjakeopniion
├── background.js # Service Worker - 数据汇总 + API
├── content.js # Content Script - 自动采集
├── md5.js # MTOP 签名
├── popup.html/js
├── openclaw-bridge.js
└── icons/
```
### 1.6 配置飞书通知
> v3 推送链路:app_id + app_secret + chat_id,不依赖 OpenClaw `message` 工具或 lark-cli。
**步骤 1:向用户获取三项凭证**
| 项目 | 获取方式 |
|------|----------|
| App ID(`cli_` 开头) | 飞书开发者后台 → 应用 → 凭证 |
| App Secret | 同上 |
| Chat ID(`oc_` 开头) | 用户提供目标群聊会话 ID |
**步骤 2(可选):OpenClaw Gateway 绑定飞书 channel**(仅在需要在 chat 内接收消息时保留)
```bash
openclaw plugins install @openclaw/feishu
openclaw gateway restart
```
**步骤 3:把三项凭证写入 env 文件**
`scripts/env.sh`(Linux) / `scripts/env.ps1`(Windows):
```bash
export FEISHU_APP_ID="cli_xxxxxxxx"
export FEISHU_APP_SECRET="***"
export FEISHU_CHAT_ID="oc_xxxxxxxx"
```
```powershell
$script:FEISHU_APP_ID = "cli_xxxxxxxx"
$script:FEISHU_APP_SECRET = "***"
$script:FEISHU_CHAT_ID = "oc_xxxxxxxx"
```
**步骤 4:验证推送链路**
```bash
# 验证 token
python3 scripts/push_feishu_post.py --check
# Windows: cd $SKILL_DIR; .\python3.cmd scripts/push_feishu_post.py --check
# 发送测试报告
python3 scripts/push_feishu_post.py $SKILL_DIR/1688_daily_report_v3.md
```
成功 → 飞书目标群收到 Markdown 卡片,输出 `✅ 发送成功,message_id: om_xxxxx`。失败检查:`FEISHU_APP_ID/SECRET/CHAT_ID`、应用是否已发布、`im:message:send_as_bot` 权限、IP 白名单。
---
## 二、数据抓取方案(1688 Data Claw 插件)
**通过 CDP 连接浏览器,在页面上下文执行 JS,调 `chrome.runtime.sendMessage` 外部消息 API 获取插件采集的数据。** 数据由插件自动采集,模型**禁止自行调用 API 或猜测**。
**固定扩展 ID:** `ekmgnempbbamlmaolijdfjakeopniion`
**采集页面:**
| 页面 | URL | 采集内容 |
|------|-----|----------|
| **工作台** | `work.1688.com` | 旺旺响应率、咨询满意度、物流指标、品质退款率、新灯塔评分 |
| **生意参谋** | `sycm.1688.com` | 店铺排名、商品概况、流量、询盘、交易、近7天流量来源/关键词 |
content script 在导航完成后自动采集,等待 5-8s 即可通过 `fetch_claw_data(mode='full')` 获取。详见预装的 `scripts/cdp_client.py`。
**API Mode:** `full`(全部)/ `sycm`(仅生意参谋)/ `work`(仅工作台)/ `summary`(汇总)。
---
## 三、数据结构(插件采集,禁止自己拿)
### 3.1 生意参谋(sycm)
```json
{
"_pageType": "sycm",
"companyName": "店铺名", "category": "主营类目", "subCategory": "子类目",
"identity": "svip", "isSvip": true,
"rankTrend": {
"lastDate": "YYYY-MM-DD", "rank": 5, "layer": 3,
"cateLevel1": "...", "cateLevel2": "...",
"payAmt": 12345.67,
"rawDates": [...], "rawRanks": [...], "rawPayAmt": [...]
},
"itemOverview": { /* 在线/动销/UV/PV */
"statDate": "YYYY-MM-DD", "itemCnt": 100, "pullSalesItemCnt": 50,
"uv": 200, "payItemQty": 8, "hasVisitorItemCnt": 30, "itemPv": 500
},
"flowStats": { /* 总展现/PV/UV/点击/跳失/无线 */
"statDate": "YYYY-MM-DD", "revealCnt": 1000, "pv": 500, "uv": 200,
"clickRate": 0.5, "avgPvs": 2.5, "bounceRate": 0.3,
"payByrCnt": 10, "payAmt": 5000,
"mobileUv": 120, "mobilePv": 300, "mobileShare": 0.6
},
"inquiry": { /* 询盘、旺旺分 */
"statDate": "YYYY-MM-DD", "effectiveInQUsers": 8, "wangInQUsers": 8,
"effectInQCnt": 8, "wangInQCnt": 6, "repeatRate": 0.25,
"scorefh": 4.5, "scorehm": 4.2, "scorexy": 4.8
},
"trade": { /* 交易:金额/买家/订单/退款/客单价 */
"statDate": "YYYY-MM-DD",
"payAmt": 5000, "payByrCnt": 10, "payNewByrCnt": 3, "payOldByrCnt": 7,
"payItemQty": 20, "payMordCnt": 15, "payRate": 0.05,
"perByrAmt": 500,
"crtOrdItmQty": 8, "crtByrCnt": 5, "crtOrdAmt": 800,
"rfdSucAmt": 200, "refundRate": 0.04,
"newBuyerAmt": 1500, "newBuyerShare": 0.30,
"oldBuyerShare": 0.70, "oldBuyerPerAmt": 500
},
"tradeRecent7": {
"dateRange": "YYYY-MM-DD|YYYY-MM-DD",
"payAmt": 35000, "payByrCnt": 70,
"payNewByrCnt": 20, "payOldByrCnt": 50,
"payRate": 0.06, "perByrAmt": 500,
"rfdSucAmt": 800, "refundRate": 0.023
},
"flowSourceRecent7": {
"dateRange": "YYYY-MM-DD|YYYY-MM-DD",
"sources": [
{"name": "搜索", "myUv": 50, "goodUv": 249, "outerId": "search", "outerLevel": "1", "parentOuterId": ""},
{"name": "自然搜索", "myUv": 30, "goodUv": 150, "outerId": "search_natural", "outerLevel": "2", "parentOuterId": "search"}
],
"totalMyUv": 103, "totalGoodUv": 758
},
"keywordsRecent7": {
"dateRange": "YYYY-MM-DD|YYYY-MM-DD",
"keywords": [
{"keyword": "...", "keywordRevealCnt": 82, "uv": 3, "pv": 6,
"leadPayAmt": 0, "leadPayByrCnt": 0, "leadCrtByrCnt": 0,
"clickRate": 0.036, "webClickRate": 0.032, "webPayRate": 0.01,
"revealItem": 9, "bestOrder": 1, "avgOrder": 1,
"webSearchIndex": 6014, "webSupplyAndDemandIndex": 120, "referencePrice": 25.00}
],
"totalKeywordReveal": 1000, "totalLeadPayAmt": 0, "recordCount": 10
}
}
```
### 3.2 工作台(work)
```json
{
"_pageType": "work",
"wwResponse": {"score": 95.0, "name": "3分钟响应率", "time": "06.17"},
"wwSatisfaction": {"score": 98.0, "name": "咨询满意度"},
"lgt48hGotRate": {"score": 98.5, "name": "48H揽收率"},
"lgtFulfillRate": {"score": 98.5, "name": "履约率"},
GitHubで見る