v2.2.0

hkchengrex/MMAudiov2.2.0Apr 28, 2026by iamprashant

AI Summary

This release focuses on making inbound voice AI production-ready by introducing distributed SIP registration, multi-server ownership, and enhanced failover mechanisms. It also introduces multi-target SIP transfer support and defines explicit post-transfer behaviors.

Key Highlights

  • Distributed SIP registration using Redis-backed ownership
  • Multi-server ownership and failover for reliability
  • Multi-target SIP transfer with ordered failover
  • Explicit post-transfer behaviors (end_call and resume_ai)
  • Breaking change: transfer_to replaces to in transfer tool calls

Breaking Changes

  • transfer_to replaces to in transfer tool calls

New Features

  • Distributed SIP registration manager
  • Multi-target transfer support with retry/failover
  • Explicit post-transfer behavior (end_call, resume_ai)
  • Improved telephony session state handling
  • Improved dispatch behavior for transfer and tool-call flows

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)