Call Center 完整案例
本节演示搭建一个完整的客服中心,包含 IVR、ACD 排队、技能组路由、监听和满意度评价。
场景描述
公司:某电商客服中心,50 个坐席,3 个技能组
技能组:
| 组 | 坐席数 | 技能 | 职责 |
|---|---|---|---|
| sales | 20 | sales, chinese | 售前咨询 |
| support | 20 | support, technical | 售后技术支持 |
| vip | 10 | vip, sales, support, english | VIP 客户 |
需求:
- 400 热线接入,先播放 IVR 导航
- 按 1 进入售前,按 2 进入售后
- VIP 客户优先路由到 VIP 组
- 支持 supervisor 监听/密语/强插
- 通话结束后自动 CSAT 评价
Step 1:数据库
mysql -u root -p <<EOF
CREATE DATABASE rustpbx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'rustpbx'@'%' IDENTIFIED BY 'CcP@ss2026';
GRANT ALL ON rustpbx.* TO 'rustpbx'@'%';
FLUSH PRIVILEGES;
EOF
Step 2:config.toml
http_addr = "0.0.0.0:8080"
database_url = "mysql://rustpbx:CcP@ss2026@dbhost:3306/rustpbx"
external_ip = "203.0.113.10"
[proxy]
addr = "0.0.0.0"
udp_port = 5060
modules = ["acl", "auth", "registrar", "call", "presence"]
media_proxy = "auto"
addons = ["cc"]
[proxy.cc]
autonomous_enabled = true
heartbeat_interval_secs = 5
heartbeat_timeout_count = 3
blind_transfer_enabled = true
consult_timeout_secs = 30
conference_on_transfer = true
voicemail_extension = "*97"
ivr_extension = "ivr"
[[proxy.cc.phone.break_types]]
id = "lunch"
label_zh = "午休"
label_en = "Lunch"
[[proxy.cc.phone.break_types]]
id = "training"
label_zh = "培训"
label_en = "Training"
[[proxy.cc.phone.break_types]]
id = "meeting"
label_zh = "会议"
label_en = "Meeting"
[console]
session_secret = "cc-console-secret-2026"
Step 3:运营商中继
config/trunks/carrier.toml:
[[trunk]]
name = "carrier-inbound"
direction = "inbound"
inbound_hosts = ["198.51.100.10"]
codec = ["pcmu", "pcma"]
max_calls = 100
Step 4:创建分机
在控制台 Extensions 中批量创建 50 个分机(1001-1050):
- 密码随机生成
- 注册到 RustPBX
Step 5:创建技能组
Call Center → 技能组 → 新建:
| ID | 名称 | 技能 |
|---|---|---|
| sales | 售前组 | sales, chinese |
| support | 售后组 | support, technical |
| vip | VIP 组 | vip, sales, support, english |
或创建 config/cc/skill_groups.toml:
[[skill_group]]
id = "sales"
name = "售前组"
skills = ["sales", "chinese"]
[[skill_group]]
id = "support"
name = "售后组"
skills = ["support", "technical"]
[[skill_group]]
id = "vip"
name = "VIP 组"
skills = ["vip", "sales", "support", "english"]
Step 6:创建坐席
Call Center → 坐席 → 批量创建:
| 坐席 ID | 分机 | 技能组 | 最大并发 |
|---|---|---|---|
| agent-001 ~ agent-020 | 1001-1020 | sales | 1 |
| agent-021 ~ agent-040 | 1021-1040 | support | 1 |
| agent-041 ~ agent-050 | 1041-1050 | vip | 2 |
Step 7:配置队列
config/queue/sales_queue.toml:
[[queue]]
name = "sales-queue"
strategy = "parallel"
max_wait_secs = 300
max_size = 50
moh = "default"
[queue.agent_match]
skill_group = "sales"
[queue.no_answer]
action = "voicemail"
config/queue/support_queue.toml:
[[queue]]
name = "support-queue"
strategy = "parallel"
max_wait_secs = 300
max_size = 50
moh = "default"
[queue.agent_match]
skill_group = "support"
[queue.no_answer]
action = "voicemail"
config/queue/vip_queue.toml:
[[queue]]
name = "vip-queue"
strategy = "parallel"
max_wait_secs = 60
max_size = 20
moh = "default"
[queue.agent_match]
skill_group = "vip"
[queue.no_answer]
action = "fallback_skill"
fallback_skill_group = "sales"
Step 8:配置 IVR
使用 IVR Editor 或手动创建 IVR 配置:
config/ivr/main_ivr.toml(简化版):
[[ivr]]
name = "main-ivr"
greeting = "welcome"
timeout = 10
max_retries = 3
[[ivr.menu]]
key = "1"
action = "queue"
target = "sales-queue"
[[ivr.menu]]
key = "2"
action = "queue"
target = "support-queue"
[[ivr.menu]]
key = "0"
action = "queue"
target = "vip-queue"
Step 9:路由配置
config/routes/inbound.toml:
[[route]]
name = "400-hotline"
action = "application"
application = "ivr:main-ivr"
[route.match]
to_user = "^4001234567$"
Step 10:ACD 策略
通过控制台 Call Center → ACD 配置:
[acd]
enabled = true
default_policy = "default"
[acd.policies.default]
name = "default"
[acd.policies.default.strategy]
strategy_type = "longest_idle"
max_concurrent_calls = 1
[acd.policies.default.priority]
wait_time_weight = 1.5
fifo_within_same_priority = true
[acd.policies.default.priority.vip_bonus]
vip = 100
[acd.policies.default.overflow]
triggers = [
{ type = "timeout", value = 120, action = "overflow" },
{ type = "queue_length", value = 50, action = "overflow" },
]
chain = ["voicemail"]
Step 11:启动
docker run -d --name cc-pbx \
-v $(pwd)/config.toml:/app/config.toml \
-v $(pwd)/config:/app/config \
-p 8080:8080 -p 5060:5060/udp \
docker.cnb.cool/miuda.ai/rustpbx:latest
Step 12:验证
12.1 坐席上线
坐席访问 /cc/phone,使用分机号登录,状态切换到 空闲。
12.2 测试呼入
拨打 400 热线:
- 听到 IVR 欢迎语
- 按 1 → 进入 sales-queue
- ACD 分配空闲坐席 → 坐席振铃 → 接听
12.3 测试监听
管理员在 Call Center → 实时监控 中找到活跃通话,点击 监听。
12.4 测试 CSAT
通话结束 → 坐席挂断 → 客户听到评价提示 → 按键评分 → CDR 记录评分
12.5 测试 VIP 路由
VIP 客户拨打 400 → 按 0 → 进入 vip-queue → 优先级加分(+100)→ 优先于普通排队
Step 13:日常运维
| 操作 | 频率 | 位置 |
|---|---|---|
| 检查 Dashboard | 每天 | CC → Dashboard |
| 查看 SLA | 每天 | CC → 实时监控 |
| 审查告警 | 实时 | CC → 告警 |
| 坐席报表 | 每周 | CC → 报表 |
| 通话报表 | 每周 | CC → 报表 |
| CSAT 分析 | 每月 | CC → 报表 |
| 技能组调整 | 按需 | CC → 技能组 |