巨懂车客户自动同步到大风车。后台守护进程每 10 分钟从巨懂车后台抓取新留资客户, 手机号去重后写入大风车客户列表。当用户说"同步巨懂车客户"、"巨懂车留资同步大风车"、 "启动客户同步"时使用。
Resources
8Install
npx skillscat add damienchen0624-spec/dfc-customer-sync Install via the SkillsCat registry.
巨懂车客户同步大风车 (dfc-customer-sync)
Overview
后台守护进程,每 10 分钟自动把巨懂车后台的新留资客户同步到大风车客户列表。
- 巨懂车:浏览器自动化抓取(Playwright,持久化登录态)
- 大风车读写操作:APP_KEY 认证(Token),不再需要浏览器
- 跨平台支持:macOS / Windows / Linux
跨平台支持
本技能支持以下操作系统:
| 系统 | 应用数据目录 |
|---|---|
| macOS | ~/Library/Application Support/大风车 AI 龙虾 |
| Windows | %APPDATA%/大风车 AI 龙虾 |
| Linux | ~/.local/share/大风车 AI 龙虾 |
配置文件中的 <APP_DATA> 占位符会自动替换为对应系统的路径。
环境变量
APP_KEY(必需)- 大风车认证,读写操作均使用 Token
项目结构
dfc-customer-sync/
├── config/ # 配置文件
│ ├── config.json # 运行时配置(自动生成)
│ └── config.example.json # 配置模板
├── scripts/ # 核心脚本
│ ├── setup_wizard.py # 交互式设置向导(新用户推荐)
│ ├── bootstrap.py # 一键启动(已配置用户)
│ ├── sync_daemon.py # 主守护进程
│ ├── auth.py # 大风车认证模块
│ ├── dfc_client.py # 大风车 CRM 客户端
│ ├── dfc_writer.py # 兼容包装
│ ├── jvdc_scraper.py # 巨懂车抓取器
│ ├── mapping.py # 字段映射
│ ├── state.py # 状态管理
│ ├── platform_utils.py # 跨平台工具
│ ├── install_check.py # 安装检查
│ └── fix_keychain.py # macOS 钥匙串修复
├── tests/ # 单元测试
├── archive/ # 归档的调试/测试脚本
├── .env.example # 环境变量模板
├── requirements.txt # Python 依赖
└── SKILL.md # 本文档首次使用
快速开始(推荐)
# 交互式设置向导(自动完成所有配置)
python scripts/setup_wizard.py向导会引导你完成:
- 自动检测并安装依赖(playwright、chromium)
- 输入 APP_KEY(从大风车开放平台获取)
- 自动生成配置文件
- 打开浏览器登录巨懂车
- 启动同步服务
后续启动
# 一键启动(已经配置过的用户)
python scripts/bootstrap.py
# 或手动启动
python scripts/sync_daemon.py手动安装(高级用户)
# 1. 运行安装检查(检测并安装缺失的依赖)
python scripts/install_check.py
# 2. 复制配置(配置文件中的 <APP_DATA> 会自动替换为系统对应路径)
cp config/config.example.json config/config.json
# 3. 设置环境变量
cp .env.example .env
# 编辑 .env 文件,填入你的 APP_KEY
# 4. 首次登录巨懂车(打开浏览器手动登录)
python scripts/sync_daemon.py --setup
# 5. 运行自检
python scripts/sync_daemon.py --check
# 6. 启动守护进程
python scripts/sync_daemon.py环境变量配置
复制 .env.example 为 .env,然后编辑填入你的 APP_KEY:
cp .env.example .env编辑 .env 文件:
APP_KEY=your_app_key_hereAPP_KEY 从大风车开放平台获取,用于 API 认证。
各系统依赖要求
| 依赖项 | macOS | Windows | Linux | 说明 |
|---|---|---|---|---|
| Python 3.8+ | ✅ | ✅ | ✅ | 必需 |
| pip | ✅ | ✅ | ✅ | 必需 |
| playwright | ✅ | ✅ | ✅ | 浏览器自动化 |
| Chromium | ✅ | ✅ | ✅ | 通过 playwright 安装 |
| Xcode Command Line Tools | ✅ | ❌ | ❌ | macOS 专用 |
| Visual C++ Redistributable | ❌ | ✅ | ❌ | Windows 专用 |
安装自检流程
运行 python scripts/install_check.py 会自动检测:
- Python 版本 - 需要 >= 3.8
- pip - Python 包管理器
- playwright - 浏览器自动化库
- Chromium - Playwright 浏览器
- 系统特定依赖:
- macOS: Xcode Command Line Tools
- Windows: Visual C++ Redistributable
如果检测到缺失的依赖,会提示用户确认并自动安装。
Windows 用户注意:
- 使用
python而不是python3 - 首次运行前确保已安装 Visual C++ Redistributable(Playwright 依赖)
- Windows 的 cookie 加密使用 DPAPI,无需额外配置,不会弹窗要求输入密码
macOS 用户注意:
- 首次运行可能需要安装 Xcode Command Line Tools
- 如果遇到钥匙串弹窗问题,运行
python scripts/fix_keychain.py
常用命令
python scripts/setup_wizard.py # 交互式设置向导(新用户推荐)
python scripts/bootstrap.py # 一键检查并启动(已配置用户)
python scripts/sync_daemon.py # 启动守护进程
python scripts/sync_daemon.py --setup # 登录巨懂车
python scripts/sync_daemon.py --check # 运行前自检
python scripts/sync_daemon.py --status # 查看同步状态
python scripts/sync_daemon.py --reset # 重置同步起点Windows 用户将 python 替换为 python 或 py。
认证架构(v3.0)
所有大风车操作均使用 APP_KEY Token,不再需要浏览器登录态。
- 读操作(查重):APP_KEY → Token →
queryFindViewRecordPageInfo.json - 写操作(新增):APP_KEY → Token →
pcbotwall/crm/customerObjectAction/saveCustomer.json
只需配置 APP_KEY 环境变量,Token 自动获取,无需手动登录大风车。
核心模块
dfc_client.py - 统一 CRM 客户端
大风车 CRM 的统一读写客户端,参考 dfc-create-customer 技能实现:
DfcClient类:统一处理读(查重)和写(新增/编辑)操作build_fields()函数:将简化数据转换为 CRM 接口需要的完整 fields 数组- 完整枚举字典:与
dfc-create-customer技能完全对齐
mapping.py - 字段映射
完整的枚举字典和映射函数:
map_source():巨懂车来源渠道 → 大风车 source 中文名map_grade():巨懂车级别/状态 → 大风车意向等级(H/A/B/C/N)map_gender():性别映射- 完整枚举字典:
SOURCE,GRADE,GENDER,IMPORTANT等(中文名 → CRM code)
dfc_writer.py - 兼容包装
向后兼容包装,实际逻辑委托给 DfcClient。新代码请直接使用 dfc_client.DfcClient。
platform_utils.py - 跨平台工具
处理 macOS / Windows / Linux 差异的工具模块:
get_os_type():检测操作系统类型get_app_data_dir():获取跨平台的应用数据目录get_playwright_cache_dir():获取 Playwright 浏览器缓存目录find_chrome_binary():自动查找 Chrome/Chromium 可执行文件kill_process_on_port():跨平台清理端口占用get_default_browser_data_dir():获取默认浏览器数据目录
字段映射
见 references/field-mapping.md。核心:
- 手机号 → customer_field_phone(去重键)
- 来源 → customer_field_source(通过 mapping.map_source 映射)
- 级别 → customer_field_grade(H/A/B/C/N)
- 门店 → APP_KEY 对应门店(自动获取)
- 销售 → 留空(或从 config 读取)
与 dfc-create-customer 技能的关系
本技能的 CRM 操作参考了 dfc-create-customer 技能:
- 使用相同的 API 端点(
/pcbotwall/crm/customerObjectAction/saveCustomer.json) - 使用相同的认证方式(APP_KEY → Token)
- 使用相同的字段构建方式(
build_fields函数) - 使用相同的枚举字典(中文名 → CRM code)
故障排除
自动错误处理
代码内置了智能错误处理机制(scripts/error_handler.py):
- 自动捕获错误:当发生错误时,代码会自动识别错误类型
- 查阅 reference:根据错误类型,自动读取
references/troubleshooting.md中对应的章节 - 输出参考信息:将相关内容输出给 agent 作为参考
- 灵活处理:agent 可以根据用户的具体情况灵活处理,不受 reference 限制
支持的错误类型
| 错误类型 | 触发关键词 | 参考章节 |
|---|---|---|
| 登录态过期 | login, cookie, 认证 | 问题 1, 11 |
| 浏览器启动失败 | launch, Chrome, Chromium | 问题 7, 8 |
| 端口占用 | port, 9222, CDP | 问题 9 |
| 自动化检测 | webdriver, automation | 问题 3 |
| 数据未加载 | timeout, 暂无内容 | 问题 5 |
| 手机号脱敏 | ****, EyeInvisible | 问题 4 |
| API 认证 | 401, Token, APP_KEY | 问题 10 |
| 路径问题 | No such file, 找不到路径 | 问题 6 |
| 重复数据 | 重复, duplicate | 问题 12 |
| 钥匙串弹窗 | keychain, 密码 | 问题 2 |
手动查阅
如需手动查阅故障排除指南:references/troubleshooting.md
项目文件
核心文档
SKILL.md- 本文档,技能说明references/troubleshooting.md- 故障排除指南(遇到问题必读)references/field-mapping.md- 字段映射明细
脚本说明
scripts/setup_wizard.py- 交互式设置向导(新用户推荐)scripts/bootstrap.py- 一键启动(已配置用户)scripts/sync_daemon.py- 主守护进程scripts/platform_utils.py- 跨平台工具
Must Not Do
- 不同步存量客户(仅新留资)
- 不回写大风车改动到巨懂车
- 巨懂车登录态过期时不静默失败,提示重新 --setup
- APP_KEY 无效时不静默失败,提示检查环境变量
升级说明
v3.3.0(当前)
主要变更:
- 智能错误处理:新增
error_handler.py,自动捕获错误并查阅 reference 给 agent 参考 - 灵活处理机制:reference 仅作为参考,agent 可根据实际情况灵活处理
- 支持 10+ 种错误类型:登录态、浏览器启动、端口占用、API 认证等
v3.2.1
主要变更:
- 添加故障排除指南:新增
references/troubleshooting.md,记录 12 个常见问题及解决方案 - SKILL.md 更新:添加故障排除章节,指引 agent 在用户遇到问题时查阅 reference
- 一键安装脚本:自动安装技能到 OpenClaw skills 目录
v3.2.0
主要变更:
- 交互式设置向导:新增
setup_wizard.py,用户只需运行一个命令即可完成所有配置 - 修复 Profile 加载问题:移除
--no-sandbox参数,确保 Chromium 正确加载保存的 profile - 统一启动参数:setup 和 daemon 使用相同的浏览器启动参数
- 添加调试日志:显示实际使用的 profile 目录路径
v3.1.1
主要变更:
- 修复硬编码路径:
jvdc_scraper.py调试路径改为跨平台 - 修复 os 导入:
JudongcheScraper类方法中正确导入os - 配置文件优化:
config.json使用<APP_DATA>占位符 - 添加 .env.example:提供环境变量配置模板
- 清理废弃文件:将调试/测试脚本移到
archive/目录 - 添加项目结构说明:文档中说明目录结构
v3.1
主要变更:
- 跨平台支持:新增
platform_utils.py模块,支持 macOS / Windows / Linux - 配置文件优化:使用
<APP_DATA>占位符,自动适配不同系统的应用数据目录 - Chrome 查找优化:自动查找 Playwright 安装的 Chrome,支持多架构(arm64/x64)
- 进程管理跨平台:端口占用清理支持 Windows(netstat + taskkill)
- 安装自检:新增
install_check.py自动检测并安装依赖
v3.0
主要变更:
- 统一 CRM 客户端:
dfc_client.DfcClient同时处理读写操作 - 完整枚举字典:与
dfc-create-customer技能完全对齐 - 删除过时的
dfc_browser_writer.py(浏览器 Cookie 方式) - 简化
dfc_writer.py为兼容包装
v2.0
主要变更:
- 移除大风车浏览器登录要求(
--dfc-setup命令已删除) - 写操作改用 APP_KEY Token 认证
- 简化部署流程,只需配置
APP_KEY环境变量