767 lines
13 KiB
Markdown
767 lines
13 KiB
Markdown
# 自研软交换运营平台 V1 产品设计文档
|
||
|
||
## 1. 系统定位
|
||
|
||
本系统定位为基于 OpenSIPS + RTPEngine 的软交换运营平台,用于支撑多客户、多供应商、多线路组、费率计费、话单查询、录音质检和 SIP 运维。
|
||
|
||
OpenSIPS 负责 SIP 信令控制、注册鉴权、路由选择、话单基础数据和与媒体代理的协同。RTPEngine 负责 RTP 媒体转发、NAT 穿透和录音能力。自研平台负责客户、供应商、费率、账单、质检、权限、报表等业务运营能力。
|
||
|
||
推荐定位:
|
||
|
||
- OpenSIPS-CP:V1 保留,作为技术运维后台,用于排障和底层配置。
|
||
- 自研平台:业务运营后台,用于客户、计费、线路、话单、质检和权限管理。
|
||
|
||
## 2. 目标用户角色
|
||
|
||
### 2.1 超级管理员
|
||
|
||
负责全局配置、租户/客户管理、供应商管理、系统参数、权限和安全策略。
|
||
|
||
### 2.2 运营管理员
|
||
|
||
负责客户开通、线路组配置、路由策略、时段控制、话单查询和日常运营。
|
||
|
||
### 2.3 财务人员
|
||
|
||
负责客户费率、供应商费率、账单、成本、利润、充值、授信和对账。
|
||
|
||
### 2.4 质检人员
|
||
|
||
负责录音抽检、录音试听、质检标注、问题分类和质检报告。
|
||
|
||
### 2.5 技术运维
|
||
|
||
负责 SIP Trace、在线通话、注册状态、网关状态、OpenSIPS/RTPEngine 监控和故障排查。
|
||
|
||
### 2.6 客户账号
|
||
|
||
V1 不包含客户登录端。客户侧能力暂不开放独立门户,仅保留内部运营后台使用。
|
||
|
||
## 3. 一级菜单设计
|
||
|
||
```text
|
||
运营平台
|
||
├── 概览 Dashboard
|
||
├── 客户管理
|
||
├── 供应商管理
|
||
├── 线路与路由
|
||
├── 费率与计费
|
||
├── 话单中心
|
||
├── 质检中心
|
||
├── SIP 运维
|
||
├── 监控告警
|
||
├── 系统设置
|
||
└── 权限与审计
|
||
```
|
||
|
||
## 4. 页面功能设计
|
||
|
||
## 4.1 概览 Dashboard
|
||
|
||
用途:展示平台整体运行状态。
|
||
|
||
核心卡片:
|
||
|
||
- 今日通话数
|
||
- 当前在线通话数
|
||
- 今日接通率
|
||
- 今日客户消费
|
||
- 今日供应商成本
|
||
- 今日毛利
|
||
- 在线注册用户数
|
||
- RTPengine 节点状态
|
||
- OpenSIPS 节点状态
|
||
- 异常网关数量
|
||
- 质检待处理数量
|
||
|
||
主要图表:
|
||
|
||
- 最近 24 小时通话量趋势
|
||
- 最近 24 小时接通率趋势
|
||
- 客户消费 TOP 10
|
||
- 供应商成本 TOP 10
|
||
- 失败响应码分布
|
||
|
||
OpenSIPS/RTPEngine 对接点:
|
||
|
||
- OpenSIPS MI:`ps`、`get_statistics`、`dlg_list`
|
||
- OpenSIPS DB:CDR 表、subscriber/location 表
|
||
- RTPEngine 控制接口:节点状态
|
||
|
||
## 4.2 客户管理
|
||
|
||
### 客户列表
|
||
|
||
字段:
|
||
|
||
- 客户 ID
|
||
- 客户名称
|
||
- SIP 域名
|
||
- 认证方式
|
||
- 网关数量
|
||
- 状态
|
||
- 余额
|
||
- 授信额度
|
||
- 计费模式
|
||
- 线路组
|
||
- 创建时间
|
||
|
||
操作:
|
||
|
||
- 新增客户
|
||
- 编辑客户
|
||
- 禁用/启用客户
|
||
- 配置费率
|
||
- 配置线路组
|
||
- 查看话单
|
||
- 查看账单
|
||
|
||
### 客户详情
|
||
|
||
模块:
|
||
|
||
- 基本信息
|
||
- SIP 账号
|
||
- 客户网关
|
||
- IP 白名单
|
||
- 费率方案
|
||
- 线路组
|
||
- 外呼时段
|
||
- 余额/授信
|
||
- 录音质检策略
|
||
- 操作日志
|
||
|
||
### 客户网关与业务策略
|
||
|
||
设计要求:
|
||
|
||
- 同一个客户可配置多个接入网关。
|
||
- 每个客户网关可单独开启或关闭录音。
|
||
- 同一个客户下,不同客户网关来源 IP + 不同被叫前缀,可映射到不同业务。
|
||
- 每个业务映射项需绑定对应客户费率和落地网关组。
|
||
|
||
建议字段:
|
||
|
||
- 客户
|
||
- 客户网关 ID
|
||
- 来源 IP
|
||
- 被叫前缀
|
||
- 业务名称
|
||
- 录音开关
|
||
- 客户费率方案
|
||
- 落地网关组
|
||
- 优先级
|
||
- 状态
|
||
|
||
OpenSIPS 对接点:
|
||
|
||
- `subscriber`:SIP 用户认证
|
||
- `domain`:客户域名
|
||
- `address`:客户 IP 白名单
|
||
- `dr_groups`:客户所属路由组
|
||
|
||
## 4.3 供应商管理
|
||
|
||
### 供应商列表
|
||
|
||
字段:
|
||
|
||
- 供应商 ID
|
||
- 供应商名称
|
||
- 网关数量
|
||
- 状态
|
||
- 结算周期
|
||
- 费率方案
|
||
- 联系人
|
||
- 创建时间
|
||
|
||
操作:
|
||
|
||
- 新增供应商
|
||
- 编辑供应商
|
||
- 禁用/启用供应商
|
||
- 管理网关
|
||
- 管理供应商费率
|
||
- 查看成本话单
|
||
|
||
### 落地网关
|
||
|
||
字段:
|
||
|
||
- 网关 ID
|
||
- 供应商
|
||
- SIP 地址
|
||
- 端口
|
||
- 协议
|
||
- 权重
|
||
- 优先级
|
||
- 探测模式
|
||
- 当前状态
|
||
- 描述
|
||
|
||
### 供应商网关业务策略
|
||
|
||
设计要求:
|
||
|
||
- 同一个供应商可配置多个落地网关。
|
||
- 同一个网关下,可按不同被叫前缀区分业务。
|
||
- 同一个网关下,也可按不同主叫号码或主叫号段区分业务。
|
||
- 每个业务映射项需绑定对应供应商费率,用于成本结算。
|
||
|
||
建议字段:
|
||
|
||
- 供应商
|
||
- 网关 ID
|
||
- 主叫号码/号段
|
||
- 被叫前缀
|
||
- 业务名称
|
||
- 供应商费率方案
|
||
- 优先级
|
||
- 状态
|
||
|
||
OpenSIPS 对接点:
|
||
|
||
- `dr_gateways`
|
||
- `dispatcher`
|
||
- `drouting` MI:`dr_gw_status`、`dr_reload`
|
||
|
||
## 4.4 线路与路由
|
||
|
||
### 线路组
|
||
|
||
用途:把多个供应商网关组合成一个客户可使用的落地线路池。
|
||
|
||
字段:
|
||
|
||
- 线路组 ID
|
||
- 线路组名称
|
||
- 适用客户
|
||
- 网关列表
|
||
- 路由策略
|
||
- 失败重试策略
|
||
- 状态
|
||
|
||
路由策略:
|
||
|
||
- 按优先级
|
||
- 按权重
|
||
- 按成本最低
|
||
- 按接通率
|
||
- 按号码前缀
|
||
- 按时段
|
||
|
||
### 路由规则
|
||
|
||
字段:
|
||
|
||
- 规则 ID
|
||
- 客户/客户组
|
||
- 号码前缀
|
||
- 线路组
|
||
- 优先级
|
||
- 生效时间
|
||
- 状态
|
||
- 备注
|
||
|
||
补充规则:
|
||
|
||
- 客户侧优先按客户网关 + 来源 IP 识别接入入口。
|
||
- 在接入入口下继续按被叫前缀识别业务。
|
||
- 识别出业务后绑定客户费率和落地网关组。
|
||
- 供应商侧优先按供应商网关匹配,再按被叫前缀或主叫号码匹配成本业务和费率。
|
||
|
||
OpenSIPS 对接点:
|
||
|
||
- `dr_rules`
|
||
- `dr_groups`
|
||
- `dr_carriers`
|
||
- `dialplan`
|
||
|
||
## 4.5 费率与计费
|
||
|
||
### 客户费率
|
||
|
||
字段:
|
||
|
||
- 客户
|
||
- 业务名称
|
||
- 客户网关(可选)
|
||
- 国家/地区
|
||
- 号码前缀
|
||
- 单价
|
||
- 计费周期
|
||
- 首周期
|
||
- 生效时间
|
||
- 失效时间
|
||
|
||
计费周期示例:
|
||
|
||
- 1/1:按秒计费
|
||
- 6/6:每 6 秒一个计费单位
|
||
- 60/60:按分钟计费
|
||
- 60/6:首分钟,之后每 6 秒
|
||
|
||
### 供应商费率
|
||
|
||
字段类似客户费率,但用于计算成本。
|
||
|
||
补充维度:
|
||
|
||
- 供应商
|
||
- 供应商网关(可选)
|
||
- 主叫号码/号段(可选)
|
||
- 被叫前缀
|
||
- 业务名称
|
||
|
||
### Billing Worker
|
||
|
||
职责:
|
||
|
||
- 读取未计费 CDR
|
||
- 识别客户业务
|
||
- 匹配客户费率
|
||
- 识别供应商业务
|
||
- 匹配供应商费率
|
||
- 按计费周期计算客户费用
|
||
- 按计费周期计算供应商成本
|
||
- 计算毛利
|
||
- 写入已计费话单
|
||
- 更新余额或授信占用
|
||
|
||
计费公式示例:
|
||
|
||
```text
|
||
计费秒数 = ceil(实际通话秒数 / 计费周期) * 计费周期
|
||
客户费用 = 计费秒数 / 60 * 客户分钟单价
|
||
供应商成本 = 计费秒数 / 60 * 供应商分钟单价
|
||
毛利 = 客户费用 - 供应商成本
|
||
```
|
||
|
||
OpenSIPS 对接点:
|
||
|
||
- `acc`
|
||
- `dialog`
|
||
- CDR 表
|
||
- 自研 billing 表
|
||
|
||
## 4.6 话单中心
|
||
|
||
### 原始 CDR
|
||
|
||
字段:
|
||
|
||
- Call-ID
|
||
- 客户
|
||
- 客户网关
|
||
- 来源 IP
|
||
- 主叫
|
||
- 被叫
|
||
- 业务名称
|
||
- 开始时间
|
||
- 接通时间
|
||
- 结束时间
|
||
- 通话时长
|
||
- 计费时长
|
||
- SIP 响应码
|
||
- 供应商
|
||
- 网关
|
||
- 路由规则
|
||
- 录音状态
|
||
|
||
### 已计费话单
|
||
|
||
字段:
|
||
|
||
- 原始 CDR ID
|
||
- 客户费率
|
||
- 供应商费率
|
||
- 客户费用
|
||
- 供应商成本
|
||
- 毛利
|
||
- 计费状态
|
||
- 计费时间
|
||
|
||
操作:
|
||
|
||
- 查询
|
||
- 导出 CSV
|
||
- 重新计费
|
||
- 查看 SIP Trace
|
||
- 查看录音
|
||
- 页面内试听录音
|
||
- 查看命中业务、客户费率、供应商费率和路由规则
|
||
|
||
## 4.7 质检中心
|
||
|
||
### 抽检规则
|
||
|
||
字段:
|
||
|
||
- 客户
|
||
- 抽检比例
|
||
- 指定号码
|
||
- 指定线路
|
||
- 最小时长
|
||
- 最大时长
|
||
- 是否录音
|
||
- 生效时间
|
||
|
||
### 录音列表
|
||
|
||
字段:
|
||
|
||
- Call-ID
|
||
- 客户
|
||
- 主叫
|
||
- 被叫
|
||
- 通话时间
|
||
- 通话时长
|
||
- 录音文件
|
||
- 质检状态
|
||
- 试听操作
|
||
|
||
### 录音详情
|
||
|
||
功能:
|
||
|
||
- 播放录音
|
||
- 查看录音基础信息
|
||
- 标注问题
|
||
- 打分
|
||
- 导出质检报告
|
||
|
||
RTPEngine 对接点:
|
||
|
||
- RTPEngine 录音能力
|
||
- recording daemon
|
||
- 录音文件存储
|
||
|
||
外部服务:
|
||
|
||
- 对象存储,例如 MinIO/S3
|
||
|
||
## 4.8 SIP 运维
|
||
|
||
页面:
|
||
|
||
- 在线注册
|
||
- 在线通话
|
||
- SIP Trace
|
||
- 网关状态
|
||
- Domain 管理
|
||
- Address 白名单
|
||
- Dispatcher
|
||
- Dynamic Routing
|
||
- RTPEngine 状态
|
||
|
||
用途:
|
||
|
||
- 给技术运维排障
|
||
- 不建议直接暴露给普通业务人员
|
||
|
||
OpenSIPS 对接点:
|
||
|
||
- `usrloc`
|
||
- `dialog`
|
||
- `tracer`
|
||
- `dispatcher`
|
||
- `drouting`
|
||
- `domain`
|
||
- `permissions`
|
||
- `rtpengine`
|
||
|
||
## 4.9 监控告警
|
||
|
||
监控项:
|
||
|
||
- OpenSIPS 进程状态
|
||
- OpenSIPS MI 是否可用
|
||
- RTPEngine 节点是否可用
|
||
- SIP 5060 是否监听
|
||
- RTP 端口范围是否开放
|
||
- 数据库连接
|
||
- CDR 堆积
|
||
- Billing Worker 堆积
|
||
- 录音文件入库任务堆积
|
||
- 磁盘空间
|
||
|
||
告警方式:
|
||
|
||
- 邮件
|
||
- 企业微信/钉钉/飞书
|
||
- 短信
|
||
|
||
推荐工具:
|
||
|
||
- Prometheus
|
||
- Grafana
|
||
- Loki 或 ELK
|
||
- Alertmanager
|
||
- Monit
|
||
|
||
## 4.10 系统设置
|
||
|
||
页面:
|
||
|
||
- SIP 域名
|
||
- 监听地址
|
||
- MI 连接配置
|
||
- RTPengine 节点
|
||
- 录音存储
|
||
- 全局计费参数
|
||
- 时区与时间格式
|
||
- 安全策略
|
||
|
||
## 4.11 权限与审计
|
||
|
||
### 角色权限
|
||
|
||
角色示例:
|
||
|
||
- 超级管理员
|
||
- 运营管理员
|
||
- 财务
|
||
- 质检
|
||
- 技术运维
|
||
- 客户只读账号
|
||
|
||
### 操作日志
|
||
|
||
记录:
|
||
|
||
- 登录
|
||
- 新增/修改/删除客户
|
||
- 修改费率
|
||
- 修改路由
|
||
- 手动重计费
|
||
- 下载录音
|
||
- 导出话单
|
||
|
||
## 5. 核心业务流程
|
||
|
||
## 5.1 客户开通流程
|
||
|
||
```text
|
||
新增客户
|
||
-> 分配 SIP 域名或账号
|
||
-> 配置 IP 白名单或 SIP 账号密码
|
||
-> 配置客户网关
|
||
-> 配置客户网关录音开关
|
||
-> 配置客户网关业务策略
|
||
-> 配置客户费率
|
||
-> 配置线路组
|
||
-> 配置外呼时段
|
||
-> 启用客户
|
||
-> OpenSIPS reload 对应模块
|
||
```
|
||
|
||
## 5.2 外呼流程
|
||
|
||
```text
|
||
客户发起 INVITE
|
||
-> OpenSIPS 判断来源 IP/账号
|
||
-> 识别客户
|
||
-> 识别客户网关
|
||
-> 检查客户状态和余额
|
||
-> 检查外呼时段
|
||
-> 按被叫前缀识别客户业务
|
||
-> 匹配客户费率
|
||
-> 选择落地网关组
|
||
-> 选择供应商网关
|
||
-> 按供应商网关 + 被叫前缀/主叫号码识别供应商业务
|
||
-> 调用 RTPEngine 处理媒体
|
||
-> 生成 Dialog/CDR
|
||
-> 通话结束后 Billing Worker 计费
|
||
```
|
||
|
||
## 5.3 呼入分发流程
|
||
|
||
```text
|
||
上游呼入到 SIP 域名
|
||
-> OpenSIPS domain 判断
|
||
-> 根据域名/DID/客户规则匹配目标
|
||
-> dispatcher 或 drouting 分发到后端服务器
|
||
-> 记录 CDR
|
||
```
|
||
|
||
## 5.4 计费流程
|
||
|
||
```text
|
||
通话结束
|
||
-> OpenSIPS 写入原始 CDR
|
||
-> Billing Worker 拉取未计费 CDR
|
||
-> 识别客户业务
|
||
-> 匹配客户费率
|
||
-> 识别供应商业务
|
||
-> 匹配供应商费率
|
||
-> 计算费用和成本
|
||
-> 写入已计费话单
|
||
-> 更新客户余额/授信
|
||
-> 生成账单统计
|
||
```
|
||
|
||
## 5.5 质检流程
|
||
|
||
```text
|
||
通话建立
|
||
-> 判断是否命中录音规则
|
||
-> OpenSIPS 控制 RTPEngine 录音
|
||
-> 通话结束生成录音文件
|
||
-> 录音入库
|
||
-> 质检人员页面试听录音
|
||
-> 标注问题并生成报告
|
||
```
|
||
|
||
## 6. 建议数据库模块
|
||
|
||
业务库建议和 OpenSIPS 原生库分开,避免升级 OpenSIPS 时互相影响。
|
||
|
||
```text
|
||
opensips 原生库:
|
||
- subscriber
|
||
- location
|
||
- domain
|
||
- address
|
||
- dialog
|
||
- acc / cdr
|
||
- dr_gateways
|
||
- dr_rules
|
||
- dr_groups
|
||
- dispatcher
|
||
- rtpengine
|
||
- sip_trace
|
||
|
||
业务库:
|
||
- customers
|
||
- customer_accounts
|
||
- customer_rate_plans
|
||
- customer_rates
|
||
- customer_gateways
|
||
- customer_gateway_policies
|
||
- vendors
|
||
- vendor_gateways
|
||
- vendor_rate_plans
|
||
- vendor_rates
|
||
- vendor_gateway_policies
|
||
- route_groups
|
||
- route_group_items
|
||
- outbound_time_policies
|
||
- raw_cdrs
|
||
- rated_cdrs
|
||
- invoices
|
||
- balances
|
||
- recordings
|
||
- quality_reviews
|
||
- users
|
||
- roles
|
||
- permissions
|
||
- audit_logs
|
||
```
|
||
|
||
## 7. 与 OpenSIPS/RTPEngine 的边界
|
||
|
||
OpenSIPS 负责:
|
||
|
||
- SIP 协议
|
||
- 鉴权
|
||
- 注册
|
||
- 路由
|
||
- 通话状态
|
||
- MI 控制
|
||
- CDR 基础数据
|
||
|
||
RTPEngine 负责:
|
||
|
||
- RTP 转发
|
||
- NAT 穿透
|
||
- 媒体锚定
|
||
- 录音
|
||
|
||
自研平台负责:
|
||
|
||
- 客户管理
|
||
- 供应商管理
|
||
- 费率
|
||
- 计费
|
||
- 账单
|
||
- 质检
|
||
- 权限
|
||
- 报表
|
||
- 审计
|
||
|
||
## 8. V1 优先级建议
|
||
|
||
### P0:先跑通运营闭环
|
||
|
||
- 客户管理
|
||
- 供应商管理
|
||
- 线路组
|
||
- 客户费率
|
||
- 供应商费率
|
||
- 原始 CDR
|
||
- Billing Worker
|
||
- 已计费话单
|
||
- 预付费余额实时控制
|
||
- Dashboard 基础指标
|
||
|
||
### P1:提升运营能力
|
||
|
||
- 时段控制
|
||
- 授信管理
|
||
- 账单
|
||
- 导出
|
||
- 网关健康状态
|
||
- SIP Trace 跳转
|
||
|
||
### P2:质检和录音运营
|
||
|
||
- 录音规则
|
||
- 录音列表
|
||
- 录音试听
|
||
- 质检标注
|
||
- 质检报表
|
||
|
||
### P3:高可用和企业化
|
||
|
||
- 多 OpenSIPS 节点
|
||
- 多 RTPEngine 节点
|
||
- 数据库高可用
|
||
- 多角色权限
|
||
- 审计日志
|
||
- 告警中心
|
||
|
||
## 9. Figma 原型页面清单
|
||
|
||
建议优先画这些页面:
|
||
|
||
1. Dashboard
|
||
2. 客户列表
|
||
3. 客户详情
|
||
4. 客户费率
|
||
5. 供应商列表
|
||
6. 落地网关
|
||
7. 线路组
|
||
8. 路由规则
|
||
9. 原始 CDR
|
||
10. 已计费话单
|
||
11. 账单详情
|
||
12. 录音列表
|
||
13. 录音详情
|
||
14. SIP 运维概览
|
||
15. 系统设置
|
||
|
||
## 10. V1 范围确认
|
||
|
||
已确认范围:
|
||
|
||
- 不需要客户登录端。
|
||
- 需要预付费余额实时控制。
|
||
- 不需要多 OpenSIPS 节点,V1 按单节点设计。
|
||
- 保留 OpenSIPS-CP,作为技术运维后台。
|
||
|
||
按以上范围进入下一阶段:
|
||
|
||
```text
|
||
产品原型 -> 数据库设计 -> API 设计 -> OpenSIPS 脚本改造 -> Billing Worker -> 前端开发
|
||
```
|