毛毡包源头工厂筛选工具 v2.1 — 直接使用用户关键词(禁止变形),8维度严格筛选 + 自动询盘 + Chart.js HTML可视化 + Excel数据表 + Dinzee双文件公网分享。 一条命令完成:关键词搜索 → 地址验证 → 筛选分类 → 询盘确认 → HTML+Excel双格式报告 → Dinzee...
---
name: 1688-felt-bag-factory-finder
version: "2.1.0"
description: |
毛毡包源头工厂筛选工具 v2.1 — 直接使用用户关键词(禁止变形),8维度严格筛选 + 自动询盘 + Chart.js HTML可视化 + Excel数据表 + Dinzee双文件公网分享。
一条命令完成:关键词搜索 → 地址验证 → 筛选分类 → 询盘确认 → HTML+Excel双格式报告 → Dinzee上传 → 输出裸链接。
metadata:
openclaw:
emoji: "👜"
requires:
bins: ["python3"]
primaryEnv: "ALPHASHOP_ACCESS_KEY"
tags: [1688, 毛毡包, 工厂筛选, 源头工厂, 邢台, 东莞, OEM, ODM, 询盘]
trigger:
- 毛毡包工厂
- 毛毡包源头工厂
- 毛毡包生产厂家
- 邢台毛毡包
- 东莞毛毡包
- 毛毡包OEM
- 毛毡包定制
- 毛毡包工贸一体
---
# 毛毡包源头工厂筛选工具 v2.1
## 🎯 功能概述
专门针对**毛毡包品类**,在邢台+东莞产业带筛选源头工厂。整合 AlphaShop 搜索、地区验证、8维度筛选、自动询盘、HTML报告和 Dinzee 公网分享。
### 🔍 8维度筛选条件
| 条件 | 要求 | 硬性/弹性 |
|------|------|----------|
| **锁定地区** | 邢台市、东莞市(含南宫) | 硬性 |
| **工厂类型** | 生产厂家/工贸一体/超级工厂/源头工厂 | 硬性 |
| **响应率** | ≥60%(默认,可配置 `--min-response-rate`) | 硬性 |
| **回头率** | ≥20% | 硬性 |
| **起订量** | 支持50-500件 | 弹性(询盘确认) |
| **验厂标签** | 深度验厂/安心购/老板带看视频 | 弹性(询盘确认) |
| **特殊工艺** | 阻燃、环保胶水 | 弹性(询盘确认) |
| **合作方式** | 支持OEM/ODM | 弹性(询盘确认) |
## 🚀 命令行调用
```bash
# 基础用法(搜索 + 筛选 + 询盘 + 报告 + 上传)
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包
# 多关键词搜索(获取5+家工厂必需)
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 毛毡包工厂 邢台毛毡包 东莞毛毡包 毛毡包定制 毛毡包生产厂家
# 调整响应率阈值(默认60%)
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --min-response-rate 70
# 跳过询盘
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --no-inquiry
# 控制最大询盘数
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --max-inquiry 3
# 保存JSON结果
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --output result.json
```
### 参数说明
| 参数 | 必填 | 说明 | 默认值 |
|------|------|------|--------|
| `--keywords` | ✅ | 搜索关键词列表(直接使用,不做变形) | 无 |
| `--min-response-rate` | ❌ | 响应率最低阈值(百分比整数) | 60 |
| `--no-inquiry` | ❌ | 跳过自动询盘 | false |
| `--max-inquiry` | ❌ | 最大询盘数量 | 5 |
| `--output` | ❌ | 输出JSON文件路径 | 无 |
## 📋 工作流程(7步,全自动)
```
Step 1 关键词搜索(AlphaShop search-1688-supplier,精确匹配)
↓
Step 2 地址验证(curl 工厂卡片页,从 HTML 提取地区)
↓
Step 3 8维度筛选(地区+工厂类型+响应率+回头率 → 通过/待确认)
↓
Step 4 自动询盘(从工厂卡片页提取商品链接 → inquiry-1688 submit 提交)
↓
Step 5 生成 Chart.js 交互式 HTML 报告(响应率vs回头率柱状图 + 订单排名图)
↓
Step 6 生成 Excel 报告(openpyxl 4 Sheet:工厂对比总表 + 筛选条件 + 询盘详情 + 推荐排名)
↓
Step 7 双文件上传 Dinzee → 输出 HTML 裸链接 + Excel 裸链接
```
## ⚠️ 核心铁律
### 1. 禁止关键词变形
**直接使用用户给定的关键词,不做任何变形或扩展。**
❌ 禁止:自动添加"工厂""OEM""深度验厂"等后缀、拆分地区组合
✅ 正确:用户给"毛毡包"→搜"毛毡包";用户给多个→逐个搜索
### 2. AlphaShop 单结果限制
AlphaShop API 每次搜索只返回 1 个最佳匹配。**同一关键词重复调用返回同一家工厂。**
- 要获取 5+ 家工厂 → 用户必须提供多个不同关键词
- 结果不够时 → 诚实告知 API 限制,建议用户提供更多关键词
### 3. location 字段经常为空
AlphaShop 返回的 `supplier.location` 经常为空。地区推断策略:
1. 从公司名称提取("南宫市XX"→邢台,"东莞市XX"→东莞)
2. curl 工厂卡片页 HTML 搜索地区关键词
### 4. 询盘需要商品链接
`inquiry-1688` 需要商品详情页链接(`detail.1688.com/offer/xxx.html`),不支持工厂卡片链接。
从工厂卡片页 curl HTML,正则 `detail\.1688\.com/offer/(\d+)\.html` 提取。
## 📈 报告特性
- **分区展示**:通过全部筛选 vs 部分条件待确认
- **工厂卡片**:响应率/回头率(颜色标识达标/未达标)、服务分、30天订单、180天买家
- **筛选评估**:每个工厂的 8 维度达标/未达标明细
- **询盘状态**:已提交询盘的工厂、商品链接、TaskId
- **配色**:深蓝 #0f3460 + 红 #e94560
- **响应式**:手机/电脑均可查看
- **Chart.js 图表**:响应率vs回头率对比 + 30天订单排名
### 报告输出(v2.1 全自动双格式)
一条命令自动完成,无需手动生成:
- **HTML**:Chart.js 交互式图表(响应率vs回头率柱状图、订单排名横向图)+ 工厂卡片 + 询盘状态表 + 推荐Top3
- **Excel**:openpyxl 4 Sheet(工厂对比总表 15列 + 筛选条件 8维度 + 询盘详情 + 推荐排名 Top5)
- **Dinzee**:双文件分别上传,输出两个公网裸链接
**配色规范**:深蓝 `#0f3460` + 红 `#e94560`,绿色 `#27ae60`(达标),橙色 `#f39c12`(待确认)
命名规范:`felt-bag-comprehensive-report-{YYYYMMDD}.html` + `felt-bag-factory-analysis-{YYYYMMDD}.xlsx`
## 🔧 依赖环境
| 组件 | 路径 | 用途 |
|------|------|------|
| search-1688-supplier | `~/.agents/skills/search-1688-supplier` | AlphaShop 搜索(需 AK/SK) |
| inquiry-1688 | `~/.agents/skills/inquiry-1688` | 询盘提交(需 AK/SK) |
| Dinzee 上传 | 内置 | 报告公网分享 |
### 凭证配置
在 `~/.openclaw/openclaw.json` 中配置:
```json
{
"skills": {
"entries": {
"search-1688-supplier": {
"env": {
"ALPHASHOP_ACCESS_KEY": "YOUR_AK",
"ALPHASHOP_SECRET_KEY": "YOUR_SK"
}
}
}
}
}
```
## 💡 使用示例
### 示例1:基础筛选 + 询盘
```bash
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 "邢台 毛毡包" "东莞 毛毡包"
```
### 示例2:只筛选不询盘
```bash
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --no-inquiry
```
### 示例3:限制询盘数量
```bash
python3 scripts/felt_bag_factory_finder.py --keywords 毛毡包 --max-inquiry 3 --output result.json
```
## 📚 更新日志
### v2.1.0 (2026-05-21) — 全功能合体版
- **🔥 重大升级:一条命令出双份报告 + 双文件上传Dinzee**
- **新增 Chart.js 交互式 HTML**:响应率vs回头率柱状图 + 30天订单横向排名图,内置到脚本
- **新增 openpyxl Excel 自动生成**:4个Sheet(工厂对比总表 + 筛选条件 + 询盘详情 + 推荐排名),深蓝表头+浅绿/浅黄行色
- **新增双文件 Dinzee 上传**:HTML + Excel 分别上传,输出两个公网裸链接
- **修复询盘 CLI 语法**:确认 `inquiry.py submit {url} {question}` 为正确语法
- **修复 TaskId 截取**:用正则 `kj-[0-9a-f-]+` 从 stdout 提取,防止截断丢失
- **询盘失败工厂自动标记**:无商品链接→标记"待询盘",提交失败→标记"提交失败"
- **Excel Sheet 结构**:工厂对比总表(15列) / 筛选条件(8维度) / 询盘详情(5列) / 推荐排名(Top5+理由)
- **HTML 新增**:推荐排名 Top 3 卡片 + 筛选条件说明框 + 统计卡片(5个)
### v2.0.0 (2026-05-19)
- **重大重构**:脚本完全重写,更简洁可靠
- **新增自动询盘**:从工厂卡片页提取商品链接 → 个性化询盘问题 → inquiry-1688 提交
- **新增地区验证**:curl 工厂卡片页 HTML 提取地区信息
- **新增分区报告**:通过筛选 vs 待确认分区展示,带颜色标识
- **新增询盘状态表格**:报告中展示已提交询盘的工厂/商品链接/TaskId
- **修复凭证传递**:统一用环境变量传递 AlphaShop AK/SK
- **修复询盘链接**:自动从工厂卡片页提取商品详情链接(非工厂卡片链接)
- **删除 1688-source-suppliers 依赖**:不再需要单独的供应商详情查询
### v1.1.0 (2026-05-19)
- 删除关键词变形,严格使用用户给定关键词
### v1.0.0 (2026-05-19)
- 初始版本
## ⚠️ 已知陷阱
详见 `references/alphashop-single-result-limit.md` — AlphaShop 每次只返回1个结果,同一关键词重复调用返回同一家工厂。
详见 `references/inquiry-url-extraction-failures.md` — 询盘URL提取失败的排查记录和备用方案。
1. **AlphaShop 积分耗尽**:返回 `FAIL_ACCOUNT_POINT_NOT_ENOUGH` 时停止,告知用户充值
2. **询盘需要商品链接**:工厂卡片链接不支持,需从卡片页提取 offer URL。提取失败的工厂标记"待询盘"
3. **curl 优于浏览器**:1688 需登录,工厂卡片页用 curl 抓取更稳定
4. **inquiry.py 必须传环境变量**:不会从 config 自动读取凭证
5. **inquiry.py CLI 语法**:必须用 `submit` 子命令:
```bash
# ✅ 正确
python3 scripts/inquiry.py submit https://detail.1688.com/offer/xxx.html "询盘问题"
# ❌ 错误
python3 scripts/inquiry.py --url https://detail.1688.com/offer/xxx.html
```
6. **TaskId 提取**:用正则 `kj-[0-9a-f-]+` 从 stdout 提取,不要依赖 JSON 解析(stdout 可能被截断)
7. **工厂卡无商品链接**:实测约 2/5 工厂卡返回空(页面结构/登录态/地区限制)。脚本自动标记"待询盘"
8. **openpyxl 依赖**:Excel 生成需要 `pip install openpyxl`,未安装时自动跳过 Excel 只生成 HTML
9. **响应率阈值**:建议使用 `--min-response-rate` CLI参数而非手动改代码
don't have the plugin yet? install it then click "run inline in claude" again.