Files
crm-ai/libredesk/legacy/README.standalone.md
T

159 lines
6.8 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.
# libredesk(crm-new/libredesk)
位于 `/home/dev/code/crm-new/libredesk` 的 **LibreDesk 版 CRM 客服栈**,与旧项目 `/home/dev/code/crm/crm-ai-demo` 完全隔离(独立目录、独立 git、独立 Postgres/Redis、独立端口)。
- **定位**:验证「LibreDesk 作为客服平台 + 内置 AI Assistant + 外部业务工具」能否替代现有 Chatwoot + bridge 架构。
- **当前阶段**:POC 骨架(可启动、工具服务可跑、含单元测试),尚未接入真实 widget 和生产数据。
- **旧系统不受影响**:`crm-ai-demo` 仍在 3000/3001/4000 端口运行。
## 当前状态(2026-10-21)
| 项 | 状态 |
|---|---|
| 目录/配置/脚本脚手架 | ✅ 完成 |
| crm-tools 服务(4 工具 + 鉴权 + 验证门控) | ✅ 单测 18/18 通过,本机 :4010 可运行 |
| config.toml 渲染 / compose 校验 | ✅ 通过 |
| LibreDesk 容器 | ✅ 运行中(**v2.9.0-rc.10**,health 200);Postgres 18 / Redis 健康 |
| 后台 AI/工具/助手配置 | ⏳ 登录 `http://localhost:9000` 后按 `docs/libredesk-setup.md` 执行 |
> 当前运行 **v2.9.0-rc.10**:渠道已包含 `email / livechat / whatsapp`,WhatsApp 表已迁移完成。
> RC 属于预发布版本,功能可用但生产使用前需评估稳定性(回滚方法见「镜像拉取」)。
## 架构
```
访客 ──► LibreDesk Live Chat Widget (:9000)
│
▼
LibreDesk AI Assistant ──HTTP tool calls──► crm-tools (:4010)
(snippets 向量检索 / 内置 OTP 验证) │
├──► 商品推荐 RPC (recommend)
├──► 订单 RPC (trading-service)
├──► 库存/ETA RPC (eta-service)
└──► Twenty CRM GraphQL (商机/备注/任务)
```
关键设计:**业务数据与身份验证不放进 LibreDesk 代码里**,而是通过它的自定义 HTTP 工具回调 `crm-tools`;工具服务二次校验 `X-Libredesk-Contact-Verified`,不信任模型参数里的邮箱。
详见 [docs/architecture.md](docs/architecture.md)。
## 目录
```
crm-new/libredesk/
├── docker-compose.yml # LibreDesk + 独立 Postgres(5433) + Redis(6380)
├── .env.example # 环境变量模板(bootstrap 自动生成 .env)
├── config/
│ └── config.toml.example # LibreDesk 配置模板(渲染成 config.toml,不入库)
├── scripts/
│ ├── bootstrap.sh # 生成密钥 + 渲染配置 + 启动 LibreDesk
│ ├── start-tools.sh # 宿主机启动 tools 服务
│ ├── render-config.js # config.toml 渲染
│ ├── register-tools.js # 把工具注册进 LibreDesk(可选)
│ └── smoke.sh # 冒烟测试
├── services/tools/ # 业务工具服务(Node 20+,零外部依赖)
│ ├── src/
│ │ ├── server.js # HTTP 入口 + 鉴权 + 验证门控
│ │ ├── tools.js # 4 个工具:商品/订单/库存/建商机
│ │ ├── twenty.js # Twenty GraphQL 客户端
│ │ ├── rpc.js # JSONRPC-TCP 客户端(Hyperf 协议)
│ │ ├── config.js / auth.js / errors.js
│ └── test/ # node:test 单元测试
├── docs/
│ ├── architecture.md # 架构与数据流
│ ├── libredesk-setup.md # 后台配置步骤(AI/工具/助手/自动化/Widget)
│ ├── api-mapping.md # Chatwoot → LibreDesk 接口/事件/字段对照
│ └── migration-plan.md # 6 层拆分、方案 A/B/C、代码存废清单
├── deploy/nginx.conf.example
└── uploads/ # LibreDesk 上传目录(运行时)
```
## 快速开始
> 网络提示:本机可直连 Docker Hub。镜像直接使用 `libredesk/libredesk`、
> `pgvector/pgvector`、`redis`、`twentycrm/twenty`;如网络受限可在 Docker daemon
> 配 registry mirror。详见文末「镜像拉取」一节。
```bash
cd /home/dev/code/crm-new/libredesk
# 1) 启动 LibreDesk(自动生成 .env / config.toml,首次拉镜像)
bash scripts/bootstrap.sh
# 2) 另开终端,启动工具服务 :4010
bash scripts/start-tools.sh
# 3) 按 docs/libredesk-setup.md 配置 AI Provider / Inbox
# 然后在 Admin → Teammates → System 生成 API key,填入 .env
# 4) 自动注册 4 个 AI 工具(失败也可按文档手工创建)
node scripts/register-tools.js
# 5) 冒烟
bash scripts/smoke.sh
```
| 组件 | 地址 | 说明 |
|---|---|---|
| LibreDesk | http://localhost:9000 | `System` + bootstrap 生成的密码 |
| crm-tools | http://localhost:4010 | `/healthz`、`/tools/manifest`、`/tools/<name>` |
| Postgres | localhost:5433 | 独立实例,库 `libredesk` |
| Redis | localhost:6380 | 独立实例 |
## 工具清单
| 工具 | 需要验证 | 作用 |
|---|---|---|
| `search_products` | 否 | 商品关键词搜索(recommend RPC) |
| `search_orders` | **是** | 订单/物流查询,邮箱强制取自已验证身份头 |
| `search_inventory` | 否 | SKU 实时库存 + ETA |
| `create_opportunity` | **是** | Twenty 建商机 + 聊天摘要备注 + 3 天跟进任务,按邮箱去重 |
## 测试
```bash
cd services/tools && npm test
```
覆盖:地址解析、鉴权 fail-closed、验证门控、邮箱作用域/IDOR 防护、商机去重。
## 本阶段边界(未做)
- 未接入真实网站 widget(JWT 签发仍是下一步)
- 未做 Chatwoot → LibreDesk 数据迁移(当前旧库仅 2 条会话,可忽略)
- 未接入观测/评估/飞轮(需要时按 [docs/migration-plan.md](docs/migration-plan.md) 的 L6 保留 bridge)
- WhatsApp 需 v2.9 预发布版(见 setup 文档最后一节)
## 镜像拉取
本机可直连 Docker Hub,直接拉取:
```bash
docker pull libredesk/libredesk:v2.9.0-rc.10
```
`.env`:
```ini
LIBREDESK_IMAGE=libredesk/libredesk:v2.9.0-rc.10
```
### 回滚到稳定版 v2.8.0
```bash
sed -i 's#^LIBREDESK_IMAGE=.*#LIBREDESK_IMAGE=libredesk/libredesk:latest#' .env
docker compose up -d --force-recreate app # 跨版本回退需用备份库,见下
```
## 与旧系统的关系
| | 旧栈 `crm-ai-demo` | 新栈 `crm-new/libredesk` |
|---|---|---|
| 客服平台 | Chatwoot 4.16(Rails) | LibreDesk(Go 单二进制) |
| AI 编排 | bridge 自研 agent loop | LibreDesk AI Assistant(POC 目标) |
| 业务工具 | bridge 内置 | 独立 `services/tools` |
| 数据 | crm-postgres:5432 | 独立 postgres:5433 |
| 端口 | 3000/3001/4000 | 9000/4010 |
两套可以并行跑,方便同一批问题做 A/B 对比。