—— Native Observability ——

Your Dashboards Say Green. Callers Disagree.

Multi-vendor voice AI gives you four dashboards with zero correlation. SignalWire gives you one structured event stream with per-component latency, barge-in analytics, and error classification.

1

trace per call, every component

1

trace per call, every component

10

error types, auto-classified

10

error types, auto-classified

0

third-party APM tools required

0

third-party APM tools required

2.7B

minutes and messages instrumented annually

2.7B

minutes and messages instrumented annually

—— The Observability Gap ——

Why Production Voice AI Breaks Invisibly

Component-Healthy, Experience-Broken

STT at 180ms, LLM at 900ms, TTS at 200ms, network at 150ms. Each vendor reports green. The caller hears a 1.4-second delay on every response. No single dashboard shows this.

Component-Healthy, Experience-Broken

STT at 180ms, LLM at 900ms, TTS at 200ms, network at 150ms. Each vendor reports green. The caller hears a 1.4-second delay on every response. No single dashboard shows this.

Four Dashboards, Zero Correlation

Telephony logs in one dashboard, speech-to-text in another, language model in a third, text-to-speech in a fourth. When a call degrades, you spend 90 minutes correlating timestamps across systems.

Four Dashboards, Zero Correlation

Telephony logs in one dashboard, speech-to-text in another, language model in a third, text-to-speech in a fourth. When a call degrades, you spend 90 minutes correlating timestamps across systems.

No Audio-Level Insight

External vendors cannot capture barge-in at the audio level. You cannot see how much of the AI response the caller heard before interrupting, or why they interrupted.

No Audio-Level Insight

External vendors cannot capture barge-in at the audio level. You cannot see how much of the AI response the caller heard before interrupting, or why they interrupted.

Errors Without Classification

A failed call produces an error code in one vendor's logs and silence in the others. Was it a speech recognition failure, a model timeout, or a network partition? You have to reconstruct the answer manually.

Errors Without Classification

A failed call produces an error code in one vendor's logs and silence in the others. Was it a speech recognition failure, a model timeout, or a network partition? You have to reconstruct the answer manually.

Build a Voice AI Agent

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

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

agent = SupportAgent()
agent.run()

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

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

agent = SupportAgent()
agent.run()

Python

TypeScript

Go

Java

Ruby

PHP

Perl

C++

C#

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22

from signalwire import AgentBase
from signalwire.core.function_result import FunctionResult

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

agent = SupportAgent()
agent.run()

Debugging a Slow Agent: 90 Minutes vs. 5 Minutes

Multi-Vendor Debugging

Check telephony dashboard: call connected normally (15 min)

Check STT dashboard: latency 180ms, normal (10 min)

Check LLM dashboard: rate limiting at peak, unclear which calls (20 min)

Check TTS dashboard: queue depth increasing (10 min)

Correlate timestamps across four dashboards (30 min)

Root cause found after 90 minutes of cross-vendor investigation

SignalWire Native Observability

Query call_timeline: STT 150ms, LLM 2,100ms (identified), TTS 160ms (2 min)

Check barge-in analytics: callers interrupt at 2.3s consistently (2 min)

Root cause identified, fix applied in under 5 minutes

What the Platform Instruments Automatically

Signal

What It Captures

Why It Matters

Per-component latency

STT, LLM, TTS, and tool call latency on every turn

Pinpoints which component is slow without cross-vendor correlation

Per-component latency

STT, LLM, TTS, and tool call latency on every turn

Pinpoints which component is slow without cross-vendor correlation

Barge-in analytics

Elapsed milliseconds, approximate text heard, turn context

Reveals whether the AI talks too much, too slowly, or about the wrong thing

Barge-in analytics

Elapsed milliseconds, approximate text heard, turn context

Reveals whether the AI talks too much, too slowly, or about the wrong thing

Step transitions

Cause (model decision, tool result, timeout) with metadata

Shows why the conversation moved between steps

Step transitions

Cause (model decision, tool result, timeout) with metadata

Shows why the conversation moved between steps

Error taxonomy

10 types with fatal/non-fatal classification and recovery action

Classifies errors automatically so you debug by category, not by log line

Error taxonomy

10 types with fatal/non-fatal classification and recovery action

Classifies errors automatically so you debug by category, not by log line

Error Taxonomy: 10 Types, Automatic Recovery

Error Type

Fatal

Platform Response

stt_failure

No

Recovery phrase: asks caller to repeat

stt_failure

No

Recovery phrase: asks caller to repeat

llm_timeout

No

Retry with fallback model

llm_timeout

No

Retry with fallback model

llm_error

No

Recovery phrase, log context

llm_error

No

Recovery phrase, log context

tts_failure

No

Fallback voice

tts_failure

No

Fallback voice

tool_timeout

No

Inform caller, retry

tool_timeout

No

Inform caller, retry

tool_error

No

Error-specific recovery phrase

tool_error

No

Error-specific recovery phrase

auth_failure

Yes

Redirect flow

auth_failure

Yes

Redirect flow

network_error

Yes

Graceful hangup with state capture

network_error

Yes

Graceful hangup with state capture

config_error

Yes

Error message and log

config_error

Yes

Error message and log

system_error

Yes

Graceful hangup with hangup hook

system_error

Yes

Graceful hangup with hangup hook

From Incident to Resolution

1

Alert fires

Your monitoring detects elevated latency or increased error rate on voice AI calls.

2

Query call_timeline

Filter by time range, error type, or component. See per-component latency and error classification on every affected call.

3

Identify the root cause

The trace shows which component degraded, when it started, and how the platform attempted recovery.

4

Fix and verify

Update the prompt, swap the model, or adjust the timeout. Verify the fix in the same event stream.

Operational analytics at scale

The call_timeline feed provides every event from every call in a flat, queryable format. Export to Snowflake, BigQuery, Redshift, or any warehouse for operational analytics at scale.

Frequently Asked Questions

FAQ

Do I need to add instrumentation to my agent code?

No. Per-component latency, barge-in analytics, step transitions, and error classification are captured automatically by the platform. Your agent code requires zero instrumentation.

Can I use my existing APM tools?

Yes. The call_timeline feed exports structured events to any data warehouse or analytics pipeline. You can use your existing tools alongside native observability.

What are barge-in analytics?

Every time a caller interrupts the AI, the platform records how many milliseconds of audio played, what text the caller approximately heard, and what they said after interrupting. At scale, this reveals prompt optimization opportunities.

How does error recovery work?

Non-fatal errors trigger recovery phrases automatically. The caller may never notice. Fatal errors execute a graceful shutdown with a hangup hook that captures final state for debugging.

Is observability included in the $0.16/min price?

Yes. Per-component latency, barge-in analytics, error taxonomy, and the call_timeline feed are all included. No separate APM subscription required.

Try it now

Sigmond Runs on SignalWire

A voice and video AI agent built on the SignalWire SDK, wired to a live knowledge base, able to see what you show him. Build the same thing on voice, phone, WhatsApp, or SIP, or an entire white-label platform with SignalWire as the network underneath.

Sigmond

Trusted by 2,000+ Companies

Debug in Minutes, Not Hours.

Build on a platform where every component is instrumented and every event is correlated. No third-party APM required.

Debug in Minutes, Not Hours.

Build on a platform where every component is instrumented and every event is correlated. No third-party APM required.

Debug in Minutes, Not Hours.

Build on a platform where every component is instrumented and every event is correlated. No third-party APM required.

Debug in Minutes, Not Hours.

Build on a platform where every component is instrumented and every event is correlated. No third-party APM required.