---
summary: User-visible changes to ScaiDial.
title: Changelog
path: changelog
status: published
---

User-visible changes only. Internal refactors and infrastructure work omitted.

## v0.0.1 — Initial rollout (2026-06-22)

The first ship covers the full feature set end-to-end. Module identity, permissions, admin pages, and the lifecycle hooks are all wired; the API mounts at `/v1/modules/scaidial/`.

### Call handling

- SIP trunks register outbound to any carrier or PBX via livekit-sip. Auth by credentials or IP whitelist. Per-trunk sync state machine (`pending` → `synced` → `error`) with retry endpoint.
- DIDs map carrier-delivered numbers to dialplans.
- Extensions route calls to a user (`wave`), a bot (`bot`), a voicemail box, an external number, or a SIP endpoint. Per-extension DND, ring timeout, timeout action, outbound caller-ID override, and voicemail greeting.
- Dialplans with six match types (`always`, `did`, `extension`, `caller_prefix`, `time_window`) and six action types (`ring_extension`, `ring_bot`, `voicemail`, `forward`, `hangup`, `play_message`). Visual rule builder ships with the admin UI.

### Live call control

- Active Calls page lists every call in `ringing` / `active` / `held`, with per-leg controls: hangup, hold/unhold, blind transfer (SIP REFER).
- Bots ring via the same kickoff path ScaiBot's web widget uses — no separate orchestration layer.

### Voicemail + history

- Voicemail recordings stored in ScaiBunker S3. Web playback via the admin UI and `/my/dial`.
- Optional voicemail transcripts via ScaiEcho — opt-in per tenant.
- Call History page with five filters: caller substring, extension, end reason, date range. Keyset pagination.

### End-user portal

- `/my/dial` self-service surface. Every tenant user with at least one extension grant sees their extensions, voicemail, recent calls, and forwarding rules.
- DND toggle and forwarding-rule manager on owned extensions, no admin permission required.
- In-browser softphone — click-to-call to any E.164 or SIP URI. WebRTC into a LiveKit room; SIP leg added via livekit-sip.

### Tenant policy

- Per-tenant policy table with the first opt-in: voicemail transcripts (off by default). Audit trail of who flipped what.

### Admin operations

- Generic SIP trunk form — no provider-specific bindings.
- Test-connection probe before persisting a trunk.
- Carrier-whitelist tuple surfaced on the Trunks page: egress IPv4/IPv6, SIP port, RTP UDP range.
- All admin pages use typed forms — no JSON editing required for the day-to-day flow.

### Integrations

- ScaiBot voice — extensions of type `bot` route calls to a ScaiBot bot. The bot's voice worker joins the same LiveKit room as the SIP participant.
- ScaiEcho — voicemail transcripts run through ScaiEcho when the tenant opts in.

### What's not in v0.0.1

- Multi-trunk routing (LCR). The current outbound originate picks the oldest synced trunk per tenant.
- Attended transfer. Blind only in v1.
- Conference rooms. Two-leg calls only.
- IVR menus. The `play_message` action is one-way.
- Per-voicemail-box configuration. One tenant-wide default box for now.
