Contact Sales

All fields are required

Phone Numbers: Global Coverage, Not a US-Only Preview | SignalWire
LiveKit Alternative

Your Voice AI Needs a Real Phone Company

LiveKit phone numbers cover one country, inbound only. No outbound, no transfers, no international. 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
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 fail through the bridge

SIP REFER returns 603 errors through the Twilio-to-LiveKit bridge. Voice-triggered transfers fail without error logs. Developers wait months for fixes.

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 call transfers of any type
  • No number porting
  • No international numbers
  • Requires a second provider for production telephony

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 transfersNoSIP REFER fails (603 errors)Native
Warm transfersNoFragile through bridgeNative
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.

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 need a separate telephony provider?

LiveKit is an agent framework built on WebRTC. Phone calls require SIP and PSTN connectivity, which LiveKit does not include. A bridge to Twilio or Telnyx 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.