**文档版本**：V1.0
**编制日期**：2024年1月
**项目周期**：4个月（17周）

---

## 一、开发方案概述

### 1.1 项目背景回顾

| 项目要素 | 内容 |
|---------|------|
| 业务范围 | 道路救援、家政服务、代驾服务 |
| 坐席规模 | 150坐席 |
| 日话务量 | 50,000通 |
| 技术路线 | 自研（基于FreeSWITCH） |
| 部署方式 | 私有化 + 主备高可用 |

### 1.2 开发目标

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           系统能力目标                                   │
├─────────────────────────────────────────────────────────────────────────┤
│  ✓ 150坐席并发          ✓ 120路并发通话        ✓ 99.9%可用性           │
│  ✓ 7×24小时服务         ✓ 故障30秒内切换       ✓ API响应<200ms         │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 二、系统架构设计

### 2.1 整体架构

```
┌─────────────────────────────────────────────────────────────────────────┐
│                              外部系统                                    │
│         CRM系统              业务系统              阿里云语音            │
└──────────┬───────────────────────┬────────────────────┬─────────────────┘
           │                       │                    │
           │         REST API / WebSocket               │
           │                       │                    │
┌──────────▼───────────────────────▼────────────────────▼─────────────────┐
│                           CTI中间件层                                    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐    │
│  │  API网关    │  │  坐席服务   │  │  呼叫服务   │  │  外呼引擎   │    │
│  │  (Gateway)  │  │  (Agent)    │  │  (Call)     │  │  (Dialer)   │    │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘    │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐    │
│  │  ACD服务    │  │  队列服务   │  │  监控服务   │  │  机器人服务  │    │
│  │  (ACD)      │  │  (Queue)    │  │  (Monitor)  │  │  (Robot)    │    │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘    │
│  ┌─────────────┐  ┌─────────────┐                                      │
│  │  ESL连接池  │  │  事件分发器 │                                      │
│  │  (ESL Pool) │  │  (Dispatcher)│                                     │
│  └──────┬──────┘  └──────┬──────┘                                      │
└─────────┼────────────────┼──────────────────────────────────────────────┘
          │                │
          │    ESL协议     │
          │                │
┌─────────▼────────────────▼──────────────────────────────────────────────┐
│                        FreeSWITCH 媒体层                                 │
│  ┌───────────────────────────────────────────────────────────────────┐  │
│  │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐ │  │
│  │  │mod_sofia│  │mod_dptools│ │mod_record│ │mod_lua  │  │mod_event│ │  │
│  │  │ (SIP)   │  │(Dialplan)│  │ (录音)  │  │ (IVR)   │  │ (ESL)   │ │  │
│  │  └─────────┘  └─────────┘  └─────────┘  └─────────┘  └─────────┘ │  │
│  └───────────────────────────────────────────────────────────────────┘  │
│                           FreeSWITCH Core                               │
└─────────────────────────────────┬───────────────────────────────────────┘
                                  │
                           SIP Trunk
                                  │
┌─────────────────────────────────▼───────────────────────────────────────┐
│                          运营商网络                                      │
│                    400号码 / SIP中继线路                                │
└─────────────────────────────────────────────────────────────────────────┘
```

### 2.2 技术选型

| 层级 | 组件 | 技术选型 | 说明 |
|------|------|---------|------|
| **媒体层** | 软交换 | FreeSWITCH 1.10.x | 开源、稳定、功能完善 |
| | SIP协议 | mod_sofia | FreeSWITCH内置 |
| | IVR脚本 | Lua | 灵活、性能好 |
| **中间件层** | 开发语言 | Java 17 + Spring Boot 3 | 团队熟悉、生态成熟 |
| | ESL客户端 | 自研（基于Netty） | 更好的连接管理 |
| | API框架 | Spring WebFlux | 响应式、高性能 |
| | WebSocket | Spring WebSocket | 事件实时推送 |
| **数据层** | 关系数据库 | MySQL 8.0 | 主从复制、读写分离 |
| | 缓存 | Redis 7.0 | Sentinel高可用 |
| | 消息队列 | RabbitMQ | 异步解耦 |
| | 文件存储 | MinIO / NAS | 录音存储 |
| **前端** | 软电话条 | Vue 3 + TypeScript | 组件化、类型安全 |
| | 监控大屏 | Vue 3 + ECharts | 数据可视化 |
| **运维** | 容器化 | Docker + Docker Compose | 简化部署 |
| | 监控 | Prometheus + Grafana | 指标监控 |
| | 日志 | ELK Stack | 日志收集分析 |
| **外部服务** | ASR/TTS | 阿里云智能语音 | 按需调用 |
| | NLU | 指定对话平台 | 意图识别 |

### 2.3 模块划分

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           系统模块划分                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │                    callcenter-platform                          │   │
│  │                       (父工程)                                   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                  │                                      │
│       ┌──────────────────────────┼──────────────────────────┐          │
│       │              │           │           │              │          │
│       ▼              ▼           ▼           ▼              ▼          │
│  ┌─────────┐   ┌─────────┐ ┌─────────┐ ┌─────────┐   ┌─────────┐      │
│  │ common  │   │  esl    │ │  core   │ │   api   │   │  web    │      │
│  │ (公共)  │   │(ESL封装)│ │(核心业务)│ │(REST API)│   │(前端)   │      │
│  └─────────┘   └─────────┘ └─────────┘ └─────────┘   └─────────┘      │
│       │              │           │           │              │          │
│       └──────────────┴───────────┴───────────┴──────────────┘          │
│                                  │                                      │
│                                  ▼                                      │
│                          ┌─────────────┐                               │
│                          │   gateway   │                               │
│                          │  (启动入口)  │                               │
│                          └─────────────┘                               │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

**模块职责：**

| 模块 | 职责 | 主要内容 |
|------|------|---------|
| **common** | 公共组件 | 工具类、常量、异常、通用模型 |
| **esl** | ESL封装 | ESL连接管理、命令封装、事件解析 |
| **core** | 核心业务 | 坐席管理、呼叫控制、ACD、队列、外呼、录音 |
| **api** | REST接口 | 对外API、WebSocket推送 |
| **web** | 前端工程 | 软电话条、监控大屏 |
| **gateway** | 应用入口 | 配置、启动类 |

---

## 三、功能模块设计

