—— LiveKit Alternative ——

Rooms Are for Video. Calls Need a Phone Company.

LiveKit handles video rooms well. When the use case is voice AI answering phone calls, the architecture needs native telephony, not a WebRTC bridge.

< 1.2s

typical AI response latency

< 1.2s

typical AI response latency

0

bridge hops on SignalWire

0

bridge hops on SignalWire

1-2.5s

added latency from SIP-to-WebRTC bridge

1-2.5s

added latency from SIP-to-WebRTC bridge

2,000+

companies on the platform

2,000+

companies on the platform

—— The Problem ——

A video conferencing model forced onto phone calls

Two platforms, two bills, two failure modes

LiveKit for media processing, plus a separate CPaaS for phone numbers. Two contracts, two SLAs, two support teams. When the call state diverges between systems, debugging requires checking both.

Two platforms, two bills, two failure modes

LiveKit for media processing, plus a separate CPaaS for phone numbers. Two contracts, two SLAs, two support teams. When the call state diverges between systems, debugging requires checking both.

Every call creates a video conference room

A bilateral phone call gets room infrastructure designed for multi-party video. The caller becomes a 'participant.' The AI agent 'joins' the room. Audio flows through WebRTC track subscriptions.

Every call creates a video conference room

A bilateral phone call gets room infrastructure designed for multi-party video. The caller becomes a 'participant.' The AI agent 'joins' the room. Audio flows through WebRTC track subscriptions.

Transfers mean migrating between rooms

Transferring a call moves a participant from one room to another instead of using standard SIP transfer primitives. LiveKit's SIP REFER took nine months to ship and remains fragile.

Transfers mean migrating between rooms

Transferring a call moves a participant from one room to another instead of using standard SIP transfer primitives. LiveKit's SIP REFER took nine months to ship and remains fragile.

Bridge latency developers call 'unbearable'

In GitHub Issue #3685, a developer reported that latency becomes 'quite unbearable' when applying LiveKit agents to inbound calls via Twilio. Others measured 1 to 2.5 seconds from the SIP-to-WebRTC bridge.

Bridge latency developers call 'unbearable'

In GitHub Issue #3685, a developer reported that latency becomes 'quite unbearable' when applying LiveKit agents to inbound calls via Twilio. Others measured 1 to 2.5 seconds from the SIP-to-WebRTC bridge.

Build a Voice AI Agent

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

Rust

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

class SupportAgent(AgentBase):
    def __init__(self):
        super().__init__(name="Support Agent", route="/support")
        self.prompt_add_section("Instructions",
            body="You are a customer support agent. "
                 "Greet the caller and resolve their issue.")
        self.add_language("English", "en-US", "rime.spore:mistv2")

    @AgentBase.tool(name="check_order")
    def check_order(self, order_id: str):
        """Check the status of a customer order.

        Args:
            order_id: The order ID to look up
        """
        return FunctionResult(f"Order {order_id}: shipped, ETA April 2nd")

agent = SupportAgent()
agent.run()

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

Rust

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

class SupportAgent(AgentBase):
    def __init__(self):
        super().__init__(name="Support Agent", route="/support")
        self.prompt_add_section("Instructions",
            body="You are a customer support agent. "
                 "Greet the caller and resolve their issue.")
        self.add_language("English", "en-US", "rime.spore:mistv2")

    @AgentBase.tool(name="check_order")
    def check_order(self, order_id: str):
        """Check the status of a customer order.

        Args:
            order_id: The order ID to look up
        """
        return FunctionResult(f"Order {order_id}: shipped, ETA April 2nd")

agent = SupportAgent()
agent.run()

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

Rust

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

class SupportAgent(AgentBase):
    def __init__(self):
        super().__init__(name="Support Agent", route="/support")
        self.prompt_add_section("Instructions",
            body="You are a customer support agent. "
                 "Greet the caller and resolve their issue.")
        self.add_language("English", "en-US", "rime.spore:mistv2")

    @AgentBase.tool(name="check_order")
    def check_order(self, order_id: str):
        """Check the status of a customer order.

        Args:
            order_id: The order ID to look up
        """
        return FunctionResult(f"Order {order_id}: shipped, ETA April 2nd")

agent = SupportAgent()
agent.run()

The architectural difference

LiveKit (Room-Based)

SIP trunk receives call from external CPaaS

Room created dynamically for each call

Caller becomes a room participant

AI agent joins the room as another participant

Audio flows through WebRTC track subscriptions

Transfer moves participants between rooms

SignalWire (Call-Based)

Call arrives at SignalWire (the phone company)

AI agent answers the call directly

Audio flows through the native media stack

Transfer uses standard telephony primitives

State lives in the call object, not a room

