v2.2.0

eythaann/Seelen-UIv2.2.0Apr 28, 2026by iamprashant

AI Summary

This release focuses on three infrastructure changes that make inbound voice AI production-ready, specifically regarding SIP registration, multi-server ownership, and multi-target transfer failover.

Key Highlights

  • Distributed SIP Registration using Redis-backed ownership for active DIDs
  • Multi-Server Ownership and Failover for safer replica management
  • Multi-Target SIP Transfer Failover with ordered retry logic
  • Defined Post-Transfer Behavior (end_call, resume_ai)

Breaking Changes

  • transfer_to replaces to in transfer tool calls; update configs before upgrading

New Features

  • Distributed SIP registration manager
  • Redis-backed DID ownership flow
  • Multi-target transfer support with retry
  • Explicit post-transfer behavior settings

Full Release Notes

This release focuses on three infrastructure changes that make inbound voice AI production-ready.

---

> **Breaking change:** `transfer_to` replaces `to` in transfer tool calls. Update your configs before upgrading.

---

## Distributed SIP Registration

The registration flow is now based on explicit ownership and reconciliation:

- Each DID is claimed through Redis-backed ownership
- One instance becomes the active owner for that DID
- The owner performs SIP registration and keeps it active
- If that owner disappears, another instance can claim the DID and restore service

This is a key step toward making inbound voice AI reliable in multi-instance deployments.

## Multi-Server Ownership and Failover

The registration pipeline now separates ownership, registration, and active-state handling more cleanly:

- Clearer ownership semantics per DID
- Safer failover across replicas
- Fewer single-node assumptions
- More predictable behavior in horizontally scaled deployments

## Multi-Target SIP Transfer Failover

SIP transfer now supports multiple ordered `transfer_to` targets:

- Try target 1
- If target 1 fails or does not answer, try target 2
- Continue until a target connects or the list is exhausted

## Defined Post-Transfer Behavior

Transfer now has explicit post-transfer behavior for SIP:

- `end_call`
- `resume_ai`

---

## Engineer-Facing Changelog

### SIP Registration

- Added distributed SIP registration manager
- Added Redis-backed DID ownership flow
- Added multi-server registration pipeline
- Separated claim ownership, register, and mark-active stages
- Improved reconcile behavior for active and removed registrations
- Improved ownership release behavior for failover and cleanup

### SIP Transfer

- Added support for ordered multi-target transfer via `transfer_to`
- Added per-target transfer retry/failover flow
- Added explicit post-transfer behavior with `end_call` and `resume_ai`
- Improved transfer handling in SIP pipeline and streamer path
- Aligned transfer behavior for channels where multi-target transfer does not apply

### Telephony and Session Behavior

- Improved metadata alignment across telephony paths
- Improved transfer-related session state handling
- Improved observer/event behavior around transfer lifecycle
- Reduced undefined behavior after operator hangup

### Tooling and API Cleanup

- Renamed transfer argument from `to` to `transfer_to`
- Improved transfer tool call handling
- Improved downstream transfer orchestration consistency

### Stability and Tests

- Added and updated tests around transfer behavior
- Improved dispatch-related test coverage
- Fixed call-flow edge cases around tool calls and injected messages
- Refined dispatch behavior for transfer and tool-call flows

---

**Full Changelog:** [v2.1.0...v2.2.0](https://github.com/rapidaai/voice-ai/compare/v2.1.0...v2.2.0)