### 3.1 模块清单与优先级

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          功能模块优先级                                  │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  P0 - 核心功能（必须完成）                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ ☐ ESL连接管理      ☐ 坐席签入签出     ☐ 呼入呼出控制           │   │
│  │ ☐ ACD话务分配      ☐ 技能组管理       ☐ 排队等待               │   │
│  │ ☐ 全程录音         ☐ 软电话条         ☐ API接口               │   │
│  │ ☐ 事件推送         ☐ CRM集成          ☐ 基础IVR               │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  P1 - 重要功能（应该完成）                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ ☐ 预测式外呼       ☐ 机器人外呼       ☐ 语音识别IVR            │   │
│  │ ☐ 呼入机器人       ☐ 班长监控         ☐ 实时监控大屏           │   │
│  │ ☐ 溢出策略         ☐ 主备高可用                                │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  P2 - 增强功能（尽量完成）                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ ☐ VIP优先          ☐ 黑名单           ☐ 满意度调查             │   │
│  │ ☐ 多轮对话         ☐ 话务预测         ☐ 密语功能               │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 3.2 核心模块设计

#### 3.2.1 ESL模块

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          ESL模块设计                                     │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                      EslConnectionManager                         │ │
│  │                         (连接管理器)                               │ │
│  ├───────────────────────────────────────────────────────────────────┤ │
│  │  - connect()              建立ESL连接                             │ │
│  │  - disconnect()           断开连接                                │ │
│  │  - reconnect()            重连机制                                │ │
│  │  - heartbeat()            心跳检测                                │ │
│  │  - getConnection()        获取连接                                │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                  │                                      │
│                                  ▼                                      │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                      EslCommandExecutor                           │ │
│  │                         (命令执行器)                               │ │
│  ├───────────────────────────────────────────────────────────────────┤ │
│  │  - api(cmd, args)         同步API命令                             │ │
│  │  - bgapi(cmd, args)       异步API命令                             │ │
│  │  - sendMsg(uuid, app)     发送消息                                │ │
│  │  - originate(...)         发起呼叫                                │ │
│  │  - bridge(uuid1, uuid2)   桥接通道                                │ │
│  │  - hangup(uuid)           挂断通话                                │ │
│  │  - transfer(uuid, dest)   转接                                    │ │
│  │  - hold/unhold(uuid)      保持/取回                               │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                  │                                      │
│                                  ▼                                      │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                      EslEventDispatcher                           │ │
│  │                         (事件分发器)                               │ │
│  ├───────────────────────────────────────────────────────────────────┤ │
│  │  - subscribe(events)      订阅事件                                │ │
│  │  - addHandler(handler)    注册处理器                              │ │
│  │  - dispatch(event)        分发事件                                │ │
│  │  - filter(uuid)           过滤事件                                │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  关键事件处理：                                                         │
│  ┌────────────────┬────────────────────────────────────────────────┐  │
│  │ CHANNEL_CREATE │ → 创建呼叫记录，呼入触发ACD排队                │  │
│  │ CHANNEL_ANSWER │ → 更新状态为已接听，开始计时                   │  │
│  │ CHANNEL_BRIDGE │ → 更新状态为桥接，记录桥接信息                 │  │
│  │ CHANNEL_HANGUP │ → 更新坐席状态，生成话单                       │  │
│  │ DTMF           │ → IVR按键处理，满意度调查收集                  │  │
│  └────────────────┴────────────────────────────────────────────────┘  │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

#### 3.2.2 坐席管理模块

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         坐席管理模块设计                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  坐席状态机：                                                           │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │              ┌─────────┐                                         │ │
│  │              │ OFFLINE │ ◄────────────────────────┐              │ │
│  │              └────┬────┘                          │              │ │
│  │                   │ signIn                        │ signOut      │ │
│  │                   ▼                               │              │ │
│  │              ┌─────────┐      ready          ┌────┴────┐         │ │
│  │         ┌───►│NOT_READY│─────────────────────►│  READY  │◄───┐   │ │
│  │         │    └─────────┘                     └────┬────┘    │   │ │
│  │         │         ▲                               │         │   │ │
│  │  wrapUp │         │ notReady                      │ assign  │   │ │
│  │  timeout│         │                               ▼         │   │ │
│  │         │    ┌─────────┐                     ┌─────────┐    │   │ │
│  │         │    │ PAUSED  │                     │ RINGING │    │   │ │
│  │         │    │ (小休)  │                     └────┬────┘    │   │ │
│  │         │    └─────────┘                          │         │   │ │
│  │         │                                         │ answer  │   │ │
│  │         │                                         ▼         │   │ │
│  │         │                                    ┌─────────┐    │   │ │
│  │         │                                    │  BUSY   │    │   │ │
│  │         │                                    │ (通话中) │    │   │ │
│  │         │                                    └────┬────┘    │   │ │
│  │         │                                         │         │   │ │
│  │         │                                         │ hangup  │   │ │
│  │         │                                         ▼         │   │ │
│  │         │                                    ┌─────────┐    │   │ │
│  │         └────────────────────────────────────│ WRAP_UP │────┘   │ │
│  │                                              │ (后处理) │        │ │
│  │                                              └─────────┘        │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  数据模型：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │  Agent {                                                          │ │
│  │      id: String              // 坐席ID                            │ │
│  │      name: String            // 坐席姓名                          │ │
│  │      extension: String       // 分机号                            │ │
│  │      skillGroups: List       // 技能组列表                        │ │
│  │      state: AgentState       // 当前状态                          │ │
│  │      stateTime: DateTime     // 状态开始时间                      │ │
│  │      currentCallUuid: String // 当前通话UUID                      │ │
│  │      signInTime: DateTime    // 签入时间                          │ │
│  │  }                                                                │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  存储设计（Redis）：                                                    │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │  agent:{agentId}             → Hash    坐席详细信息               │ │
│  │  agents:online               → Set     在线坐席ID集合             │ │
│  │  skillgroup:{name}:agents    → Set     技能组坐席集合             │ │
│  │  agent:{agentId}:idle_time   → String  空闲开始时间               │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

