1. 媒体引擎全面重构:更快、更稳、更省
0.5.0 把媒体桥接、转码、混音、录音统一到全新引擎上:
- 呼叫建立时延 ~6.4 ms(端到端),较上一代媒体层快 2.7 倍;
- 同编解码通话走零拷贝 fast-path 中继,单路仅 ~0.14% 核 / ~0.57 MB;
- WebRTC 与传统 SIP/RTP 互通是原生能力:800 路跨传输中继 0% 丢包,500 路 Opus↔PCMU 实时转码同样 0% 丢包;
- 18,000 通电话压力下内存平坦无泄漏,全程无序列/时间戳跳变——没有音频毛刺。
2. 5000 路并发全录音压测:0% 丢包,不到 4 核
这不是实验室数字,是真实场景(CPS=200 呼叫风暴 + 全程立体声录音 + MySQL CDR)的完整回归:
| 阶段 | rustpbx CPU | MySQL QPS | 说明 |
|---|---|---|---|
| 起呼 — 200 CPS INVITE 风暴 | 280–380% | 2–6 | 认证与分机查询全部命中缓存 |
| 稳态 — 4,943 路并发,全部录音 | 380–390% (≈3.9 核) | 2–4 | 录音单路成本仅 +0.13% 核 / +0.13 MB |
| 拆链 — ~5k BYE/CDR 突发(~90 s) | 递减 | 峰值 277 | 4980 个立体声 WAV(4.4 GB)零丢弃 |
完成率 4943/5000 接听、100% 进展、0.00% 丢包,任务与话务对象全部回收,无泄漏。通话进行时数据库几乎空闲——容量规划简单到可以按 每路录音 ≈ 0.08 核 估算,线性扩展,16 核机器理论可扛 16000+ 路并发。
3. 队列与呼叫中心能力进入社区版
排队/ACD 是社区核心能力,0.5.0 补齐了生产级呼叫中心的最后几块拼图:
- 技能组路由与升级策略(escalation plan):按技能匹配坐席,等待超时自动升级;
- 并发拨打:多个坐席同振,先接先得,杜绝坐席漏接;
- 主管四件套:
listen(监听)/whisper(耳语)/barge(强插)/takeover(接管),全程走 RWI 一条命令; - 坐席签入签出、话后处理(wrapup)、排队轨迹追踪一应俱全。
4. RWI 实时控制面进化:这是给 Voice Agent 的遥控器
RWI 是 RustPBX 的实时控制协议——JSON over WebSocket,延续了 Asterisk AMI 的 action/event 模型,但去掉了所有历史包袱。0.5.0 中它覆盖了更完整的通话生命周期:
- 早期媒体即可录音(
record.start支持媒体阶段启动,含回铃音阶段); - 盲转 REFER 的 B2BUA 兜底:对端不支持 REFER 时自动降级为桥接转接,转移不再丢通话;
- 跨会话主管接管、双向 PCM 实时音频流(
voip_bridge)、会议create/add/remove/mute/destroy命令族。
配合 HTTP Router 的入呼 webhook,一套接口完成"接听、放音、转人工、录音、监控"全流程。
5. 实时转写与预测外呼:AI 场景的一等公民
- 实时转写 SSE:
GET /cc/calls/{call_id}/transcript,主/被叫双路独立 ASR 流,采用 Deepgram 兼容流式协议(16 kHz PCM / 20ms 帧);懒启动设计——有人订阅才启动,无人订阅自动停止,不改变媒体路径,与录音、监听和平共处; - 离线转写:本地 SenseVoice 引擎,通话结束即出全文记录,数据不出内网;
- 预测外呼 SSE:
POST /ami/v1/outbound/dial一个 HTTP 请求发起呼叫,标准 RWI 事件(created → ringing → answered → bridged)通过 SSE 实时回流,on_answer可直接挂接后续动作。
ASR 结果、DTMF、通话状态事件同步推送——你的语音机器人只需要一个 WebSocket 连接。
传统 PBX 该有的底座,一样不少
RustPBX 不是只会跑 AI 的玩具——作为一台可以接生产话务的 PBX,基础功全部到位:
路由表与中继管理
- 静态路由规则引擎:正则匹配、号码改写、按优先级排序,Web 控制台可视化编辑,0.5.0 新增路由策略栈视图与运行时排序调整;
- SIP 中继(Trunk)完整管理:注册型/对等型中继、健康检查、故障自动切换、自定义 SIP 头透传,多中继负载均衡;
- 静态路由打不了的复杂决策,自动回落到 HTTP 动态路由(
fallback_to_static双向兜底)。
IVR 引擎
- 内置 IVR 流程引擎:DTMF 菜单分支、放音收号、转接动作用统一 ActionNode 协议描述,步骤式(step mode)流程可以交给外部 Provider 逐步决策——你的 Python 服务就能当 IVR 大脑;
- IVR Exec:通话进行中随时插入 IVR 流程,播完自动返回原通话;
- 会话级 IVR Fallback:流程异常自动接管播报,TTS 音频缺失自动回退,不会让用户听到死寂。
呼叫转移
- 盲转、协商转(attended)原生支持;对端不支持 REFER 时自动降级为 B2BUA 桥接转接,转移永不丢通话;
- 队列转接携带业务参数(UUI/自定义头),坐席接手时上下文不丢。
安全配置
- ACL 访问控制:内联规则 + 规则文件目录双模式,支持热更新;
- DoS 防护:CPS(每秒呼叫数)限流、并发通话数上限、SIP worker 线程隔离,恶意洪水打不穿信令面;
- URI 合法性校验、in-dialog 认证缓存、SBC/可信代理链支持(X-Forwarded-For 式的多跳场景);
- TLS/SRTP + ACME 自动证书、RBAC 权限体系、AMI API IP 白名单、
/metrics端点 Bearer Token 保护。
数据库与存储:一行 URL,录音直传 S3
- SQLite(默认,零依赖起步)/ PostgreSQL / MySQL 三选一,改一行
database_url即完成切换;话单库还可与主库分离,话务高峰互不干扰——实测 5000 路并发全录音场景数据库稳态 QPS 仅 2–4; - 录音默认就能直传 S3:
type = "s3"通话结束自动上传任意 S3 兼容对象存储,本地先落盘、上传确认成功才清理,失败自动留痕标记,网络抖动不丢录音;CDR JSON、SIP 信令 JSONL 同样支持直传 S3/HTTP——一个 bucket 收齐全部话务数据; - 录音策略精细可配:文件名模板(
{caller}/{callee}/{timestamp})、按方向与主被叫黑白名单决定录谁不录谁(比如 911 免录)、回铃阶段即可开录; - 节点无需共享存储:录音和话单都进对象存储,多副本部署天生无状态。
TLS 与证书:全栈加密开箱即用
- 管理台/API/Webhook 内置 HTTPS 监听,配一对证书路径即可;
- SIP 加密(SIPS,TLS 5061)与 WebRTC(WSS)原生支持,出站连接可校验对端证书链;
- ACME 自动证书:Let's Encrypt 自动签发与续期,certbot 定时任务可以删了。
集群:多节点组网,配置即声明
[cluster]配置里列出所有节点即完成组网;- 会话注册表实时回答"这通电话在哪个节点",控制请求自动转发到所属节点,不必关心话务落在谁身上;
- 心跳保活 + 宕机节点会话回收窗口,节点掉线话务可重新调度;
- 集群级配置一键下发刷新全部节点,控制台日志查看器可直接切换远端节点。
线上日志与诊断:不用 SSH 的排障
- 控制台内置日志查看器:实时跟随新输出、按节点切换、行数选项与一键复制;日志文件按天/小时自动轮转;
- 诊断工具箱:活跃对话一览、中继测试(发起真实测试呼叫 / OPTIONS 探测)、路由评估器(输入主被叫号码立即预览路由决策结果,改路由前先演练)、分机注册定位查询;
- AMI API 健康检查与原始 dialog 检视,配合
/healthz探针与 Prometheus/metrics全指标暴露。
运维体验
- 配置热重载:
POST /reload/trunks、/reload/routes、/reload/acl、/reload/queues、/reload/ivr——按对象粒度热更新,不重启进程、不挂断进行中的通话;路由/中继/ACL 还支持数据库配置模式,控制台改完即用; - 优雅关机:SIGTERM 后先排水再退出,打完最后一通电话才下线;
- SipFlow 可视化排障:Web 控制台里直接查看每通电话的完整 SIP 信令流与 RTP 质量统计,录音在线回放、WAV 导出,JSONL 一键归档——sngrep 可以退休了。
Ext Link: https://github.com/restsend/rustpbx
评论区
写评论还没有评论