版本: v1.0
日期: 2026-07-31
编制方法: Superpowers 结构化工程方法论(头脑风暴 → 编写计划 → TDD → 验证)
目标客户: 莆田市农商行
莆田市农商行客户经理日常需通过电话和走访与客户进行服务接触,但传统管理模式存在以下痛点:
| 痛点 |
描述 |
| 非现场管理盲区 |
客户经理多在网点外工作,管理者无法实时掌握服务接触情况 |
| 电话录音不便 |
传统硬件录音设备查询不及时、易遗漏、维护成本高 |
| 漏话商机流失 |
漏接客户电话无感知,业务机会白白流失 |
| 服务纠纷无据 |
通话无完整留证,投诉纠纷时难以还原事实 |
| 考核缺乏依据 |
绩效依赖手工填报和主观评价,缺乏客观数据支撑 |
| 合规风险隐患 |
通话话术缺乏自动化合规审查,监管风险难以提前预警 |
构建”汇工作”服务接触自动化智慧管理平台,实现客户经理电话接打记录的全生命周期管控:
- 自动采集:零感知采集每一次主叫/被叫记录和通话录音
- 智能分析:AI 驱动的语音转写、质检、情绪识别
- 闭环管理:漏话提醒 → 回电追踪 → 走访记录 → 报告生成
- 数据决策:客观工作报告驱动公平透明的绩效考核
┌─────────────────────────────────────────────────────────┐
│ 汇工作平台 │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │话单采集 │ │录音管理 │ │漏话分析 │ │走访管理 │ │
│ │ 引擎 │ │ 服务 │ │ 引擎 │ │ 服务 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ ┌────┴───────────┴───────────┴───────────┴────┐ │
│ │ AI 语音质检引擎 │ │
│ └────────────────────┬────────────────────────┘ │
│ │ │
│ ┌─────────┐ ┌────────┴────────┐ ┌─────────┐ │
│ │报告生成 │ │ 数据中台 │ │权限管理 │ │
│ │ 服务 │ │ (存储/检索/统计) │ │ 服务 │ │
│ └─────────┘ └─────────────────┘ └─────────┘ │
│ │
└───────────┬─────────────────┬───────────────────────────┘
│ │
┌────────┴───────┐ ┌─────┴──────────┐
│ 电信网络侧 │ │ 天翼云基础设施 │
│ (5G/4G话单/录音)│ │ (计算/存储/安全) │
└────────────────┘ └────────────────┘
系统内:话单采集、录音管理、漏话分析、走访管理、AI 质检、报告生成、数据中台、权限管理
系统外(外部依赖):电信网络侧话单/录音推送接口、天翼云基础设施、第三方 AI 转写/质检服务
| 角色 |
说明 |
核心权限 |
| 超级管理员 |
中国电信运营人员 |
全部租户管理、平台配置 |
| 银行管理员 |
莆田市农商行 IT/总行管理者 |
本行全部数据查看、部门配置、人员管理 |
| 部门管理者 |
各业务部门负责人 |
本部门数据查看、报表导出、质检配置 |
| 客户经理 |
一线员工 |
个人数据查看、走访签到、任务处理 |
| 合规审计员 |
合规部/风控部 |
全行通话质检报告查看、风险预警处理 |
采用云原生微服务架构,部署于中国电信天翼云,前后端分离 + 移动端 H5。
┌─────────────────────────────────────────────────────────────┐
│ 接入层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Web管理端 │ │ H5移动端 │ │ 开放API │ │
│ │ (Vue3) │ │ (Vue3) │ │ (REST) │ │
│ └─────┬────┘ └─────┬────┘ └─────┬────┘ │
│ └──────────────┴──────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│ HTTPS / WSS
┌────────────────────────┴────────────────────────────────────┐
│ API 网关层 │
│ (鉴权 / 限流 / 路由 / 日志 / 审计) │
└────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────┴────────────────────────────────────┐
│ 业务服务层 (微服务) │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │话单采集 │ │录音管理 │ │漏话分析 │ │走访管理 │ │AI质检 │ │
│ │服务 │ │服务 │ │服务 │ │服务 │ │服务 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │报告生成 │ │权限管理 │ │通知服务 │ │
│ │服务 │ │服务 │ │服务 │ │
│ └────────┘ └────────┘ └────────┘ │
└────────────────────────┬────────────────────────────────────┘
│
┌────────────────────────┴────────────────────────────────────┐
│ 数据层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │PostgreSQL │ │ Redis │ │ MinIO │ │ElasticS. │ │
│ │(业务数据) │ │(缓存/队列)│ │(录音文件) │ │(全文检索) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
| 层次 |
技术选型 |
选型理由 |
| 前端 Web |
Vue 3 + TypeScript + Element Plus |
生态成熟,组件丰富,适合后台管理 |
| 前端 H5 |
Vue 3 + Vant |
移动端轻量化,客户经理手机访问 |
| 后端框架 |
Python FastAPI |
异步高性能,自动生成 OpenAPI 文档 |
| ORM |
SQLAlchemy 2.0 |
类型安全,支持异步 |
| 任务队列 |
Celery + Redis |
录音转写、质检等异步任务 |
| 数据库 |
PostgreSQL 15 |
金融级可靠性,JSONB 支持灵活字段 |
| 对象存储 |
MinIO / 天翼云 OSS |
录音文件存储,S3 兼容协议 |
| 搜索引擎 |
Elasticsearch 8 |
录音转写全文检索 |
| AI 服务 |
电信 AI 平台 / ASR + NLP |
语音转写、关键词检测、情绪分析 |
| 容器化 |
Docker + Docker Compose |
开发/测试/部署环境一致 |
| 反向代理 |
Nginx |
SSL 终止、静态资源、负载均衡 |
平台支持多银行客户隔离,采用共享数据库 + 行级隔离模式:
- 每个租户(银行)分配唯一
tenant_id
- 所有业务表包含
tenant_id 字段
- API 网关层自动注入
tenant_id 过滤条件
- 数据访问层强制按
tenant_id 隔离,防止越权
系统通过以下方式对接电信网络获取话单和录音:
| 数据源 |
对接方式 |
频率 |
说明 |
| 话单记录 |
电信话单推送 API(Webhook 回调) |
实时 |
通话结束后自动推送话单 |
| 通话录音 |
电信录音存储 URL 回调 |
实时 |
通话结束后录音文件 URL 推送 |
| 号码状态 |
电信号码管理 API |
按需 |
查询号码是否在服务期 |
回调数据格式(话单推送示例):
{
"event_type": "call_completed",
"call_id": "CL20260731143052_18117132919",
"tenant_id": "TENANT_PTNSRCB",
"phone_number": "18117132919",
"call_direction": "outgoing",
"callee_number": "13805061234",
"start_time": "2026-07-31T14:30:52+08:00",
"end_time": "2026-07-31T14:33:28+08:00",
"duration_seconds": 156,
"recording_url": "https://oss.ctyun.cn/rec/CL20260731143052_18117132919.wav"
}
自动采集客户经理手机的每一次主叫和被叫记录,无需安装客户端,实现电话量的全自动感知和统计。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-CD-01 |
话单自动接收 |
系统(电信回调) |
号码已开通汇工作服务 |
1.电信推送话单 2.系统校验合法性 3.存储话单 4.更新统计缓存 |
| UC-CD-02 |
电话量日报查看 |
部门管理者 |
本部门有客户经理 |
1.选择日期 2.系统查询通话统计 3.展示每人主叫/被叫次数、时长 |
| UC-CD-03 |
电话量阈值预警 |
系统定时任务 |
管理者已设置阈值 |
1.每日定时统计 2.对比阈值 3.低于阈值发送预警通知 |
| UC-CD-04 |
通话明细查询 |
部门管理者/客户经理 |
有通话记录 |
1.输入查询条件 2.系统返回通话列表 3.点击查看详情 |
| 规则 ID |
规则名称 |
详细描述 |
| R-CD-01 |
话单去重 |
同一 call_id 重复推送时执行幂等处理,仅保留首次记录 |
| R-CD-02 |
通话时长计算 |
duration = end_time - start_time,秒级精度,不足1秒计为1秒 |
| R-CD-03 |
统计维度 |
支持按人/按部门/按日/按周/按月统计,主叫和被叫分开统计 |
| R-CD-04 |
阈值配置 |
管理者可为每个角色设置每日最低主叫次数,低于阈值触发预警 |
| R-CD-05 |
时区处理 |
所有时间以 Asia/Shanghai (UTC+8) 存储和展示 |
GET /api/v1/call-records
?phone_number={string}
&direction={incoming|outgoing}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
&department_id={string}
&page={int}&page_size={int}
Response: {
"total": 156,
"items": [{
"call_id": "CL20260731143052_18117132919",
"phone_number": "18117132919",
"employee_name": "张三",
"department": "个人金融部",
"direction": "outgoing",
"peer_number": "13805061234",
"start_time": "2026-07-31T14:30:52+08:00",
"duration_seconds": 156,
"has_recording": true,
"recording_id": "REC_20260731_001"
}]
}
GET /api/v1/call-statistics/summary
?dimension={individual|department}
&period={daily|weekly|monthly}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
Response: {
"dimension": "individual",
"period": "daily",
"items": [{
"employee_id": "EMP001",
"employee_name": "张三",
"department": "个人金融部",
"outgoing_count": 28,
"incoming_count": 12,
"total_count": 40,
"outgoing_duration_min": 95,
"incoming_duration_min": 38,
"total_duration_min": 133,
"meets_threshold": true
}]
}
POST /api/v1/call-thresholds
Request: {
"department_id": "DEPT_PJRB",
"role": "客户经理",
"min_daily_outgoing": 20,
"min_daily_total": 30
}
云端化电话录音服务,通话结束后录音自动上传至云端,支持多维度查询、AI 语音转写为文字。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-RC-01 |
录音自动入库 |
系统(电信回调) |
话单已有对应 call_id |
1.接收录音 URL 回调 2.下载录音文件 3.存入对象存储 4.更新话单 has_recording=true |
| UC-RC-02 |
录音查询试听 |
部门管理者/合规审计员 |
有录音记录 |
1.输入查询条件 2.返回录音列表 3.点击在线试听 4.系统鉴权后返回播放 URL |
| UC-RC-03 |
录音 AI 转写 |
系统(异步任务) |
录音已入库 |
1.检测新录音 2.调用 ASR 服务 3.存储转写文本 4.索引至 Elasticsearch |
| UC-RC-04 |
转写文本检索 |
部门管理者/合规审计员 |
录音已完成转写 |
1.输入关键词 2.Elasticsearch 全文检索 3.返回匹配片段及时间戳 |
| 规则 ID |
规则名称 |
详细描述 |
| R-RC-01 |
录音格式 |
接收 WAV 格式,存储时转码为 MP3(128kbps)节省存储空间 |
| R-RC-02 |
录音套餐控制 |
每号码每月录音时长不超过套餐额度(1000/3000/5000分钟),超额部分仅保留话单不录音 |
| R-RC-03 |
录音留存的时限 |
按套餐约定留存 90 天,到期自动清理录音文件和转写文本 |
| R-RC-04 |
转写准确率 |
ASR 转写准确率不低于 85%,支持方言(闽南语)自适应优化 |
| R-RC-05 |
试听鉴权 |
只有具有该号码数据权限的角色可试听,试听行为记录审计日志 |
| R-RC-06 |
转写异步处理 |
录音入库后异步触发转写,非阻塞主流程,转写完成后更新状态 |
GET /api/v1/recordings
?phone_number={string}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
&has_transcript={bool}
&keyword={string} # 转写全文检索
&page={int}&page_size={int}
Response: {
"total": 89,
"items": [{
"recording_id": "REC_20260731_001",
"call_id": "CL20260731143052_18117132919",
"phone_number": "18117132919",
"employee_name": "张三",
"duration_seconds": 156,
"file_size_kb": 2450,
"transcript_status": "completed",
"created_at": "2026-07-31T14:35:00+08:00"
}]
}
GET /api/v1/recordings/{recording_id}/play
Response: {
"play_url": "https://...", # 临时签名URL,有效期15分钟
"expires_at": "2026-07-31T15:00:00+08:00"
}
GET /api/v1/recordings/{recording_id}/transcript
Response: {
"recording_id": "REC_20260731_001",
"status": "completed",
"transcript": "您好,我是莆田农商行的客户经理张三...",
"segments": [{
"start_ms": 0,
"end_ms": 3200,
"speaker": "agent",
"text": "您好,我是莆田农商行的客户经理张三"
}, {
"start_ms": 3500,
"end_ms": 8200,
"speaker": "customer",
"text": "你好,我想咨询一下贷款的事"
}]
}
自动识别未接来电,标记为漏话记录,第一时间提醒客户经理回电,统计分析漏话频次。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-MS-01 |
漏话自动识别 |
系统(话单处理) |
话单 direction=incoming 且未接通 |
1.话单入库判断未接通 2.创建漏话记录 3.触发提醒通知 |
| UC-MS-02 |
漏话短信提醒 |
通知服务 |
漏话已识别 |
1.生成提醒短信 2.发送至客户经理手机 3.记录发送状态 |
| UC-MS-03 |
漏话回电追踪 |
系统/客户经理 |
漏话记录存在 |
1.检测到对漏话号码的回电话单 2.更新漏话记录回电状态 3.计算响应时长 |
| UC-MS-04 |
漏话统计报表 |
部门管理者 |
本部门有漏话记录 |
1.选择时间范围 2.展示每人漏话次数/回电率/平均响应时长 |
| 规则 ID |
规则名称 |
详细描述 |
| R-MS-01 |
漏话判定 |
来电(incoming)且 duration_seconds < 5(未接通或秒挂)判定为漏话 |
| R-MS-02 |
提醒时效 |
漏话发生后 1 分钟内发送短信提醒 |
| R-MS-03 |
提醒去重 |
同一来电号码 30 分钟内仅提醒一次,避免重复打扰 |
| R-MS-04 |
回电判定 |
漏话后 2 小时内对该号码发起主叫即视为已回电 |
| R-MS-05 |
响应时长 |
从漏话发生时间到回电接通时间的间隔,分钟级 |
| R-MS-06 |
漏话报表 |
按人/按部门/按日统计漏话次数、回电率、平均响应时长 |
GET /api/v1/missed-calls
?phone_number={string}
&department_id={string}
&status={pending|callback_done|expired}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
&page={int}&page_size={int}
Response: {
"total": 23,
"items": [{
"missed_call_id": "MC_20260731_001",
"phone_number": "18117132919",
"employee_name": "张三",
"caller_number": "13805061234",
"call_time": "2026-07-31T10:15:00+08:00",
"status": "callback_done",
"callback_time": "2026-07-31T10:22:00+08:00",
"response_minutes": 7
}]
}
GET /api/v1/missed-calls/statistics
?dimension={individual|department}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
Response: {
"items": [{
"employee_name": "张三",
"department": "个人金融部",
"missed_count": 5,
"callback_count": 4,
"callback_rate": 0.80,
"avg_response_minutes": 12.5
}]
}
基于位置服务的走访管理,客户经理到达客户所在地签到打卡,管理者可查看外勤轨迹。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-VS-01 |
走访签到 |
客户经理(H5端) |
已登录且有外勤任务 |
1.到达客户位置 2.H5获取GPS定位 3.拍照上传 4.提交签到 |
| UC-VS-02 |
走访轨迹查看 |
部门管理者 |
本部门有走访记录 |
1.选择员工和日期 2.系统返回签到轨迹点 3.地图展示 |
| UC-VS-03 |
走访频次统计 |
部门管理者 |
有走访数据 |
1.选择时间范围 2.展示每人对不同客户的走访次数 |
| UC-VS-04 |
通话走访关联 |
系统 |
有通话和走访记录 |
1.通话号码匹配客户库 2.关联走访记录 3.构建客户服务画像 |
| 规则 ID |
规则名称 |
详细描述 |
| R-VS-01 |
定位精度 |
GPS 定位精度要求 50 米以内, Indoor 场景回退至基站定位 |
| R-VS-02 |
签到拍照 |
每次签到必须拍 1~3 张现场照片,照片携带时间戳和 GPS 水印 |
| R-VS-03 |
签到距离校验 |
签到位置与客户库地址距离超过 500 米时标记为”位置异常”但不阻止提交 |
| R-VS-04 |
走访备注 |
客户经理可在签到时填写走访备注(文案,上限 500 字) |
| R-VS-05 |
客户库维护 |
管理者可批量导入客户信息(姓名、电话、地址),系统按电话号码关联通话记录 |
POST /api/v1/visits/check-in (H5端)
Request: {
"customer_id": "CUST_001",
"latitude": 25.4308,
"longitude": 119.0077,
"photos": ["base64_1", "base64_2"],
"remark": "客户咨询经营贷款,已介绍产品方案"
}
Response: {
"visit_id": "VIS_20260731_001",
"check_in_time": "2026-07-31T09:30:00+08:00",
"distance_to_customer_m": 120,
"status": "normal"
}
GET /api/v1/visits
?employee_id={string}
&department_id={string}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
&page={int}&page_size={int}
GET /api/v1/visits/trajectory
?employee_id={string}
&date={YYYY-MM-DD}
Response: {
"employee_name": "张三",
"date": "2026-07-31",
"points": [{
"visit_id": "VIS_20260731_001",
"customer_name": "莆田市XX商贸有限公司",
"latitude": 25.4308,
"longitude": 119.0077,
"check_in_time": "2026-07-31T09:30:00+08:00",
"photo_count": 2
}]
}
POST /api/v1/customers/batch-import
Request: {
"customers": [{
"name": "莆田市XX商贸有限公司",
"contact_person": "李总",
"phone": "13805061234",
"address": "莆田市城厢区XX路XX号",
"latitude": 25.4308,
"longitude": 119.0077
}]
}
对通话录音进行 AI 智能质检,包括关键词检测、服务规范检查、情绪识别、合规审查,自动生成质检报告。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-QA-01 |
质检规则配置 |
部门管理者/合规审计员 |
已登录管理端 |
1.创建规则组 2.设置关键词/话术模板 3.设置风险等级 4.绑定部门 |
| UC-QA-02 |
自动质检触发 |
系统(异步任务) |
录音转写已完成 |
1.检测转写完成 2.加载质检规则 3.逐条匹配关键词/话术 4.情绪分析 5.生成质检报告 |
| UC-QA-03 |
质检报告查看 |
部门管理者/合规审计员 |
质检已完成 |
1.选择时间范围/部门 2.展示质检报告列表 3.点击查看详情 4.查看风险点及对应音频片段 |
| UC-QA-04 |
风险预警通知 |
系统(定时任务) |
有高风险质检结果 |
1.扫描高风险质检 2.向合规审计员推送预警 3.记录预警处理状态 |
| 维度 ID |
维度名称 |
检测内容 |
风险等级 |
| D-QA-01 |
敏感词检测 |
违规承诺(”保本保息”“绝对没问题”)、不当用语(辱骂/威胁) |
高 |
| D-QA-02 |
服务规范 |
开场白是否标准、结束语是否规范、是否主动表明身份 |
中 |
| D-QA-03 |
情绪识别 |
客户/员工情绪波动(愤怒、焦躁),情绪值低于阈值 |
中 |
| D-QA-04 |
合规审查 |
信用卡营销话术合规性、贷款利率表述准确性、信息披露完整性 |
高 |
| D-QA-05 |
静默检测 |
通话中超过 30 秒的静默段 |
低 |
| D-QA-06 |
抢话检测 |
员工频繁打断客户说话(同一时间段双方均有语音) |
低 |
| 规则 ID |
规则名称 |
详细描述 |
| R-QA-01 |
质检覆盖率 |
选配语音质检的号码,录音转写完成后 100% 自动质检 |
| R-QA-02 |
质检时效 |
转写完成后 10 分钟内完成质检 |
| R-QA-03 |
关键词配置 |
管理者可自定义关键词库,支持正则表达式匹配 |
| R-QA-04 |
风险评级 |
每条质检结果按高/中/低三级评级,高风险立即推送预警 |
| R-QA-05 |
质检评分 |
综合各维度检测结果,给出 0-100 质检评分 |
| R-QA-06 |
申诉机制 |
客户经理可对质检结果发起申诉,管理者审核后裁决 |
POST /api/v1/qa-rules
Request: {
"rule_name": "违规承诺检测",
"department_id": "DEPT_PJRB",
"dimension": "sensitive_word",
"risk_level": "high",
"keywords": ["保本保息", "绝对没问题", "稳赚不赔"],
"regex_patterns": [".*保证.*收益.*"]
}
GET /api/v1/qa-reports
?department_id={string}
&risk_level={high|medium|low|all}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
&page={int}&page_size={int}
Response: {
"total": 45,
"items": [{
"report_id": "QA_20260731_001",
"recording_id": "REC_20260731_001",
"employee_name": "张三",
"department": "个人金融部",
"qa_score": 85,
"risk_level": "medium",
"issues": [{
"dimension": "service_standard",
"description": "开场白未主动表明身份",
"risk_level": "medium",
"audio_start_ms": 1200,
"audio_end_ms": 5800
}],
"created_at": "2026-07-31T14:45:00+08:00"
}]
}
GET /api/v1/qa-reports/{report_id}
Response: {
"report_id": "QA_20260731_001",
"qa_score": 85,
"risk_level": "medium",
"dimensions": {
"sensitive_word": {"passed": true, "details": "未检测到敏感词"},
"service_standard": {"passed": false, "details": "开场白未主动表明身份", "segments": []},
"emotion": {"passed": true, "emotion_score": 0.82, "details": "情绪正常"},
"compliance": {"passed": true, "details": "话术合规"},
"silence": {"passed": true, "max_silence_seconds": 8},
"interruption": {"passed": true, "interruption_count": 1}
}
}
基于通话记录、录音转写、走访数据等多维度信息,自动生成客观工作报告和绩效考核数据。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-RP-01 |
日报自动生成 |
系统(定时任务) |
当天有业务数据 |
1.每日 23:00 触发 2.汇总当日通话/走访 3.生成日报 4.通知管理者 |
| UC-RP-02 |
周报/月报生成 |
系统(定时任务) |
周期内有业务数据 |
1.每周一/每月1日触发 2.汇总周期数据 3.生成趋势对比 4.通知管理者 |
| UC-RP-03 |
报告查看导出 |
部门管理者/银行管理员 |
有已生成报告 |
1.选择报告类型和时间 2.查看内容 3.导出 PDF/Excel |
| UC-RP-04 |
任务纪要管理 |
客户经理 |
有通话记录 |
1.通话结束后系统提取待办 2.客户经理确认/编辑 3.设置截止日期 4.到期提醒 |
| UC-RP-05 |
绩效数据看板 |
银行管理员 |
有累计数据 |
1.选择部门/时间 2.展示 KPI 看板 3.支持下钻至个人 |
日报模板:
| 指标 |
说明 |
| 主叫次数/时长 |
当日主动外呼次数和总时长 |
| 被叫次数/时长 |
当日接听来电次数和总时长 |
| 漏话次数/回电率 |
当日漏接电话及回电情况 |
| 走访客户数 |
当日签到走访的客户数量 |
| 质检平均分 |
当日已质检通话的平均评分 |
| 风险预警数 |
当日触发的高/中风险质检数 |
| 待办任务 |
未完成的任务纪要数量 |
月报增加内容:
| 指标 |
说明 |
| 环比变化 |
与上月对比各项指标的变化百分比 |
| 部门排名 |
本人在部门内的各项指标排名 |
| 客户服务 TOP10 |
本月联系频次最高的客户列表 |
| 改进建议 |
基于质检结果的 AI 改进建议 |
GET /api/v1/reports/daily
?employee_id={string}
&department_id={string}
&date={YYYY-MM-DD}
Response: {
"date": "2026-07-31",
"employee_name": "张三",
"department": "个人金融部",
"metrics": {
"outgoing_count": 28,
"incoming_count": 12,
"outgoing_duration_min": 95,
"incoming_duration_min": 38,
"missed_count": 2,
"callback_rate": 1.0,
"visit_count": 3,
"qa_avg_score": 85,
"risk_alert_count": 0,
"pending_tasks": 5
}
}
GET /api/v1/reports/export
?report_type={daily|weekly|monthly}
&format={pdf|excel}
&employee_id={string}
&department_id={string}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
Response: binary file download
GET /api/v1/dashboard/kpi
?department_id={string}
&start_date={YYYY-MM-DD}
&end_date={YYYY-MM-DD}
Response: {
"department": "个人金融部",
"total_employees": 12,
"metrics": {
"total_calls": 1256,
"avg_calls_per_person": 104.7,
"total_visits": 89,
"avg_qa_score": 87.3,
"total_risk_alerts": 3,
"missed_callback_rate": 0.92
},
"ranking": [{
"rank": 1,
"employee_name": "张三",
"total_calls": 152,
"qa_avg_score": 92,
"visits": 12
}]
}
RBAC 权限体系 + 银行组织架构管理,支持多租户、多部门、多角色的精细化数据权限控制。
| 用例 ID |
用例名称 |
参与者 |
前置条件 |
主流程 |
| UC-AC-01 |
组织架构管理 |
银行管理员 |
已登录 |
1.创建/编辑部门 2.设置部门层级 3.分配部门管理者 |
| UC-AC-02 |
人员管理 |
银行管理员 |
组织架构已建立 |
1.添加员工 2.绑定手机号码 3.分配部门和角色 4.选择资费套餐 |
| UC-AC-03 |
号码套餐管理 |
银行管理员 |
人员已创建 |
1.查看号码列表 2.修改套餐档位 3.开通/关闭语音质检 4.统计费用 |
| UC-AC-04 |
数据权限隔离 |
系统强制执行 |
用户已登录 |
1.解析用户角色 2.按 tenant_id + department_id 过滤 3.返回授权范围数据 |
| UC-AC-05 |
操作审计 |
系统自动记录 |
用户执行操作 |
1.记录操作人/时间/动作/对象 2.存入审计日志 3.支持查询导出 |
| 功能模块 |
超级管理员 |
银行管理员 |
部门管理者 |
客户经理 |
合规审计员 |
| 租户管理 |
R/W |
- |
- |
- |
- |
| 组织架构 |
- |
R/W |
R |
- |
- |
| 人员管理 |
- |
R/W |
R |
- |
- |
| 通话记录 |
R(全部) |
R(本行) |
R(本部门) |
R(本人) |
R(本行) |
| 录音试听 |
R(全部) |
R(本行) |
R(本部门) |
R(本人) |
R(本行) |
| 走访记录 |
R(全部) |
R(本行) |
R(本部门) |
R/W(本人) |
- |
| 质检配置 |
- |
R/W |
R/W(本部门) |
- |
R/W |
| 质检报告 |
R(全部) |
R(本行) |
R(本部门) |
R(本人) |
R(本行) |
| 工作报告 |
R(全部) |
R(本行) |
R(本部门) |
R(本人) |
- |
| KPI看板 |
R(全部) |
R(本行) |
R(本部门) |
- |
- |
| 审计日志 |
R(全部) |
R(本行) |
- |
- |
R(本行) |
R = 可读,W = 可写,- = 无权限
POST /api/v1/auth/login
Request: { "username": "admin", "password": "***" }
Response: {
"token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi...",
"expires_in": 7200,
"user": {
"user_id": "U001",
"role": "bank_admin",
"tenant_id": "TENANT_PTNSRCB",
"name": "管理员"
}
}
GET /api/v1/organizations/tree
Response: {
"tenant_name": "莆田市农商行",
"departments": [{
"department_id": "DEPT_PJRB",
"name": "个人金融部",
"parent_id": null,
"manager_name": "王部长",
"employee_count": 15
}]
}
POST /api/v1/employees
Request: {
"name": "张三",
"phone_number": "18117132919",
"department_id": "DEPT_PJRB",
"role": "customer_manager",
"plan_code": "FLAGSHIP", # BASIC / PROFESSIONAL / FLAGSHIP
"qa_enabled": true
}
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Tenant │1---*│Department│1---*│ Employee │
│ (租户) │ │ (部门) │ │ (员工) │
└──────────┘ └──────────┘ └─────┬────┘
│ │
│ ┌──────────┐ │
│1--------*│ PhoneNumber│1--------1│
│ │(号码套餐) │ │
│ └─────┬────┘ │
│ │ │
│ ┌─────┴────┐ │
│1---------*│CallRecord│*---------1│
│ │(通话记录) │ │
│ └─────┬────┘ │
│ │ │
│ ┌─────┴────┐ │
│1---------*│ Recording│ │
│ │ (录音) │ │
│ └─────┬────┘ │
│ │ │
│ ┌─────┴────┐ │
│1---------*│Transcript│ │
│ │(转写文本) │ │
│ └─────┬────┘ │
│ │ │
│ ┌─────┴────┐ │
│1---------*│QAReport │ │
│(质检报告) │ │
└──────────┘ │
│
┌──────────┐ ┌──────────┐ │
│ Customer │1---*│ Visit │*---------1│
│ (客户) │ │ (走访) │ │
└──────────┘ └──────────┘ │
│
┌──────────┐ │
│MissedCall│*---------1│
│(漏话) │ │
└──────────┘ │
│
┌──────────┐ │
│ Report │*---------1│
│(工作报告) │ │
└──────────┘ │
│
┌──────────┐ │
│AuditLog │*---------1│
│(审计日志) │ │
└──────────┘
| 字段 |
类型 |
约束 |
说明 |
| tenant_id |
VARCHAR(32) |
PK |
租户唯一标识 |
| tenant_name |
VARCHAR(100) |
NOT NULL |
租户名称(如”莆田市农商行”) |
| contact_name |
VARCHAR(50) |
|
联系人 |
| contact_phone |
VARCHAR(20) |
|
联系电话 |
| status |
VARCHAR(20) |
DEFAULT ‘active’ |
状态:active/suspended |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| updated_at |
TIMESTAMP |
|
更新时间 |
| 字段 |
类型 |
约束 |
说明 |
| department_id |
VARCHAR(32) |
PK |
部门唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| name |
VARCHAR(100) |
NOT NULL |
部门名称 |
| parent_id |
VARCHAR(32) |
FK |
上级部门ID(null=顶级) |
| manager_id |
VARCHAR(32) |
FK |
部门管理者员工ID |
| sort_order |
INT |
DEFAULT 0 |
排序序号 |
| status |
VARCHAR(20) |
DEFAULT ‘active’ |
状态 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| employee_id |
VARCHAR(32) |
PK |
员工唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| department_id |
VARCHAR(32) |
FK, NOT NULL |
所属部门 |
| name |
VARCHAR(50) |
NOT NULL |
姓名 |
| phone_number |
VARCHAR(20) |
NOT NULL |
手机号码 |
| role |
VARCHAR(30) |
NOT NULL |
角色:bank_admin/dept_manager/customer_manager/compliance_auditor |
| employee_no |
VARCHAR(20) |
|
工号 |
| status |
VARCHAR(20) |
DEFAULT ‘active’ |
状态:active/inactive |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| updated_at |
TIMESTAMP |
|
更新时间 |
唯一约束:(tenant_id, phone_number) 联合唯一
| 字段 |
类型 |
约束 |
说明 |
| plan_id |
VARCHAR(32) |
PK |
套餐记录ID |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| employee_id |
VARCHAR(32) |
FK, NOT NULL |
关联员工 |
| phone_number |
VARCHAR(20) |
NOT NULL |
手机号码 |
| plan_code |
VARCHAR(20) |
NOT NULL |
套餐代码:BASIC(62元)/PROFESSIONAL(85元)/FLAGSHIP(100元) |
| monthly_fee |
DECIMAL(10,2) |
NOT NULL |
月费(元) |
| recording_quota_min |
INT |
NOT NULL |
每月录音额度(分钟) |
| qa_enabled |
BOOLEAN |
DEFAULT false |
是否开通语音质检 |
| qa_monthly_fee |
DECIMAL(10,2) |
|
质检月费 |
| effective_from |
DATE |
NOT NULL |
生效日期 |
| effective_to |
DATE |
|
失效日期(null=长期有效) |
| status |
VARCHAR(20) |
DEFAULT ‘active’ |
状态 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| call_id |
VARCHAR(64) |
PK |
通话唯一标识(电信侧生成) |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| employee_id |
VARCHAR(32) |
FK |
关联员工(按号码匹配) |
| phone_number |
VARCHAR(20) |
NOT NULL |
客户经理号码 |
| direction |
VARCHAR(10) |
NOT NULL |
方向:incoming/outgoing |
| peer_number |
VARCHAR(20) |
NOT NULL |
对方号码 |
| start_time |
TIMESTAMP |
NOT NULL |
通话开始时间 |
| end_time |
TIMESTAMP |
|
通话结束时间 |
| duration_seconds |
INT |
NOT NULL DEFAULT 0 |
通话时长(秒) |
| has_recording |
BOOLEAN |
DEFAULT false |
是否有录音 |
| recording_id |
VARCHAR(64) |
FK |
关联录音ID |
| missed_call_id |
VARCHAR(64) |
FK |
关联漏话ID(如果是漏话回电) |
| created_at |
TIMESTAMP |
NOT NULL |
记录创建时间 |
索引:(tenant_id, phone_number, start_time)、(tenant_id, employee_id, start_time)、(tenant_id, peer_number)
| 字段 |
类型 |
约束 |
说明 |
| recording_id |
VARCHAR(64) |
PK |
录音唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| call_id |
VARCHAR(64) |
FK, NOT NULL |
关联通话ID |
| employee_id |
VARCHAR(32) |
FK |
关联员工 |
| file_path |
VARCHAR(500) |
NOT NULL |
对象存储路径 |
| file_format |
VARCHAR(10) |
DEFAULT ‘mp3’ |
文件格式 |
| file_size_bytes |
BIGINT |
|
文件大小 |
| duration_seconds |
INT |
NOT NULL |
录音时长 |
| transcript_status |
VARCHAR(20) |
DEFAULT ‘pending’ |
转写状态:pending/processing/completed/failed |
| transcript_id |
VARCHAR(64) |
FK |
关联转写ID |
| retention_until |
DATE |
NOT NULL |
留存截止日期 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| transcript_id |
VARCHAR(64) |
PK |
转写唯一标识 |
| recording_id |
VARCHAR(64) |
FK, NOT NULL |
关联录音 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| full_text |
TEXT |
|
完整转写文本 |
| segments |
JSONB |
|
分段数据(含时间戳/说话人/文本) |
| asr_engine |
VARCHAR(50) |
|
ASR 引擎标识 |
| accuracy_score |
DECIMAL(4,2) |
|
转写准确率评分 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
索引:Elasticsearch 全文索引 on full_text
| 字段 |
类型 |
约束 |
说明 |
| report_id |
VARCHAR(64) |
PK |
质检报告唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| recording_id |
VARCHAR(64) |
FK, NOT NULL |
关联录音 |
| employee_id |
VARCHAR(32) |
FK |
关联员工 |
| department_id |
VARCHAR(32) |
FK |
关联部门 |
| qa_score |
DECIMAL(5,2) |
NOT NULL |
质检评分(0-100) |
| risk_level |
VARCHAR(10) |
NOT NULL |
风险等级:high/medium/low/none |
| issues |
JSONB |
|
检出问题列表(含维度/描述/风险等级/音频时间戳) |
| appeal_status |
VARCHAR(20) |
DEFAULT ‘none’ |
申诉状态:none/pending/approved/rejected |
| created_at |
TIMESTAMP |
NOT NULL |
质检时间 |
索引:(tenant_id, department_id, risk_level, created_at)、(tenant_id, employee_id, created_at)
| 字段 |
类型 |
约束 |
说明 |
| missed_call_id |
VARCHAR(64) |
PK |
漏话唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| employee_id |
VARCHAR(32) |
FK |
关联员工 |
| phone_number |
VARCHAR(20) |
NOT NULL |
客户经理号码 |
| caller_number |
VARCHAR(20) |
NOT NULL |
来电号码 |
| call_time |
TIMESTAMP |
NOT NULL |
漏话时间 |
| status |
VARCHAR(20) |
DEFAULT ‘pending’ |
状态:pending/callback_done/expired |
| callback_call_id |
VARCHAR(64) |
FK |
回电通话ID |
| callback_time |
TIMESTAMP |
|
回电时间 |
| response_minutes |
DECIMAL(8,2) |
|
响应时长(分钟) |
| reminder_sent |
BOOLEAN |
DEFAULT false |
是否已发送提醒 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
索引:(tenant_id, phone_number, status, call_time)、(tenant_id, caller_number, call_time)
| 字段 |
类型 |
约束 |
说明 |
| visit_id |
VARCHAR(64) |
PK |
走访唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| employee_id |
VARCHAR(32) |
FK, NOT NULL |
走访员工 |
| customer_id |
VARCHAR(64) |
FK |
关联客户ID |
| customer_name |
VARCHAR(100) |
|
客户名称(冗余) |
| latitude |
DECIMAL(10,6) |
NOT NULL |
签到纬度 |
| longitude |
DECIMAL(10,6) |
NOT NULL |
签到经度 |
| distance_to_customer_m |
DECIMAL(8,2) |
|
与客户地址距离(米) |
| location_status |
VARCHAR(20) |
DEFAULT ‘normal’ |
位置状态:normal/abnormal |
| photo_urls |
JSONB |
|
照片URL列表 |
| remark |
VARCHAR(500) |
|
走访备注 |
| check_in_time |
TIMESTAMP |
NOT NULL |
签到时间 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| customer_id |
VARCHAR(64) |
PK |
客户唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| name |
VARCHAR(100) |
NOT NULL |
客户名称 |
| contact_person |
VARCHAR(50) |
|
联系人 |
| phone |
VARCHAR(20) |
NOT NULL |
联系电话 |
| address |
VARCHAR(200) |
|
地址 |
| latitude |
DECIMAL(10,6) |
|
纬度 |
| longitude |
DECIMAL(10,6) |
|
经度 |
| customer_type |
VARCHAR(20) |
|
客户类型:enterprise/personal |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| rule_id |
VARCHAR(64) |
PK |
规则唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| department_id |
VARCHAR(32) |
FK |
适用部门(null=全行) |
| rule_name |
VARCHAR(100) |
NOT NULL |
规则名称 |
| dimension |
VARCHAR(30) |
NOT NULL |
质检维度 |
| risk_level |
VARCHAR(10) |
NOT NULL |
风险等级 |
| keywords |
JSONB |
|
关键词列表 |
| regex_patterns |
JSONB |
|
正则表达式列表 |
| speech_templates |
JSONB |
|
话术模板 |
| enabled |
BOOLEAN |
DEFAULT true |
是否启用 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| updated_at |
TIMESTAMP |
|
更新时间 |
| 字段 |
类型 |
约束 |
说明 |
| task_id |
VARCHAR(64) |
PK |
任务唯一标识 |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| employee_id |
VARCHAR(32) |
FK, NOT NULL |
负责人 |
| call_id |
VARCHAR(64) |
FK |
关联通话ID |
| title |
VARCHAR(200) |
NOT NULL |
任务标题 |
| content |
TEXT |
|
任务详情 |
| due_date |
DATE |
|
截止日期 |
| status |
VARCHAR(20) |
DEFAULT ‘pending’ |
状态:pending/completed/overdue |
| ai_extracted |
BOOLEAN |
DEFAULT false |
是否AI自动提取 |
| completed_at |
TIMESTAMP |
|
完成时间 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 字段 |
类型 |
约束 |
说明 |
| log_id |
BIGSERIAL |
PK |
日志ID |
| tenant_id |
VARCHAR(32) |
NOT NULL |
所属租户 |
| user_id |
VARCHAR(32) |
NOT NULL |
操作人ID |
| user_name |
VARCHAR(50) |
|
操作人姓名 |
| action |
VARCHAR(50) |
NOT NULL |
动作:login/logout/view/create/update/delete/export |
| resource_type |
VARCHAR(30) |
|
资源类型 |
| resource_id |
VARCHAR(64) |
|
资源ID |
| detail |
JSONB |
|
详细信息 |
| ip_address |
VARCHAR(45) |
|
IP地址 |
| created_at |
TIMESTAMP |
NOT NULL |
操作时间 |
索引:(tenant_id, created_at)、(tenant_id, user_id, created_at)
| 字段 |
类型 |
约束 |
说明 |
| threshold_id |
VARCHAR(64) |
PK |
配置ID |
| tenant_id |
VARCHAR(32) |
FK, NOT NULL |
所属租户 |
| department_id |
VARCHAR(32) |
FK |
适用部门 |
| role |
VARCHAR(30) |
|
适用角色 |
| min_daily_outgoing |
INT |
|
每日最低主叫次数 |
| min_daily_total |
INT |
|
每日最低总通话次数 |
| enabled |
BOOLEAN |
DEFAULT true |
是否启用 |
| created_at |
TIMESTAMP |
NOT NULL |
创建时间 |
| 指标 |
要求 |
说明 |
| 话单回调响应 |
≤ 200ms (P99) |
电信侧推送话单后,系统接收并入库的响应时间 |
| API 查询响应 |
≤ 500ms (P95) |
常规查询接口的响应时间 |
| 录音转写时效 |
≤ 5 分钟 |
从录音入库到转写完成 |
| AI 质检时效 |
≤ 10 分钟 |
从转写完成到质检报告生成 |
| 漏话提醒时效 |
≤ 1 分钟 |
从漏话发生到短信发出 |
| 日报生成时效 |
每日 23:30 前完成 |
每日定时任务 |
| 并发能力 |
≥ 500 并发用户 |
管理端同时在线用户数 |
| 数据量支撑 |
单租户 5000 号码、日均 10 万通通话 |
满足大型农商行需求 |
| 需求 ID |
需求名称 |
详细描述 |
| NFR-SEC-01 |
传输加密 |
全站 HTTPS (TLS 1.2+),禁止明文 HTTP |
| NFR-SEC-02 |
存储加密 |
录音文件对象存储服务端加密 (SSE-S3) |
| NFR-SEC-03 |
数据库加密 |
数据库连接使用 SSL,敏感字段(手机号)脱敏存储 |
| NFR-SEC-04 |
等保合规 |
系统部署符合等保三级要求 |
| NFR-SEC-05 |
访问控制 |
JWT Token 鉴权,Token 有效期 2 小时,支持刷新 |
| NFR-SEC-06 |
SQL 注入防护 |
ORM 参数化查询,禁止拼接 SQL |
| NFR-SEC-07 |
XSS 防护 |
前端输入校验 + 后端输出编码 |
| NFR-SEC-08 |
审计追溯 |
所有关键操作(录音试听/数据导出/配置变更)记录审计日志 |
| NFR-SEC-09 |
数据脱敏 |
非授权角色查看手机号时脱敏显示(如 138****1234) |
| NFR-SEC-10 |
密码安全 |
密码 bcrypt 加盐哈希,长度 ≥ 8 位,含大小写+数字+特殊字符 |
| 指标 |
要求 |
| 系统可用性 |
≥ 99.9%(月度,计划维护除外) |
| 故障恢复 |
RTO ≤ 4 小时,RPO ≤ 15 分钟 |
| 数据备份 |
数据库每日全量备份 + 实时 WAL 归档;录音文件跨可用区复制 |
| 监控告警 |
Prometheus + Grafana 全指标监控,异常 5 分钟内告警 |
| 项目 |
要求 |
| Web 浏览器 |
Chrome 90+、Edge 90+、Firefox 88+、Safari 14+ |
| H5 移动端 |
iOS 14+、Android 9+ 主流浏览器 |
| 屏幕分辨率 |
Web 端最低 1366x768,推荐 1920x1080 |
| 项目 |
要求 |
| 水平扩展 |
业务服务支持无状态水平扩展,通过负载均衡分发 |
| 数据分片 |
超大规模租户支持按 tenant_id 数据分片 |
| 插件化质检 |
质检规则引擎支持热加载,无需重启服务 |
| 开放 API |
提供标准化 REST API,支持银行二次开发和数据对接 |
POST /api/v1/webhooks/telecom/call-event
Headers: X-Telecom-Signature: {HMAC-SHA256}
Body: {
"event_type": "call_completed",
"call_id": "CL20260731143052_18117132919",
"tenant_id": "TENANT_PTNSRCB",
"phone_number": "18117132919",
"call_direction": "outgoing",
"callee_number": "13805061234",
"start_time": "2026-07-31T14:30:52+08:00",
"end_time": "2026-07-31T14:33:28+08:00",
"duration_seconds": 156,
"connect_status": "connected" # connected/missed/busy/failed
}
Response: { "code": 0, "message": "ok" }
POST /api/v1/webhooks/telecom/recording-ready
Headers: X-Telecom-Signature: {HMAC-SHA256}
Body: {
"event_type": "recording_ready",
"call_id": "CL20260731143052_18117132919",
"tenant_id": "TENANT_PTNSRCB",
"recording_url": "https://oss.ctyun.cn/rec/CL20260731143052_18117132919.wav",
"duration_seconds": 156,
"file_size_bytes": 2512000
}
Response: { "code": 0, "message": "ok" }
POST {ASR_SERVICE_URL}/api/v1/asr
Headers: Authorization: Bearer {token}
Body: {
"audio_url": "https://oss.ctyun.cn/rec/CL20260731143052.mp3",
"language": "zh-CN",
"dialect": "minnan", # 闽南语自适应
"speaker_diarization": true, # 说话人分离
"enable_punctuation": true
}
Response: {
"task_id": "ASR_TASK_001",
"status": "processing"
}
# 异步回调
POST /api/v1/webhooks/asr/result
Body: {
"task_id": "ASR_TASK_001",
"status": "completed",
"full_text": "您好,我是莆田农商行的...",
"segments": [{ "start_ms": 0, "end_ms": 3200, "speaker": "agent", "text": "..." }],
"accuracy_score": 0.88
}
POST {NLP_SERVICE_URL}/api/v1/emotion-analysis
Body: {
"audio_url": "https://oss.ctyun.cn/rec/CL20260731143052.mp3",
"segments": [{ "start_ms": 0, "end_ms": 3200, "speaker": "agent" }]
}
Response: {
"emotions": [{
"segment_index": 0,
"speaker": "agent",
"emotion": "neutral",
"intensity": 0.5,
"valence": 0.7 # -1(消极) ~ 1(积极)
}]
}
POST {SMS_SERVICE_URL}/api/v1/sms/send
Body: {
"phone_number": "18117132919",
"template_code": "MISSED_CALL_ALERT",
"template_params": {
"caller_number": "13805061234",
"call_time": "10:15"
}
}
Response: { "code": 0, "message_id": "MSG_001" }
遵循 Superpowers TDD 方法论,按模块分阶段实施:
| 任务 |
内容 |
交付物 |
| 1.1 项目脚手架 |
FastAPI + SQLAlchemy + Docker |
可运行的项目骨架 |
| 1.2 多租户中间件 |
tenant_id 注入与隔离 |
中间件 + 单元测试 |
| 1.3 JWT 鉴权 |
登录/刷新/权限校验 |
auth 模块 + 测试 |
| 1.4 组织架构管理 |
租户/部门/员工 CRUD |
organization 模块 + 测试 |
| 1.5 号码套餐管理 |
套餐配置/费用计算 |
plan 模块 + 测试 |
| 任务 |
内容 |
交付物 |
| 2.1 电信回调接入 |
话单/录音 Webhook |
webhook 模块 + 签名验证测试 |
| 2.2 话单入库与去重 |
幂等处理 + 统计缓存 |
call_record 模块 + 并发测试 |
| 2.3 录音文件管理 |
下载/转码/存储/清理 |
recording 模块 + 测试 |
| 2.4 通话查询与统计 |
多维度查询/报表 |
query 模块 + 性能测试 |
| 2.5 阈值预警 |
定时任务 + 通知 |
threshold 模块 + 测试 |
| 任务 |
内容 |
交付物 |
| 3.1 漏话识别引擎 |
判定/去重/提醒 |
missed_call 模块 + 测试 |
| 3.2 回电追踪 |
自动关联/响应时长 |
callback 模块 + 测试 |
| 3.3 H5 走访签到 |
GPS/拍照/提交 |
visit_h5 模块 + 测试 |
| 3.4 客户库管理 |
批量导入/关联 |
customer 模块 + 测试 |
| 3.5 轨迹与画像 |
轨迹回放/通话关联 |
trajectory 模块 + 测试 |
| 任务 |
内容 |
交付物 |
| 4.1 ASR 转写对接 |
异步调用/回调/重试 |
asr 模块 + 集成测试 |
| 4.2 转写全文索引 |
Elasticsearch 索引/检索 |
search 模块 + 测试 |
| 4.3 质检规则引擎 |
规则配置/热加载/匹配 |
qa_rule 模块 + 测试 |
| 4.4 多维度质检 |
敏感词/规范/情绪/合规/静默/抢话 |
qa_engine 模块 + 测试 |
| 4.5 质检报告与预警 |
报告生成/风险推送 |
qa_report 模块 + 测试 |
| 任务 |
内容 |
交付物 |
| 5.1 日报/周报/月报 |
定时生成/模板渲染 |
report 模块 + 测试 |
| 5.2 PDF/Excel 导出 |
报告导出 |
export 模块 + 测试 |
| 5.3 KPI 看板 |
数据可视化/排名 |
dashboard 模块 + 测试 |
| 5.4 任务纪要 |
AI 提取/管理/提醒 |
task_note 模块 + 测试 |
| 任务 |
内容 |
交付物 |
| 6.1 Web 管理端 |
Vue3 全模块前端 |
Web 应用 |
| 6.2 H5 移动端 |
走访签到/个人数据 |
H5 应用 |
| 6.3 审计日志 |
全链路审计 |
audit 模块 + 测试 |
| 6.4 集成测试 |
端到端测试 |
E2E 测试用例 |
| 6.5 压力测试 |
性能/并发验证 |
压测报告 |
| 验收项 |
验收标准 |
| 话单采集 |
100% 自动接收电信推送的话单,无遗漏 |
| 录音管理 |
录音入库成功率 ≥ 99.5%,支持在线试听和下载 |
| AI 转写 |
转写准确率 ≥ 85%,转写时效 ≤ 5 分钟 |
| 漏话提醒 |
漏话识别准确率 100%,提醒时效 ≤ 1 分钟 |
| 走访管理 |
GPS 定位精度 ≤ 50 米,签到照片带水印 |
| AI 质检 |
质检覆盖率 100%,敏感词检出准确率 ≥ 95% |
| 工作报告 |
日报 23:30 前自动生成,数据准确率 100% |
| 权限隔离 |
越权访问拦截率 100%,数据脱敏正确率 100% |
| 指标 |
验收标准 |
| API 响应 |
P95 ≤ 500ms,P99 ≤ 1s |
| 并发 |
500 并发用户下无错误 |
| 转写时效 |
P95 ≤ 5 分钟 |
| 质检时效 |
P95 ≤ 10 分钟 |
| 系统可用性 |
月度 ≥ 99.9% |
| 指标 |
验收标准 |
| 传输安全 |
全站 HTTPS,SSL 评级 A+ |
| 数据隔离 |
租户间数据零泄漏 |
| 审计完整性 |
关键操作 100% 记录审计日志 |
| 等保合规 |
通过等保三级测评 |
| 套餐代码 |
套餐名称 |
月费(元) |
录音额度(分钟/月) |
核心功能 |
质检月费(元) |
| BASIC |
基础版 |
62 |
1000 |
电话量自动管理+漏话分析 |
+40 |
| PROFESSIONAL |
专业版 |
85 |
3000 |
电话自动录音+客户走访管理 |
+65 |
| FLAGSHIP |
旗舰版 |
100 |
5000 |
客观工作报告+任务纪要管理 |
+100 |
| 代码 |
部门名称 |
推荐套餐 |
| DEPT_PJRB |
个人金融部 |
旗舰版 + 质检 |
| DEPT_CARD |
信用卡部 |
专业版 + 质检 |
| DEPT_CREDIT |
信贷审核部 |
旗舰版 + 质检 |
| DEPT_INCLUSIVE |
普惠金融部 |
专业版 |
| DEPT_CHANNEL |
综合部(渠道部) |
基础版 |
| DEPT_COMPLIANCE |
合规部(风控部) |
专业版 |
| 术语 |
说明 |
| 服务接触 |
客户经理与客户之间的每一次沟通互动(电话/走访) |
| 话单 |
电信网络侧生成的通话记录数据 |
| ASR |
Automatic Speech Recognition,自动语音识别(转写) |
| 说话人分离 |
从音频中区分不同说话人(客户经理 vs 客户) |
| RBAC |
Role-Based Access Control,基于角色的访问控制 |
| RTO |
Recovery Time Objective,故障恢复时间目标 |
| RPO |
Recovery Point Objective,故障恢复数据点目标 |
| 等保三级 |
信息系统安全等级保护第三级 |
AI生成