LiveKit Alternative

Your Voice AI Needs a Real Phone Company

LiveKit's first-party phone numbers cover one country, inbound only, with no TransferSipParticipant. Outbound, international, and porting all require a third-party trunk. That is a preview, not telephony.

Global
phone number coverage
All types
cold, warm, blind, attended transfers
1
vendor, one bill
$0.16/min
AI voice processing
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.

The Two-Provider Problem

Why Bolting Twilio Onto LiveKit Breaks in Production

Call state diverges between two systems

Twilio shows a call ringing while LiveKit reports it ended. Production calls drop at one-second durations because neither system owns the truth.

SIP transfers break through the bridge

LiveKit ships cold and warm transfers, but on SIP trunks warm transfers return a 482 'Request merged' that drops the handoff, and first-party numbers have no TransferSipParticipant at all (livekit/sip #626).

Two bills for one phone call

Twilio charges for SIP trunking. LiveKit charges for audio orchestration. At 22,000 monthly calls, connectivity alone costs $860/month before any AI processing.

Two dashboards when a call fails

Debugging a dropped call means correlating LiveKit logs with Twilio logs across two platforms, two credential sets, and two support channels.

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()

Phone Number Capabilities

LiveKit Phone Numbers

  • US-only coverage
  • Inbound only, no outbound calling
  • No TransferSipParticipant on first-party numbers
  • No number porting
  • No international numbers
  • Third-party trunk needed for outbound, intl, and porting

SignalWire

  • Global coverage across dozens of countries
  • Inbound and outbound calling included
  • All transfer types: cold, warm, blind, attended
  • Number porting to bring existing numbers
  • Local and toll-free numbers worldwide
  • One platform, one bill, no bridge

Feature Matrix

CapabilityLiveKit Phone NumbersLiveKit + Twilio/TelnyxSignalWire
Countries availableUS onlyDepends on CPaaS providerGlobal
Inbound callingYesYesYes
Outbound callingNoYes (via CPaaS)Yes (native)
Cold transfersNo TransferSipParticipantShips, but buggy on SIP trunksNative
Warm transfersNo TransferSipParticipantShips, 482 'Request merged' on SIPNative
Number portingNot documentedVia CPaaS providerYes
Call recordingNot includedSeparate config per providerBuilt in
Call state ownershipLiveKit onlySplit across two systemsSingle source of truth
BillingLiveKit onlyTwo vendors, two invoicesOne vendor, one invoice
Setup complexityLow (US inbound only)High (multi-provider config)Low (native platform)

We didn't add SIP support as an afterthought. We wrote the SIP stack the industry runs on. FreeSWITCH has processed trillions of carrier minutes across nearly 20 years of production deployment.

From LiveKit + Twilio to One Platform

1

Install the SDK

Run `pip install signalwire-agents` to get telephony, AI, and agent framework in one package.

2

Define your agent

Same AI logic, new SDK surface. AgentBase replaces VoicePipelineAgent with built-in transfers and state management.

3

Port your numbers

Bring your existing phone numbers to SignalWire. Global coverage, inbound and outbound, all transfer types.

4

Retire the second provider

No more Twilio bill, no more bridge latency, no more split call state. One platform handles everything.

Cost at scale A Dev.to analysis of 22,000 monthly voice AI calls found $860/month in connectivity costs alone when using LiveKit + Twilio, before any AI processing. SignalWire provides AI processing at $0.16/min with transport billed separately at carrier rates. One platform, one invoice.

FAQ

Can I port my existing phone numbers to SignalWire?

Yes. SignalWire supports number porting for US and international numbers. Your existing numbers move to the platform with no downtime for your callers.

Does SignalWire support outbound calling for campaigns?

Yes. Outbound calling is native to the platform. Appointment reminders, lead follow-ups, and campaign calls work with the same agent framework and phone numbers.

What transfer types does SignalWire support?

All of them: cold, warm, blind, and attended. Transfers are built into the platform and work with agent-to-agent, agent-to-queue, and agent-to-external-number scenarios.

Why does LiveKit still need a separate telephony provider?

LiveKit added carrier PSTN peering and first-party US inbound numbers, but those are US-only and inbound-only, so outbound, international, and number porting still require a third-party trunk like Twilio or Telnyx. That bridge adds latency, cost, and failure modes.

Trusted by 2,000+ companies

Global Phone Numbers. Native Transfers. One Platform.

Stop bridging two providers for what should be one phone call.

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 Apple, Sprinklr, Deutsche Telekom, and T-Mobile.

Read the docs