Contact Sales

All fields are required

Months of Plumbing or Days of Product | SignalWire
Build vs. Buy for Voice AI

Months of Plumbing or Days of Product

Production voice AI on legacy platforms requires WebSocket servers, codec handling, barge-in state machines, and five vendor integrations. The same agent ships in days on SignalWire.

$0.16
per minute, AI processing
< 1.2s
typical AI response latency
2,000+
companies in production
Days
to first production call
The engineering cost nobody quotes

What You Build Before Your First Call

WebSocket server and codec handling

You build and host a WebSocket server that converts mu-law 8kHz to PCM 16kHz, manages connection lifecycle, and handles heartbeat timeouts. Two to three weeks of senior engineering time.

STT, LLM, and TTS integration

Three separate provider APIs, each with streaming protocols, error handling, and retry logic. Each integration takes one to two weeks. Format mismatches between providers fail silently.

Barge-in state machine

Voice activity detection triggers a 5ms window to flush the TTS buffer, cancel the LLM stream, and reset state. Two to three weeks to get right. Breaks differently under load.

Session state and error handling

Redis or database integration for conversation context, authentication state, and transfer history. Cross-provider failure detection where each vendor logs their own slice and nobody sees the full picture.

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

What you build vs. what the platform handles

Legacy CPaaS Approach

  • You build and host a WebSocket server
  • You handle mu-law to PCM codec conversion
  • You integrate STT, TTS, and LLM providers separately
  • You build a barge-in state machine with 5ms timing
  • You manage session state in Redis or a database
  • You correlate error logs across five vendors

SignalWire

  • No WebSocket server needed; AI runs inside the media engine
  • Codec conversion handled internally
  • STT, TTS, and LLM orchestration built into the platform
  • Native barge-in in the media engine
  • Session variables and conversation context travel with the call
  • Single-stack error taxonomy with structured event streams

Timeline comparison

ComponentLegacy CPaaSSignalWire
WebSocket + codec handling2-3 weeksNot needed
STT integration1-2 weeksBuilt in
LLM integration1-2 weeksBuilt in
TTS integration1-2 weeksBuilt in
Barge-in handling2-3 weeksBuilt in
State management2-3 weeksBuilt in
Error handling across providers1-2 weeksBuilt in
Scaling and load balancing2-4 weeksBuilt in
Total3-6 monthsDays

From zero to production

1

Write a YAML document or Python class

Define your agent's prompt, tools, and conversation flow. No WebSocket server, no codec handling, no barge-in state machine.

2

Point a phone number at it

Assign a number to your agent. Inbound calls route directly to the AI inside the media engine.

3

Test with real calls

Call the number. Audio, STT, TTS, and tool calling work end-to-end on the first attempt.

4

Ship to production

Same platform, same behavior at scale. No integration surprises when load increases.

The YAML-based agent definition supports multi-step conversations, scoped tool access per step, warm transfers with full context, and a data layer the AI model never sees. Production capabilities without production plumbing.

FAQ

Can I use my own LLM, STT, or TTS provider?

Yes. Bring your own providers or use the integrated defaults. The platform handles codec conversion, streaming, and buffer management regardless of which providers you choose.

What if I need custom logic beyond YAML?

The Python SDK gives you full programmatic control. Define tools as Python functions, add custom business logic, and deploy as a standard web service.

How does SignalWire handle scaling?

The platform scales resources dynamically. No WebSocket connection pool management, no geographic distribution engineering, no load balancer configuration.

Who built this platform?

The team that wrote FreeSWITCH, the open-source telephony engine processing trillions of minutes across the industry. Production telephony is the foundation.

Trusted by 2,000+ companies

Ship this week, not next quarter.

Same AI capabilities. Same production requirements. Months fewer. Built by the FreeSWITCH team.