LiveKit Alternative for Telephony

Rooms Are Great. Calls Need a Phone Company.

LiveKit is a strong WebRTC media server for video and audio rooms. Phone calls require native SIP, PSTN, and call transfers that a room-based architecture cannot provide.

< 1.2s
typical AI response latency
1
platform, not two
$0.16/min
AI processing
20+
years of production SIP engineering
Try it now

Talk it through with Sigmond

Sigmond is a voice AI agent running on the SignalWire infrastructure this page is about. Ask him about anything you just read.

Trusted by 2,000+ companies

The problem

A room is not a call

Two platforms for one phone call

LiveKit handles the room. Twilio handles the phone line. Two platforms means two bills, two failure domains, two sets of logs with no shared trace ID.

SIP bridge adds latency and failure modes

Bridging a SIP trunk into a WebRTC room introduces a hop that developers in EU deployments report adds 4+ seconds per turn. The bridge is a single point of failure with limited error visibility.

Transfers break across room boundaries

Cold transfers fail with SIP 603 Decline. Voice-triggered transfers fail silently with no error logs. Call transfers are fundamental telephony operations, not edge cases.

IMS carriers expose protocol gaps

Session timers (RFC 4028), re-INVITEs, and QoS preconditions (RFC 3312) break on LiveKit. One telecom company reported all their agents would be wasted on real carrier infrastructure.

Build a Voice AI Agent

from signalwire_agents import AgentBase
from signalwire_agents.core.function_result import SwaigFunctionResult

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 SwaigFunctionResult(f"Order {order_id}: shipped, ETA April 2nd")

agent = SupportAgent()
agent.run()

Two platforms vs. one platform

LiveKit + Twilio

  • Two platforms, two bills, two failure domains
  • SIP bridge introduces latency and failure modes
  • Two sets of logs with no shared trace ID
  • EU deployment: 4+ seconds per turn reported
  • Cold transfers fail with SIP 603 Decline
  • Voice-triggered transfers fail silently

SignalWire

  • One platform, one bill, one set of logs
  • No SIP bridge; telephony is native
  • 800-1200ms typical full roundtrip latency
  • Audio stays inside from PSTN ingress to AI to egress
  • Cold, warm, blind, and attended transfers work natively
  • Context carries through every transfer

Rooms vs. calls: why the abstraction matters

CapabilityRoom abstraction (LiveKit)Call abstraction (SignalWire)
Cold transferNot native; participant leaves room, joins anotherNative call operation
Warm transferRequires bridging roomsNative with context carry
Call hold and resumeNot native to room modelNative call state
IVR and DTMFBolt-onNative
Call recordingRoom recording (all participants)Per-call with selective controls
SIP headers and metadataLimitedFull SIP header access
PSTN outboundRequires external providerNative
Global phone numbersUS-only, inbound-onlyGlobal, inbound and outbound

Unbearable.

LiveKit SIP transfer failures from GitHub

IssueDescriptionGitHub reference
Cold transfer failsSIP REFER results in 603 Decline from far end#234
Voice-triggered transfers fail silentlyNo error logs when AI-initiated transfers fail#1305
Turn detection interrupts mid-sentenceAgents cut off callers during speechMultiple issues
Voice quality degrades with recordingEnabling recording causes audio quality problemsMultiple issues
ARM64 instances never receive speechComplete STT failure on ARM architectureMultiple issues

Migrate from LiveKit + Twilio to one platform

1

Install the SDK

Run pip install signalwire-agents. The Python SDK handles agent creation, tool registration, and call management.

2

Define your agent in YAML or Python

Write a prompt, configure voice settings, and register tool functions. No WebSocket piping or SIP bridge configuration.

3

Point a phone number at your agent

Assign a SignalWire number (or port your existing number) to the agent endpoint. Calls route directly to the media engine.

4

Test transfers and call flows

Cold, warm, blind, and attended transfers work natively. Context (conversation history, session variables) carries through every transfer.

The FreeSWITCH team built this SignalWire was founded by the team that wrote FreeSWITCH, the open-source telephony engine running trillions of minutes across the industry. SIP and PSTN are the foundation, not a bolt-on.

FAQ

Is LiveKit bad?

No. LiveKit is a strong WebRTC media server for browser-based video and audio rooms. The issue is using a room-based architecture for telephone calls, which require SIP, PSTN, transfers, and carrier-grade reliability.

Can I keep using LiveKit for video rooms and use SignalWire for calls?

Yes. Many teams use different tools for different workloads. SignalWire handles the telephony side: phone calls, SIP trunking, PSTN connectivity, and voice AI agents on phone lines.

Where do the GitHub issue numbers come from?

From public GitHub issues in LiveKit repositories. Cold transfer failures (#234), silent transfer failures (#1305), and IMS incompatibility (#438) are documented by developers in production.

What does $0.16 per minute include?

AI processing: STT, LLM orchestration, TTS, and the media engine. Transport (PSTN, SIP) is billed separately at carrier rates. One invoice covers everything.

Do I need to rewrite my AI agent logic?

Your prompts, tool functions, and business logic carry over. The migration replaces the telephony and media layer, not the AI logic.

Trusted by

Stop bridging. Start calling.

Deploy voice AI agents on native telephony with sub-second latency and global phone numbers.

About SignalWire

SignalWire is a communications infrastructure platform. Voice, video, messaging, conferencing, queuing, recording, and AI all run on the same real-time voice and video substrate.

AI is one capability among many, not the whole business. Customers compose multiple services on a single carrier-billed call; margin expands as the service mix shifts toward higher-margin capabilities stacked on top of the transport layer.

The platform was built by the team that created FreeSWITCH. It processes 2.7 billion minutes and messages annually and is in production at 2,000+ companies, including Salesforce, Sprinklr, and Apple.

Read the docs