feat(queue,cc,rwi): overflow skill-group tracking, sequential queue rotation, full-group dequeue events [latest] queue_overflow_joined RWI event + QueueLeft.skill_groups (None omitted, wire-compatible); reason=overflow added EscalationMode/OverflowMode::Sequential: stage rotation with per-stage dwell (stage timer resets per switch, max_wait stays global); chain tail holds until max_wait fallback UpdateQueueMeta command: session meta + ActiveCallContextMeta follow the newest joined group (queue fields only; ivr/ticket/customer preserved) QueueApp: current_group drives wait-retention polls and dispatcher attribution; sequential switch emits queue_left{overflow} then queue_overflow_joined ACD engine: sequential Overflow(SkillGroup) re-queues into the next chain group; terminal dequeues carry all escalated groups CC adapter: multi-queue waiting-depth accounting (mark/clear/group-switch, paired); abandoned drains all stages carrying skill_groups Console/UI: skill-group overflow_mode + overflow_after_secs first-class fields (metadata-backed), ACD policy DTO sequential mode, escalation plan synthesis submodule cc bumped (527a802); RWI events reference updated; misc workspace updates
feat(queue,cc,rwi): overflow skill-group tracking, sequential queue rotation, full-group dequeue events [latest]
A high-performance, software-defined PBX built in Rust.
All call control is externalized via HTTP/WebSocket/Webhook — routing, media control, and events are programmable in any language. No C modules, no recompilation.
GitHub | Website
mkdir -p rustpbx && cd rustpbx curl -O https://raw.githubusercontent.com/restsend/rustpbx/main/config.toml.example docker run -d --name rustpbx --net host \ -v $(pwd)/config.toml.example:/app/config.toml \ ghcr.io/restsend/rustpbx:latest --conf /app/config.toml # Create the admin account (first time only) docker exec rustpbx /app/rustpbx --conf /app/config.toml \ --super-username admin --super-password changeme
git clone --recurse-submodules https://github.com/restsend/rustpbx cd rustpbx cargo run --release -- --conf config.toml.example
Cross-compile for Windows 64-bit (from Linux/macOS):
rustup target add x86_64-pc-windows-gnu cargo build --release --target x86_64-pc-windows-gnu # output: target/x86_64-pc-windows-gnu/release/rustpbx.exe
That’s it — the example config boots a full PBX out of the box:
udp://localhost:15060
bob
alice
123456
No config at all? cargo run --release also works — built-in defaults: HTTP 0.0.0.0:8080, SQLite, SIP UDP 5060.
cargo run --release
0.0.0.0:8080
5060
Want your own config.toml? This is all you need:
config.toml
http_addr = "0.0.0.0:8080" database_url = "sqlite://rustpbx.sqlite3" [proxy] addr = "0.0.0.0" udp_port = 5060 modules = ["auth", "registrar", "call"] [[proxy.user_backends]] type = "memory" users = [{ username = "1001", password = "password" }] [console] base_path = "/console"
Performance: 5000 concurrent calls with RTP relay on ~3.8 cores, 0% packet loss — linear scaling. See benchmark details.
Every incoming INVITE calls your webhook. Return JSON to decide routing:
// POST to your webhook: { "call_id": "abc-123", "from": "sip:+861390000@trunk", "to": "sip:400800" } // Your response: { "action": "forward", "targets": ["sip:1001@internal"], "record": true }
Actions: forward · reject · abort · spam
forward
reject
abort
spam
JSON-over-WebSocket for in-call control: originate, answer, hangup, bridge, transfer, play, record.start, queue/ACD commands, supervisor listen/whisper/barge, conference commands, and more.
originate
answer
hangup
bridge
transfer
play
record.start
listen
whisper
barge
SIP 401 behind NAT/Docker — set the realm explicitly:
[proxy] realms = ["your-public-ip:5060"]
@shenjinti · @yeoleobun · @dengxiayehu · @zen2do · @autopeasant · @rgon · @themooer1 · @v0l · @tgeorge06 · @umran · @davidcforbes · @deweydb · @zhouhailin
Community: MIT · Commercial: hi@miuda.ai · https://miuda.ai
用Rust编写的SIP PBX, 能实现电话呼叫软交换平台,支持WebRTC和WebSocket
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
RustPBX
A high-performance, software-defined PBX built in Rust.
All call control is externalized via HTTP/WebSocket/Webhook — routing, media control, and events are programmable in any language. No C modules, no recompilation.
GitHub | Website
Quick Start
Option 1: Docker (recommended)
Option 2: Build from source
Cross-compile for Windows 64-bit (from Linux/macOS):
That’s it — the example config boots a full PBX out of the box:
udp://localhost:15060bob/alice, password123456Minimal config
Want your own
config.toml? This is all you need:Features
Performance: 5000 concurrent calls with RTP relay on ~3.8 cores, 0% packet loss — linear scaling. See benchmark details.
Programmable Interfaces
HTTP Router
Every incoming INVITE calls your webhook. Return JSON to decide routing:
Actions:
forward·reject·abort·spamRWI (Real-time WebSocket Interface)
JSON-over-WebSocket for in-call control:
originate,answer,hangup,bridge,transfer,play,record.start, queue/ACD commands, supervisorlisten/whisper/barge, conference commands, and more.Documentation
Troubleshooting
SIP 401 behind NAT/Docker — set the realm explicitly:
Contributors
@shenjinti · @yeoleobun · @dengxiayehu · @zen2do · @autopeasant · @rgon · @themooer1 · @v0l · @tgeorge06 · @umran · @davidcforbes · @deweydb · @zhouhailin
License
Community: MIT · Commercial: hi@miuda.ai · https://miuda.ai