#### 3.2.3 ACD模块

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           ACD模块设计                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  分配流程：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │   来电 ──► IVR ──► 确定技能组 ──► 入队 ──► 分配 ──► 振铃 ──► 接听 │ │
│  │                                     │                             │ │
│  │                                     ▼                             │ │
│  │                               ┌──────────┐                        │ │
│  │                               │ 排队等待  │                        │ │
│  │                               │ 播放音乐  │                        │ │
│  │                               └──────────┘                        │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  分配策略（按优先级）：                                                 │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │  1. 历史服务优先                                                  │ │
│  │     └─► 查找该客户上次服务的坐席，若空闲则分配                    │ │
│  │                                                                   │ │
│  │  2. 最长空闲优先                                                  │ │
│  │     └─► 选择空闲时间最长的坐席                                    │ │
│  │                                                                   │ │
│  │  3. 轮询分配                                                      │ │
│  │     └─► 按顺序轮流分配                                            │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  溢出策略：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │  条件：技能组无空闲坐席 + 等待时间 > 阈值（如60秒）               │ │
│  │                                                                   │ │
│  │  溢出配置：                                                       │ │
│  │  ┌─────────────┬─────────────┬───────────┐                       │ │
│  │  │ 源技能组    │ 目标技能组   │ 等待阈值  │                       │ │
│  │  ├─────────────┼─────────────┼───────────┤                       │ │
│  │  │ rescue      │ default     │ 60秒      │                       │ │
│  │  │ housekeeping│ default     │ 90秒      │                       │ │
│  │  │ driver      │ default     │ 60秒      │                       │ │
│  │  └─────────────┴─────────────┴───────────┘                       │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  队列数据结构（Redis Sorted Set）：                                     │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │  queue:{skillGroup}                                               │ │
│  │  ┌──────────────────────────────────────────────────────────────┐│ │
│  │  │  Score = 优先级 × 10^9 + 入队时间戳                          ││ │
│  │  │  Member = QueueItem(callUuid, callerNumber, enqueueTime...)  ││ │
│  │  └──────────────────────────────────────────────────────────────┘│ │
│  │                                                                   │ │
│  │  优先级越小越优先，同优先级按入队时间排序                         │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

#### 3.2.4 呼叫控制模块

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         呼叫控制模块设计                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  呼叫状态机：                                                           │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │    ┌─────────┐     ┌─────────┐     ┌─────────┐     ┌─────────┐  │ │
│  │    │ CREATED │────►│ RINGING │────►│ ANSWERED│────►│ BRIDGED │  │ │
│  │    └─────────┘     └────┬────┘     └────┬────┘     └────┬────┘  │ │
│  │                         │              │               │        │ │
│  │                         │              │               │        │ │
│  │                         │              │               ▼        │ │
│  │                         │              │          ┌─────────┐   │ │
│  │                         │              │          │  HELD   │   │ │
│  │                         │              │          └────┬────┘   │ │
│  │                         │              │               │        │ │
│  │                         ▼              ▼               ▼        │ │
│  │                    ┌────────────────────────────────────────┐   │ │
│  │                    │              HANGUP                    │   │ │
│  │                    └────────────────────────────────────────┘   │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  核心操作：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │  点击外呼：                                                       │ │
│  │  ┌─────────────────────────────────────────────────────────────┐ │ │
│  │  │ 1. 检查坐席状态（必须READY）                                │ │ │
│  │  │ 2. 更新坐席状态为BUSY                                       │ │ │
│  │  │ 3. originate呼叫坐席分机                                    │ │ │
│  │  │ 4. 坐席接听后bridge呼叫客户                                 │ │ │
│  │  │ 5. 开始录音                                                 │ │ │
│  │  └─────────────────────────────────────────────────────────────┘ │ │
│  │                                                                   │ │
│  │  转接：                                                           │ │
│  │  ┌─────────────────────────────────────────────────────────────┐ │ │
│  │  │ 盲转：uuid_transfer直接转接                                 │ │ │
│  │  │ 咨询转：先hold，originate咨询方，确认后bridge               │ │ │
│  │  └─────────────────────────────────────────────────────────────┘ │ │
│  │                                                                   │ │
│  │  三方通话：                                                       │ │
│  │  ┌─────────────────────────────────────────────────────────────┐ │ │
│  │  │ 1. 创建会议室 conference                                    │ │ │
│  │  │ 2. 将原通话双方加入会议                                     │ │ │
│  │  │ 3. originate第三方加入会议                                  │ │ │
│  │  └─────────────────────────────────────────────────────────────┘ │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  数据模型：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │  Call {                                                           │ │
│  │      uuid: String             // 呼叫唯一标识                     │ │
│  │      direction: Enum          // INBOUND/OUTBOUND                 │ │
│  │      callerNumber: String     // 主叫号码                         │ │
│  │      calleeNumber: String     // 被叫号码                         │ │
│  │      state: CallState         // 呼叫状态                         │ │
│  │      agentId: String          // 服务坐席                         │ │
│  │      skillGroup: String       // 技能组                           │ │
│  │      createTime: DateTime     // 创建时间                         │ │
│  │      answerTime: DateTime     // 接听时间                         │ │
│  │      hangupTime: DateTime     // 挂断时间                         │ │
│  │      duration: Long           // 通话时长(秒)                     │ │
│  │      recordingPath: String    // 录音路径                         │ │
│  │      hangupCause: String      // 挂断原因                         │ │
│  │  }                                                                │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

#### 3.2.5 外呼模块

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          外呼模块设计                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  预测式外呼流程：                                                       │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │    业务系统 ──► 创建任务 ──► 导入号码 ──► 启动任务                │ │
│  │                                              │                    │ │
│  │                                              ▼                    │ │
│  │                                     ┌───────────────┐            │ │
│  │                                     │   外呼循环    │            │ │
│  │                                     └───────┬───────┘            │ │
│  │                                             │                    │ │
│  │         ┌───────────────────────────────────┴───────────────┐   │ │
│  │         │                                                   │   │ │
│  │         ▼                                                   │   │ │
│  │  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │   │ │
│  │  │ 计算拨打数  │───►│  批量拨打   │───►│ 接通转坐席  │     │   │ │
│  │  │(预测算法)   │    │             │    │             │     │   │ │
│  │  └─────────────┘    └─────────────┘    └─────────────┘     │   │ │
│  │         ▲                                      │            │   │ │
│  │         │                                      │            │   │ │
│  │         └──────────────────────────────────────┘            │   │ │
│  │                        循环                                  │   │ │
│  │                                                              │   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  预测算法：                                                             │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │  目标：让坐席接听时刚好有客户接通，减少等待                       │ │
│  │                                                                   │ │
│  │  预测拨打数 = 空闲坐席数 / 历史接通率 × 超拨系数                  │ │
│  │                                                                   │ │
│  │  示例：空闲5人，接通率30%，超拨系数1.2                            │ │
│  │  拨打数 = 5 / 0.3 × 1.2 ≈ 20                                      │ │
│  │                                                                   │ │
│  │  动态调整：根据实时接通率动态调整拨打速度                         │ │
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
│  机器人外呼流程：                                                       │
│  ┌───────────────────────────────────────────────────────────────────┐ │
│  │                                                                   │ │
│  │  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐   │ │
│  │  │ 创建任务 │───►│ 生成TTS  │───►│ 批量拨打 │───►│ 播放语音 │   │ │
│  │  │ (含话术) │    │ 音频文件 │    │          │    │          │   │ │
│  │  └──────────┘    └──────────┘    └──────────┘    └────┬─────┘   │ │
│  │                                                       │         │ │
│  │                                           ┌───────────┴───────┐ │ │
│  │                                           │                   │ │ │
│  │                                           ▼                   ▼ │ │
│  │                                    ┌──────────┐       ┌──────────┐│
│  │                                    │ 纯播报   │       │ 收集按键 ││
│  │                                    │ 挂断     │       │ 回传结果 ││
│  │                                    └──────────┘       └──────────┘│
│  │                                                                   │ │
│  └───────────────────────────────────────────────────────────────────┘ │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 3.3 接口设计

