< 返回版块

shenjinti 发表于 2026-09-04 09:23

Tags:voip,sip,rtp

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 场景的一等公民

  • 实时转写 SSEGET /cc/calls/{call_id}/transcript,主/被叫双路独立 ASR 流,采用 Deepgram 兼容流式协议(16 kHz PCM / 20ms 帧);懒启动设计——有人订阅才启动,无人订阅自动停止,不改变媒体路径,与录音、监听和平共处;
  • 离线转写:本地 SenseVoice 引擎,通话结束即出全文记录,数据不出内网;
  • 预测外呼 SSEPOST /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;
  • 录音默认就能直传 S3type = "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

评论区

写评论

还没有评论

1 共 0 条评论, 1 页