All fields are required
Multi-vendor voice AI is five invoices, five failure modes, and state management you build yourself. One platform where AI runs inside the media engine, governed by the control plane, eliminates the vendor chain.
Telephony provider, STT vendor, LLM provider, TTS vendor, and your state store. Each one bills separately, scales differently, and has its own support queue.
When one vendor throttles, the entire pipeline degrades. STT delays cascade to LLM, which cascades to TTS. Your application is the only thing connecting them.
A call drops at 2am. Which vendor gets the ticket? You check five dashboards, correlate timestamps across four log formats, and spend 90 minutes finding a 2-second latency spike.
No vendor owns call state. You build it yourself with Redis, webhooks, and retry logic. Race conditions are structural, not bugs.
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()
| Vendor | Failure Mode | Impact |
|---|---|---|
| Telephony provider | Outage or degradation | All calls drop. No fallback. |
| STT vendor | Latency spike | Delays cascade to LLM and TTS. Caller hears dead air. |
| LLM provider | Rate limiting | Responses queue. Callers wait 5-10 seconds. |
| TTS vendor | Quality degradation | Voice artifacts. Callers notice immediately. |
| Your state store | Partition or slowdown | Race conditions. Duplicate actions. Lost context. |
Each multi-vendor failure mode requires its own detection, mitigation, and recovery strategy in your code.
SignalWire classifies errors using a 10-type taxonomy. Each error is categorized as fatal or non-fatal. Non-fatal errors trigger recovery phrases transparently. Fatal errors execute graceful shutdown with a hangup hook that captures final state. You do not build error detection per vendor.
| Channel | How It Connects | Same State? | Same AI? |
|---|---|---|---|
| PSTN phone calls | Phone numbers | Yes | Yes |
| SIP trunks | SIP endpoints | Yes | Yes |
| WebRTC browser | Subscriber tokens | Yes | Yes |
| Mobile SDK | Subscriber tokens | Yes | Yes |
Yes. The platform includes default STT, LLM, and TTS. You can also connect your own providers. The state management, orchestration, and telephony remain platform-native regardless.
SignalWire provides SIP trunking, PSTN, phone numbers, and messaging without the AI layer. You pay for what you use. The AI capabilities are available when you need them.
No inter-vendor network hops means no cascading failures between services. The system that handles one call handles a thousand calls the same way. What you test in development is what runs in production.
AI processing: STT, LLM, and TTS. Transport (SIP, PSTN) is billed separately at carrier rates. One invoice. No per-token variance. AI billing runs only while the AI is actively processing, not during holds or transfers.
Trusted by
Build voice AI on a unified stack where AI runs inside the media engine. The control plane handles state and routing. One system.