#### 3.3.1 API接口清单

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          REST API 设计                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  坐席接口：/api/v1/agent                                                │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ POST   /signin              坐席签入                            │   │
│  │ POST   /signout             坐席签出                            │   │
│  │ POST   /ready               置闲                                │   │
│  │ POST   /not-ready           置忙                                │   │
│  │ POST   /pause               小休                                │   │
│  │ GET    /{agentId}/status    查询坐席状态                        │   │
│  │ GET    /list                查询坐席列表                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  呼叫接口：/api/v1/call                                                 │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ POST   /originate           发起外呼                            │   │
│  │ POST   /{uuid}/answer       接听                                │   │
│  │ POST   /{uuid}/hangup       挂断                                │   │
│  │ POST   /{uuid}/hold         保持                                │   │
│  │ POST   /{uuid}/unhold       取回                                │   │
│  │ POST   /{uuid}/mute         静音                                │   │
│  │ POST   /{uuid}/unmute       取消静音                            │   │
│  │ POST   /{uuid}/transfer     转接                                │   │
│  │ POST   /{uuid}/conference   三方通话                            │   │
│  │ GET    /{uuid}              查询呼叫信息                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  外呼任务接口：/api/v1/task                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ POST   /predictive          创建预测式外呼任务                  │   │
│  │ POST   /robot               创建机器人外呼任务                  │   │
│  │ POST   /{taskId}/start      启动任务                            │   │
│  │ POST   /{taskId}/pause      暂停任务                            │   │
│  │ POST   /{taskId}/resume     恢复任务                            │   │
│  │ POST   /{taskId}/stop       停止任务                            │   │
│  │ GET    /{taskId}/status     查询任务状态                        │   │
│  │ GET    /{taskId}/result     查询任务结果                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  监控接口：/api/v1/monitor                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ POST   /spy                 监听                                │   │
│  │ POST   /barge               强插                                │   │
│  │ POST   /hangup              强拆                                │   │
│  │ GET    /realtime            实时统计数据                        │   │
│  │ GET    /queue/{skillGroup}  队列状态                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  录音接口：/api/v1/recording                                            │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ GET    /list                录音列表查询                        │   │
│  │ GET    /{uuid}/url          获取录音下载地址                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

#### 3.3.2 WebSocket事件推送

