Skip to main content

WebSocket Connection Issues

Connection Fails to Establish

IssueSolution
Invalid WebSocket URLEnsure URL starts with wss:// and is publicly accessible
Firewall blockingCheck that your server allows inbound WebSocket connections
SSL certificate issuesVerify your SSL certificate is valid and not expired
ngrok tunnel not runningRestart ngrok and update your XML with the new URL

Connection Drops Mid-Call

IssueSolution
Slow connectionMonitor DegradedStream status callbacks. Plivo buffers up to 40s of audio
Server crashImplement graceful error handling and auto-reconnection logic
TimeoutEnsure your WebSocket server sends periodic pings to keep connection alive

Audio Quality Issues

No Audio Received

  1. Verify audioTrack setting - Ensure it’s set to both or inbound in your Stream XML
  2. Check WebSocket handler - Confirm your onMedia handler is registered before calling start()
  3. Verify call is connected - The start event should fire before any media events

No Audio Playback to Caller

  1. Verify bidirectional mode - Ensure bidirectional="true" in your Stream XML
  2. Check content type match - The contentType and sampleRate in your playAudio message must match your Stream XML settings
  3. Verify audio format - Send raw audio data only (no WAV headers)

Distorted or Garbled Audio

IssueSolution
Sample rate mismatchEnsure audio sample rate matches Stream XML configuration
Wrong codecUse μ-law (audio/x-mulaw) for 8kHz or Linear PCM for 16kHz
Audio headers includedRemove file headers from audio payload - send raw audio only

Performance Issues

High Latency

ComponentTarget LatencySolution
Speech-to-Text< 200msUse streaming STT, choose regional endpoints
LLM Processing< 500msUse faster models (GPT-4o-mini), implement streaming
Text-to-Speech< 200msUse streaming TTS, pre-generate common responses
Network< 100msDeploy server close to your callers

Slow Response Times

  1. Use μ-law 8kHz - Native telephony format requires no transcoding
  2. Deploy regionally - Place your WebSocket server near your caller locations
  3. Stream audio - Send TTS audio as it’s generated, don’t wait for completion
  4. Connection pooling - Reuse AI service connections

Status Callback Events

Monitor your statusCallbackUrl for stream lifecycle events:
EventDescriptionAction
StartStreamStream connected successfullyLog for monitoring
StopStreamStream ended normallyClean up resources
DroppedStreamConnection failed or terminatedInvestigate and alert
DegradedStreamSlow connection detectedMonitor buffer levels

DroppedStream Reasons

  • WebSocket connection failed during initiation
  • WebSocket connection terminated during streaming
  • WebSocket connection terminated due to slow connection

Debug Logs

Access audio stream logs in the Plivo Console:
  1. Go to VoiceLogsCalls
  2. Click on the call to view details
  3. Find the Audio Streams section with:
    • Stream UUID
    • Start/end times
    • Duration and billing
    • Hangup reason
    • Debug logs link

Sample Debug Log

{
  "CallUUID": "7aea0680-1f8c-46c2-a04f-990e2e0d52eb",
  "Event": "DroppedStream",
  "Error": "connection disconnected with the remote service",
  "ServiceURL": "wss://yourstream.ngrok.io/audiostream",
  "StreamID": "26b95870-2b2f-45be-88dc-aedd0fcccec6",
  "Timestamp": "2024-10-14 13:42:33"
}

Common Error Messages

ErrorCauseSolution
connection_failedWebSocket URL unreachableCheck URL accessibility and SSL
authentication_failedSignature validation failedVerify Auth Token in validation code
invalid_content_typeAudio format mismatchMatch contentType between XML and playAudio
buffer_overflowSending audio too fastImplement rate limiting on audio sends