One platform, one bill, no external CPaaS

Platform comparison

Capability

LiveKit

SignalWire

Native PSTN

No (requires an external CPaaS)

Yes

Native PSTN

No (requires an external CPaaS)

Yes

Phone numbers

US only, inbound only

Global, inbound + outbound

Phone numbers

US only, inbound only

Global, inbound + outbound

SIP transfers

SIP REFER (9 months to ship, fragile)

Cold, warm, blind, attended

SIP transfers

SIP REFER (9 months to ship, fragile)

Cold, warm, blind, attended

Call abstraction

Room with participants

First-class call object

State management

Manual (closed as 'Not Planned')

Built-in shared data layer

Media transport

SIP-to-WebRTC bridge

Native SIP/PSTN, no bridge

Pricing model

LiveKit + CPaaS provider

One platform, one bill

Agent SDK

8+ coordinated packages

pip install signalwire-agents

IMS compatibility

Breaks on Session Timers

Full support (FreeSWITCH heritage)

IMS compatibility

Breaks on Session Timers

Full support (FreeSWITCH heritage)

Who should consider switching

Voice AI on phone calls, not browser sessions

Teams building AI agents that handle inbound or outbound phone calls where native SIP and PSTN matter more than WebRTC rooms.

Voice AI on phone calls, not browser sessions

Teams building AI agents that handle inbound or outbound phone calls where native SIP and PSTN matter more than WebRTC rooms.

Reliable transfers in production

Organizations that need cold, warm, blind, and attended transfers to work without SIP REFER fragility or room migration.

Reliable transfers in production

Organizations that need cold, warm, blind, and attended transfers to work without SIP REFER fragility or room migration.

One vendor instead of two

Developers who want telephony and AI processing from a single platform instead of managing LiveKit plus a CPaaS provider.

One vendor instead of two

Developers who want telephony and AI processing from a single platform instead of managing LiveKit plus a CPaaS provider.

Sub-second latency without bridge overhead

Teams where 1 to 2.5 seconds of extra bridge latency is unacceptable. SignalWire's media stack has zero bridge hops for telephony.

Sub-second latency without bridge overhead

Teams where 1 to 2.5 seconds of extra bridge latency is unacceptable. SignalWire's media stack has zero bridge hops for telephony.

Migrate from LiveKit in four steps

1

Install the SDK

pip install signalwire-agents. One package replaces eight LiveKit packages plus a CPaaS provider.

2

Define your agent

Inherit AgentBase, set prompts, add tools with Python decorators or YAML. Under 20 lines for a production agent.

3

Configure your numbers

Port existing numbers or provision new ones. Global coverage, inbound and outbound, from a single platform.

4

Route incrementally

Point specific numbers at SignalWire agents while keeping other traffic on existing infrastructure. No all-or-nothing migration.

When LiveKit is the right choice

Multi-party video sessions, browser-first WebRTC applications, and use cases where the rooms model is the right abstraction. This page is about voice AI on phone calls, where the requirements are different.

Frequently Asked Questions

FAQ

Do I need to rewrite my agent logic?

Agent logic (prompts, tools, business rules) translates directly. The SignalWire SDK uses Python decorators and YAML definitions. The platform handles telephony, not your code.

Can I keep using my STT and TTS providers?

Yes. STT, TTS, and LLM providers are configured at the platform level. Bring your own API keys or use SignalWire's integrated providers.

What about latency compared to LiveKit?

SignalWire's typical AI response latency is 800-1200ms with no bridge overhead, as low as 600ms with speech-to-speech voice models. LiveKit adds 1 to 2.5 seconds from the SIP-to-WebRTC bridge, per developer reports.

Is SignalWire open source?

The Python agents SDK is open source on GitHub. The platform itself is commercial infrastructure built on FreeSWITCH, which the SignalWire team created.

What does it cost?

Voice AI at $0.16 per minute, flat rate. One bill from one vendor. No separate CPaaS charges, no hidden markup chain.

Try it now

Sigmond Runs on SignalWire

A voice and video AI agent built on the SignalWire SDK, wired to a live knowledge base, able to see what you show him. Build the same thing on voice, phone, WhatsApp, or SIP, or an entire white-label platform with SignalWire as the network underneath.

Sigmond

Trusted by 2,000+ companies

Rooms are great for video. Calls need a phone company.

Native telephony, sub-second AI latency, and one platform instead of two.

Rooms are great for video. Calls need a phone company.

Native telephony, sub-second AI latency, and one platform instead of two.

Rooms are great for video. Calls need a phone company.

Native telephony, sub-second AI latency, and one platform instead of two.

Rooms are great for video. Calls need a phone company.

Native telephony, sub-second AI latency, and one platform instead of two.