```
┌─────────────────────────────────────────────────────────────────────────┐
│                       WebSocket 事件设计                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  连接地址：ws://host:port/ws/events?token={token}                       │
│                                                                         │
│  事件格式：                                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │  {                                                              │   │
│  │    "eventType": "CALL_RINGING",                                 │   │
│  │    "timestamp": 1704067200000,                                  │   │
│  │    "data": {                                                    │   │
│  │      "uuid": "xxx",                                             │   │
│  │      "callerNumber": "13800138000",                             │   │
│  │      "calleeNumber": "4001234567",                              │   │
│  │      ...                                                        │   │
│  │    }                                                            │   │
│  │  }                                                              │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  事件类型：                                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 呼叫事件                                                        │   │
│  │ ├── CALL_RINGING          来电振铃                             │   │
│  │ ├── CALL_ANSWERED         通话接听                             │   │
│  │ ├── CALL_BRIDGED          双方接通                             │   │
│  │ ├── CALL_HANGUP           通话挂断                             │   │
│  │ ├── CALL_TRANSFER         通话转接                             │   │
│  │ └── CALL_HOLD             通话保持                             │   │
│  │                                                                 │   │
│  │ 坐席事件                                                        │   │
│  │ ├── AGENT_STATE_CHANGE    坐席状态变更                         │   │
│  │ ├── AGENT_SIGNIN          坐席签入                             │   │
│  │ └── AGENT_SIGNOUT         坐席签出                             │   │
│  │                                                                 │   │
│  │ 话单事件                                                        │   │
│  │ └── CDR_GENERATED         话单生成                             │   │
│  │                                                                 │   │
│  │ DTMF事件                                                        │   │
│  │ └── DTMF_RECEIVED         收到按键                             │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 3.4 数据库设计

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          数据库设计                                      │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  cc_agent (坐席表)                                                      │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ id              BIGINT          PRIMARY KEY                     │   │
│  │ agent_id        VARCHAR(32)     坐席工号                        │   │
│  │ agent_name      VARCHAR(64)     坐席姓名                        │   │
│  │ extension       VARCHAR(16)     分机号                          │   │
│  │ password        VARCHAR(128)    密码                            │   │
│  │ skill_groups    VARCHAR(256)    技能组(逗号分隔)                │   │
│  │ status          TINYINT         状态(0禁用1启用)                │   │
│  │ create_time     DATETIME        创建时间                        │   │
│  │ update_time     DATETIME        更新时间                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  cc_skill_group (技能组表)                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ id              BIGINT          PRIMARY KEY                     │   │
│  │ group_code      VARCHAR(32)     技能组编码                      │   │
│  │ group_name      VARCHAR(64)     技能组名称                      │   │
│  │ overflow_group  VARCHAR(32)     溢出技能组                      │   │
│  │ overflow_seconds INT            溢出等待秒数                    │   │
│  │ status          TINYINT         状态                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  cc_cdr (话单表)                                                        │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ id              BIGINT          PRIMARY KEY                     │   │
│  │ uuid            VARCHAR(64)     呼叫UUID                        │   │
│  │ direction       VARCHAR(16)     呼叫方向                        │   │
│  │ caller_number   VARCHAR(32)     主叫号码                        │   │
│  │ callee_number   VARCHAR(32)     被叫号码                        │   │
│  │ agent_id        VARCHAR(32)     坐席ID                          │   │
│  │ skill_group     VARCHAR(32)     技能组                          │   │
│  │ queue_time      INT             排队时长(秒)                    │   │
│  │ ring_time       INT             振铃时长(秒)                    │   │
│  │ talk_time       INT             通话时长(秒)                    │   │
│  │ start_time      DATETIME        开始时间                        │   │
│  │ answer_time     DATETIME        接听时间                        │   │
│  │ end_time        DATETIME        结束时间                        │   │
│  │ hangup_cause    VARCHAR(32)     挂断原因                        │   │
│  │ recording_path  VARCHAR(256)    录音路径                        │   │
│  │ business_type   VARCHAR(32)     业务类型                        │   │
│  │ create_time     DATETIME        创建时间                        │   │
│  │ INDEX idx_start_time (start_time)                               │   │
│  │ INDEX idx_agent (agent_id, start_time)                          │   │
│  │ INDEX idx_caller (caller_number, start_time)                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  cc_dial_task (外呼任务表)                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ id              BIGINT          PRIMARY KEY                     │   │
│  │ task_id         VARCHAR(64)     任务ID                          │   │
│  │ task_name       VARCHAR(128)    任务名称                        │   │
│  │ task_type       VARCHAR(16)     类型(PREDICTIVE/ROBOT)          │   │
│  │ skill_group     VARCHAR(32)     技能组                          │   │
│  │ caller_id       VARCHAR(32)     外显号码                        │   │
│  │ total_count     INT             总号码数                        │   │
│  │ dialed_count    INT             已拨打数                        │   │
│  │ connected_count INT             接通数                          │   │
│  │ state           VARCHAR(16)     状态                            │   │
│  │ start_time      DATETIME        开始时间                        │   │
│  │ end_time        DATETIME        结束时间                        │   │
│  │ create_time     DATETIME        创建时间                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  cc_dial_detail (外呼明细表)                                            │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ id              BIGINT          PRIMARY KEY                     │   │
│  │ task_id         VARCHAR(64)     任务ID                          │   │
│  │ phone           VARCHAR(32)     号码                            │   │
│  │ call_uuid       VARCHAR(64)     呼叫UUID                        │   │
│  │ status          VARCHAR(16)     状态                            │   │
│  │ dial_time       DATETIME        拨打时间                        │   │
│  │ answer_time     DATETIME        接听时间                        │   │
│  │ hangup_time     DATETIME        挂断时间                        │   │
│  │ dtmf_result     VARCHAR(16)     按键结果                        │   │
│  │ retry_count     INT             重试次数                        │   │
│  │ INDEX idx_task (task_id)                                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 四、开发计划

### 4.1 阶段划分

```
┌─────────────────────────────────────────────────────────────────────────┐
│                          开发阶段划分（17周）                            │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 第一阶段：基础环境与核心框架（Week 1-4）                        │   │
│  │                                                                 │   │
│  │ Week 1-2: 环境搭建 + 技术预研                                   │   │
│  │ Week 3-4: ESL模块 + 基础框架                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                            ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 第二阶段：核心功能开发（Week 5-10）                             │   │
│  │                                                                 │   │
│  │ Week 5-6: 坐席管理 + 呼叫控制                                   │   │
│  │ Week 7-8: ACD分配 + 排队等待                                    │   │
│  │ Week 9-10: 录音 + 软电话条 + CRM集成                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                            ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 第三阶段：高级功能开发（Week 11-14）                            │   │
│  │                                                                 │   │
│  │ Week 11-12: 预测式外呼 + 机器人外呼                             │   │
│  │ Week 13: IVR + 呼入机器人                                       │   │
│  │ Week 14: 监控大屏 + 班长监控                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                            ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 第四阶段：集成测试与上线（Week 15-17）                          │   │
│  │                                                                 │   │
│  │ Week 15: 集成联调 + 高可用部署                                  │   │
│  │ Week 16: 测试 + Bug修复                                         │   │
│  │ Week 17: 试运行 + 正式上线                                      │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 4.2 详细开发计划

