1321 lines
135 KiB
Plaintext
1321 lines
135 KiB
Plaintext
**文档版本**: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 |
|
||
|
||
--- |