```
┌─────────────────────────────────────────────────────────────────────────┐
│                            详细开发计划                                  │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ═══════════════════════════════════════════════════════════════════   │
│  第一阶段：基础环境与核心框架（Week 1-4）                               │
│  ═══════════════════════════════════════════════════════════════════   │
│                                                                         │
│  Week 1: 环境准备                                                       │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 服务器环境准备（开发、测试环境）                              │   │
│  │ □ FreeSWITCH安装配置                                            │   │
│  │ □ 开发环境搭建（IDE、Git、Maven）                               │   │
│  │ □ MySQL、Redis环境搭建                                          │   │
│  │ □ 测试SIP话机注册与基础通话                                     │   │
│  │                                                                 │   │
│  │ 交付物：环境部署文档、FreeSWITCH基础配置                        │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 2: 技术预研                                                       │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ ESL协议学习与Demo开发                                         │   │
│  │ □ FreeSWITCH Dialplan配置学习                                   │   │
│  │ □ Lua IVR脚本编写测试                                           │   │
│  │ □ 项目工程结构搭建                                              │   │
│  │ □ 技术方案评审                                                  │   │
│  │                                                                 │   │
│  │ 交付物：技术预研报告、Demo代码                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 3-4: ESL模块开发                                                  │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ ESL连接管理（连接池、心跳、重连）                             │   │
│  │ □ ESL命令封装（API、SendMsg）                                   │   │
│  │ □ 事件订阅与分发机制                                            │   │
│  │ □ 常用命令测试验证                                              │   │
│  │ □ 基础API框架搭建                                               │   │
│  │ □ WebSocket服务搭建                                             │   │
│  │                                                                 │   │
│  │ 交付物：ESL模块代码、单元测试                                   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ═══════════════════════════════════════════════════════════════════   │
│  第二阶段：核心功能开发（Week 5-10）                                    │
│  ═══════════════════════════════════════════════════════════════════   │
│                                                                         │
│  Week 5-6: 坐席管理 + 呼叫控制                                          │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 坐席数据模型设计                                              │   │
│  │ □ 坐席签入/签出                                                 │   │
│  │ □ 坐席状态管理（置闲、置忙、小休）                              │   │
│  │ □ 技能组管理                                                    │   │
│  │ □ 点击外呼功能                                                  │   │
│  │ □ 接听/挂断/保持/取回                                           │   │
│  │ □ 转接（盲转、咨询转）                                          │   │
│  │ □ 坐席API接口                                                   │   │
│  │ □ 呼叫API接口                                                   │   │
│  │                                                                 │   │
│  │ 交付物：坐席模块、呼叫控制模块                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 7-8: ACD分配 + 排队等待                                           │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 队列数据结构设计                                              │   │
│  │ □ 呼叫入队逻辑                                                  │   │
│  │ □ 历史服务优先策略                                              │   │
│  │ □ 最长空闲优先策略                                              │   │
│  │ □ 轮询分配策略                                                  │   │
│  │ □ 坐席选择与分配                                                │   │
│  │ □ 排队等待音乐                                                  │   │
│  │ □ 溢出策略实现                                                  │   │
│  │ □ 排队状态查询                                                  │   │
│  │                                                                 │   │
│  │ 交付物：ACD模块、队列管理模块                                   │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 9-10: 录音 + 软电话条 + CRM集成                                   │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 录音启动/停止控制                                             │   │
│  │ □ 录音文件存储管理                                              │   │
│  │ □ 录音查询与下载API                                             │   │
│  │ □ 软电话条前端开发（Vue组件）                                   │   │
│  │ □ WebSocket事件接收与处理                                       │   │
│  │ □ 软电话条UI（状态、按钮、来电显示）                            │   │
│  │ □ CRM弹屏集成（事件推送）                                       │   │
│  │ □ 话单推送至CRM                                                 │   │
│  │ □ 联调测试                                                      │   │
│  │                                                                 │   │
│  │ 交付物：录音模块、软电话条组件、CRM集成文档                     │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ═══════════════════════════════════════════════════════════════════   │
│  第三阶段：高级功能开发（Week 11-14）                                   │
│  ═══════════════════════════════════════════════════════════════════   │
│                                                                         │
│  Week 11-12: 预测式外呼 + 机器人外呼                                    │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 外呼任务管理（创建、启动、暂停、停止）                        │   │
│  │ □ 号码导入与管理                                                │   │
│  │ □ 预测式拨号算法实现                                            │   │
│  │ □ 接通后转坐席逻辑                                              │   │
│  │ □ 外呼统计（接通率、坐席利用率）                                │   │
│  │ □ 阿里云TTS集成                                                 │   │
│  │ □ 机器人外呼流程（播报、按键收集）                              │   │
│  │ □ 外呼结果回传                                                  │   │
│  │ □ 任务API接口                                                   │   │
│  │                                                                 │   │
│  │ 交付物：外呼引擎、机器人外呼模块                                │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 13: IVR + 呼入机器人                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ IVR Dialplan配置（多业务线）                                  │   │
│  │ □ 阿里云ASR集成                                                 │   │
│  │ □ 语音识别导航实现                                              │   │
│  │ □ NLU对接（意图识别）                                           │   │
│  │ □ FAQ问答流程                                                   │   │
│  │ □ 转人工逻辑                                                    │   │
│  │ □ Lua脚本开发                                                   │   │
│  │                                                                 │   │
│  │ 交付物：IVR配置、呼入机器人模块                                 │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 14: 监控大屏 + 班长监控                                           │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 实时数据统计API                                               │   │
│  │ □ 监控大屏前端开发                                              │   │
│  │ □ 坐席状态分布展示                                              │   │
│  │ □ 队列状态展示                                                  │   │
│  │ □ 话务趋势图表                                                  │   │
│  │ □ 监听功能实现                                                  │   │
│  │ □ 强插功能实现                                                  │   │
│  │ □ 强拆功能实现                                                  │   │
│  │                                                                 │   │
│  │ 交付物：监控大屏、班长监控功能                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ═══════════════════════════════════════════════════════════════════   │
│  第四阶段：集成测试与上线（Week 15-17）                                 │
│  ═══════════════════════════════════════════════════════════════════   │
│                                                                         │
│  Week 15: 集成联调 + 高可用部署                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ CRM系统全流程联调                                             │   │
│  │ □ 业务系统对接联调                                              │   │
│  │ □ 运营商线路对接                                                │   │
│  │ □ 主备FreeSWITCH部署                                            │   │
│  │ □ Keepalived配置                                                │   │
│  │ □ 故障切换测试                                                  │   │
│  │ □ 数据库主从配置                                                │   │
│  │ □ Redis Sentinel配置                                            │   │
│  │                                                                 │   │
│  │ 交付物：联调测试报告、高可用部署文档                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 16: 测试 + Bug修复                                                │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 功能测试（全流程）                                            │   │
│  │ □ 性能测试（150坐席并发）                                       │   │
│  │ □ 压力测试（峰值话务）                                          │   │
│  │ □ 故障恢复测试                                                  │   │
│  │ □ Bug修复                                                       │   │
│  │ □ 性能优化                                                      │   │
│  │ □ 上线检查清单确认                                              │   │
│  │                                                                 │   │
│  │ 交付物：测试报告、Bug清单、优化记录                             │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  Week 17: 试运行 + 正式上线                                             │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ □ 生产环境部署                                                  │   │
│  │ □ 数据初始化                                                    │   │
│  │ □ 小范围试运行（一条业务线）                                    │   │
│  │ □ 问题收集与修复                                                │   │
│  │ □ 全量上线                                                      │   │
│  │ □ 运维交接                                                      │   │
│  │ □ 用户培训                                                      │   │
│  │                                                                 │   │
│  │ 交付物：上线报告、运维手册、培训材料                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 4.3 甘特图

```
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│                                     项目甘特图                                           │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│                                                                                         │
│ 任务                      │ W1 │ W2 │ W3 │ W4 │ W5 │ W6 │ W7 │ W8 │ W9 │W10│W11│W12│W13│W14│W15│W16│W17│
│ ─────────────────────────│────│────│────│────│────│────│────│────│────│───│───│───│───│───│───│───│───│
│ 第一阶段                  │████│████│████│████│    │    │    │    │    │   │   │   │   │   │   │   │   │
│  环境搭建                 │████│    │    │    │    │    │    │    │    │   │   │   │   │   │   │   │   │
│  技术预研                 │    │████│    │    │    │    │    │    │    │   │   │   │   │   │   │   │   │
│  ESL模块开发              │    │    │████│████│    │    │    │    │    │   │   │   │   │   │   │   │   │
│ ─────────────────────────│────│────│────│────│────│────│────│────│────│───│───│───│───│───│───│───│───│
│ 第二阶段                  │    │    │    │    │████│████│████│████│████│███│   │   │   │   │   │   │   │
│  坐席管理                 │    │    │    │    │████│████│    │    │    │   │   │   │   │   │   │   │   │
│  呼叫控制                 │    │    │    │    │████│████│    │    │    │   │   │   │   │   │   │   │   │
│  ACD分配                  │    │    │    │    │    │    │████│████│    │   │   │   │   │   │   │   │   │
│  排队等待                 │    │    │    │    │    │    │████│████│    │   │   │   │   │   │   │   │   │
│  录音功能                 │    │    │    │    │    │    │    │    │████│   │   │   │   │   │   │   │   │
│  软电话条                 │    │    │    │    │    │    │    │    │████│███│   │   │   │   │   │   │   │
│  CRM集成                  │    │    │    │    │    │    │    │    │    │███│   │   │   │   │   │   │   │
│ ─────────────────────────│────│────│────│────│────│────│────│────│────│───│───│───│───│───│───│───│───│
│ 第三阶段                  │    │    │    │    │    │    │    │    │    │   │███│███│███│███│   │   │   │
│  预测式外呼               │    │    │    │    │    │    │    │    │    │   │███│███│   │   │   │   │   │
│  机器人外呼               │    │    │    │    │    │    │    │    │    │   │███│███│   │   │   │   │   │
│  IVR+呼入机器人           │    │    │    │    │    │    │    │    │    │   │   │   │███│   │   │   │   │
│  监控大屏                 │    │    │    │    │    │    │    │    │    │   │   │   │   │███│   │   │   │
│  班长监控                 │    │    │    │    │    │    │    │    │    │   │   │   │   │███│   │   │   │
│ ─────────────────────────│────│────│────│────│────│────│────│────│────│───│───│───│───│───│───│───│───│
│ 第四阶段                  │    │    │    │    │    │    │    │    │    │   │   │   │   │   │███│███│███│
│  集成联调                 │    │    │    │    │    │    │    │    │    │   │   │   │   │   │███│   │   │
│  高可用部署               │    │    │    │    │    │    │    │    │    │   │   │   │   │   │███│   │   │
│  测试+Bug修复             │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │███│   │
│  试运行                   │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │   │██ │
│  正式上线                 │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │   │ ██│
│ ─────────────────────────│────│────│────│────│────│────│────│────│────│───│───│───│───│───│───│───│───│
│ 里程碑                    │    │ M1 │    │ M2 │    │    │    │    │    │M3 │   │   │   │M4 │M5 │M6 │M7 │
│                          │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │   │   │
│ M1: 需求确认              │    │ ◆  │    │    │    │    │    │    │    │   │   │   │   │   │   │   │   │
│ M2: 环境就绪              │    │    │    │ ◆  │    │    │    │    │    │   │   │   │   │   │   │   │   │
│ M3: 核心功能完成          │    │    │    │    │    │    │    │    │    │ ◆ │   │   │   │   │   │   │   │
│ M4: 全功能完成            │    │    │    │    │    │    │    │    │    │   │   │   │   │ ◆ │   │   │   │
│ M5: 联调测试完成          │    │    │    │    │    │    │    │    │    │   │   │   │   │   │ ◆ │   │   │
│ M6: 试运行完成            │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │ ◆ │   │
│ M7: 正式上线              │    │    │    │    │    │    │    │    │    │   │   │   │   │   │   │   │ ◆ │
│                                                                                         │
└─────────────────────────────────────────────────────────────────────────────────────────┘
```

---

## 五、团队组织

### 5.1 团队配置

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           团队组织架构                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│                         ┌─────────────┐                                │
│                         │  项目经理   │                                │
│                         │   (1人)     │                                │
│                         └──────┬──────┘                                │
│                                │                                        │
│          ┌─────────────────────┼─────────────────────┐                 │
│          │                     │                     │                 │
│          ▼                     ▼                     ▼                 │
│   ┌─────────────┐      ┌─────────────┐      ┌─────────────┐           │
│   │  开发组     │      │  测试组     │      │  运维组     │           │
│   │  (8-10人)   │      │  (1-2人)    │      │  (1人)      │           │
│   └─────────────┘      └─────────────┘      └─────────────┘           │
│          │                                                              │
│          ├── 架构师 (1人)                                              │
│          ├── 后端开发 (4-5人)                                          │
│          ├── 前端开发 (2人)                                            │
│          └── FreeSWITCH工程师 (1-2人)                                  │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 5.2 角色职责

| 角色 | 人数 | 职责 | 技能要求 |
|------|------|------|---------|
| **项目经理** | 1 | 项目管理、进度控制、风险管理 | 项目管理经验、沟通协调能力 |
| **架构师** | 1 | 架构设计、技术选型、核心代码 | FreeSWITCH、分布式系统 |
| **后端开发** | 4-5 | 业务模块开发、API开发 | Java、Spring Boot、Redis |
| **前端开发** | 2 | 软电话条、监控大屏 | Vue3、TypeScript、WebSocket |
| **FS工程师** | 1-2 | FreeSWITCH配置、Lua脚本 | FreeSWITCH、SIP协议、Lua |
| **测试** | 1-2 | 功能测试、性能测试 | 测试用例设计、性能测试工具 |
| **运维** | 1 | 环境部署、监控运维 | Linux、Docker、运维经验 |

### 5.3 人员分工

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           开发任务分工                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  架构师                                                                 │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 整体架构设计                                                  │   │
│  │ • ESL模块核心代码                                               │   │
│  │ • ACD核心算法                                                   │   │
│  │ • 技术难点攻关                                                  │   │
│  │ • 代码Review                                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  后端开发A (资深)                                                       │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 坐席管理模块                                                  │   │
│  │ • 呼叫控制模块                                                  │   │
│  │ • WebSocket推送服务                                             │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  后端开发B                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • ACD分配模块                                                   │   │
│  │ • 队列管理模块                                                  │   │
│  │ • 溢出策略                                                      │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  后端开发C                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 预测式外呼模块                                                │   │
│  │ • 机器人外呼模块                                                │   │
│  │ • TTS集成                                                       │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  后端开发D                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 录音管理模块                                                  │   │
│  │ • 监控统计模块                                                  │   │
│  │ • 班长监控功能                                                  │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  后端开发E (可选)                                                       │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • API接口开发                                                   │   │
│  │ • CRM集成对接                                                   │   │
│  │ • 单元测试                                                      │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  前端开发A                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 软电话条组件开发                                              │   │
│  │ • WebSocket客户端                                               │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  前端开发B                                                              │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • 实时监控大屏                                                  │   │
│  │ • 数据可视化图表                                                │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  FreeSWITCH工程师                                                       │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ • FreeSWITCH配置优化                                            │   │
│  │ • Dialplan编写                                                  │   │
│  │ • Lua IVR脚本开发                                               │   │
│  │ • 线路对接                                                      │   │
│  │ • 高可用部署                                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 六、风险控制

### 6.1 风险清单

```
┌─────────────────────────────────────────────────────────────────────────┐
│                            风险清单                                      │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险1: FreeSWITCH技术门槛高                                     │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 高                                                        │   │
│  │ 影响: 开发进度延迟，功能实现困难                                │   │
│  │ 应对:                                                           │   │
│  │   • Week 1-2 集中学习FreeSWITCH和ESL                            │   │
│  │   • 考虑引入外部FreeSWITCH顾问                                  │   │
│  │   • 预留20%时间缓冲                                             │   │
│  │   • 简化复杂功能，优先实现核心流程                              │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险2: 运营商线路对接周期长                                     │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 高                                                        │   │
│  │ 影响: 无法进行真实环境测试，上线延迟                            │   │
│  │ 应对:                                                           │   │
│  │   • 项目启动即开始申请线路                                      │   │
│  │   • 开发阶段使用模拟线路/测试线路                               │   │
│  │   • 准备备选运营商                                              │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险3: CRM系统对接复杂                                          │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 中                                                        │   │
│  │ 影响: 集成联调时间延长                                          │   │
│  │ 应对:                                                           │   │
│  │   • 提前与CRM团队沟通，明确接口规范                             │   │
│  │   • 提供详细API文档和示例代码                                   │   │
│  │   • 预留充足联调时间                                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险4: 并发性能不达标                                           │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 中                                                        │   │
│  │ 影响: 系统无法支撑业务量                                        │   │
│  │ 应对:                                                           │   │
│  │   • Week 16 进行完整压力测试                                    │   │
│  │   • 预先设计水平扩展方案                                        │   │
│  │   • 关键代码Review，避免性能瓶颈                                │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险5: ASR/TTS识别效果不佳                                      │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 中                                                        │   │
│  │ 影响: 机器人/IVR体验差                                          │   │
│  │ 应对:                                                           │   │
│  │   • 提前进行ASR效果测试                                         │   │
│  │   • 准备热词优化方案                                            │   │
│  │   • 设计按键兜底方案                                            │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 风险6: 核心人员离职                                             │   │
│  ├─────────────────────────────────────────────────────────────────┤   │
│  │ 等级: 中                                                        │   │
│  │ 影响: 知识断层，进度受阻                                        │   │
│  │ 应对:                                                           │   │
│  │   • 重要模块双人备份                                            │   │
│  │   • 代码规范、文档完善                                          │   │
│  │   • 定期代码Review和知识分享                                    │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 6.2 应急预案

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           应急预案                                       │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  场景1: 开发进度严重滞后                                                │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 触发条件: 核心功能延迟超过2周                                   │   │
│  │ 应对措施:                                                       │   │
│  │   • 评估是否可以简化功能范围                                    │   │
│  │   • 考虑增加外部资源支持                                        │   │
│  │   • 与业务方协商分阶段上线                                      │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  场景2: FreeSWITCH关键问题无法解决                                      │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 触发条件: 技术问题阻塞超过1周                                   │   │
│  │ 应对措施:                                                       │   │
│  │   • 联系FreeSWITCH社区或付费支持                                │   │
│  │   • 寻求外部FreeSWITCH专家支援                                  │   │
│  │   • 评估替代方案可行性                                          │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  场景3: 上线后系统不稳定                                                │
│  ┌─────────────────────────────────────────────────────────────────┐   │
│  │ 触发条件: 故障频发或性能严重不足                                │   │
│  │ 应对措施:                                                       │   │
│  │   • 启用回退方案（如有旧系统）                                  │   │
│  │   • 降级部分功能，保障核心业务                                  │   │
│  │   • 紧急扩容或优化                                              │   │
│  └─────────────────────────────────────────────────────────────────┘   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 七、交付物清单

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           项目交付物清单                                 │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  阶段           │ 交付物                                  │ 负责人     │
│  ──────────────│───────────────────────────────────────│───────────│
│                 │                                        │           │
│  需求阶段       │ 需求规格说明书                        │ 产品       │
│                 │ 接口设计文档                          │ 架构师     │
│                 │ 数据库设计文档                        │ 架构师     │
│                 │                                        │           │
│  开发阶段       │ 源代码（Git仓库）                     │ 开发团队   │
│                 │ 单元测试代码                          │ 开发团队   │
│                 │ API接口文档                           │ 后端开发   │
│                 │ 前端组件文档                          │ 前端开发   │
│                 │                                        │           │
│  测试阶段       │ 测试用例文档                          │ 测试       │
│                 │ 测试报告                              │ 测试       │
│                 │ 性能测试报告                          │ 测试       │
│                 │                                        │           │
│  部署阶段       │ 部署手册                              │ 运维       │
│                 │ 运维手册                              │ 运维       │
│                 │ 高可用配置文档                        │ 运维       │
│                 │                                        │           │
│  上线阶段       │ 上线检查清单                          │ 项目经理   │
│                 │ 培训材料                              │ 产品       │
│                 │ 用户操作手册                          │ 产品       │
│                 │ 项目总结报告                          │ 项目经理   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

---

## 八、总结

### 8.1 方案要点总结

| 维度 | 要点 |
|------|------|
| **技术架构** | FreeSWITCH + Java中间件 + Vue前端，ESL控制模式 |
| **开发周期** | 4个月（17周），分4阶段 |
| **团队配置** | 11-14人（含项目经理、开发、测试、运维） |
| **核心功能** | 呼入呼出、ACD分配、预测式外呼、机器人、录音、监控 |
| **风险控制** | FreeSWITCH技术预研、线路提前申请、预留缓冲时间 |

### 8.2 关键成功因素

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         关键成功因素                                     │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  1. 技术准备充分                                                        │
│     └─► Week 1-2 完成FreeSWITCH学习和技术预研                          │
│                                                                         │
│  2. 核心功能优先                                                        │
│     └─► 先完成P0功能，确保基础可用                                     │
│                                                                         │
│  3. 持续集成测试                                                        │
│     └─► 每完成一个模块立即测试，避免问题堆积                           │
│                                                                         │
│  4. CRM团队紧密配合                                                     │
│     └─► 提前沟通接口，并行开发                                         │
│                                                                         │
│  5. 线路提前就位                                                        │
│     └─► 项目启动即申请运营商线路                                       │
│                                                                         │
│  6. 分阶段上线                                                          │
│     └─► 先上线一条业务线验证，再全量推广                               │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 8.3 下一步行动

| 序号 | 行动项 | 负责人 | 完成时间 |
|------|-------|-------|---------|
| 1 | 确认团队人员到位 | 项目经理 | 项目启动前 |
| 2 | 采购/准备开发测试环境 | 运维 | Week 1 |
| 3 | 启动运营商线路申请 | 项目经理 | Week 1 |
| 4 | 组织FreeSWITCH技术培训 | 架构师 | Week 1-2 |
| 5 | 与CRM团队召开接口对接会议 | 架构师 | Week 2 |
| 6 | 完成技术方案评审 | 架构师 | Week 2 |

---