WebSocket Connection Issues
Connection Fails to Establish
| Issue | Solution |
|---|---|
| Invalid WebSocket URL | Ensure URL starts with wss:// and is publicly accessible |
| Firewall blocking | Check that your server allows inbound WebSocket connections |
| SSL certificate issues | Verify your SSL certificate is valid and not expired |
| ngrok tunnel not running | Restart ngrok and update your XML with the new URL |
Connection Drops Mid-Call
| Issue | Solution |
|---|---|
| Slow connection | Monitor DegradedStream status callbacks. Plivo buffers up to 40s of audio |
| Server crash | Implement graceful error handling and auto-reconnection logic |
| Timeout | Ensure your WebSocket server sends periodic pings to keep connection alive |
Audio Quality Issues
No Audio Received
- Verify
audioTracksetting - Ensure it’s set tobothorinboundin your Stream XML - Check WebSocket handler - Confirm your
onMediahandler is registered before callingstart() - Verify call is connected - The
startevent should fire before anymediaevents
No Audio Playback to Caller
- Verify bidirectional mode - Ensure
bidirectional="true"in your Stream XML - Check content type match - The
contentTypeandsampleRatein yourplayAudiomessage must match your Stream XML settings - Verify audio format - Send raw audio data only (no WAV headers)
Distorted or Garbled Audio
| Issue | Solution |
|---|---|
| Sample rate mismatch | Ensure audio sample rate matches Stream XML configuration |
| Wrong codec | Use μ-law (audio/x-mulaw) for 8kHz or Linear PCM for 16kHz |
| Audio headers included | Remove file headers from audio payload - send raw audio only |
Performance Issues
High Latency
| Component | Target Latency | Solution |
|---|---|---|
| Speech-to-Text | < 200ms | Use streaming STT, choose regional endpoints |
| LLM Processing | < 500ms | Use faster models (GPT-4o-mini), implement streaming |
| Text-to-Speech | < 200ms | Use streaming TTS, pre-generate common responses |
| Network | < 100ms | Deploy server close to your callers |
Slow Response Times
- Use μ-law 8kHz - Native telephony format requires no transcoding
- Deploy regionally - Place your WebSocket server near your caller locations
- Stream audio - Send TTS audio as it’s generated, don’t wait for completion
- Connection pooling - Reuse AI service connections
Status Callback Events
Monitor yourstatusCallbackUrl for stream lifecycle events:
| Event | Description | Action |
|---|---|---|
StartStream | Stream connected successfully | Log for monitoring |
StopStream | Stream ended normally | Clean up resources |
DroppedStream | Connection failed or terminated | Investigate and alert |
DegradedStream | Slow connection detected | Monitor 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:- Go to Voice → Logs → Calls
- Click on the call to view details
- Find the Audio Streams section with:
- Stream UUID
- Start/end times
- Duration and billing
- Hangup reason
- Debug logs link
Sample Debug Log
Common Error Messages
| Error | Cause | Solution |
|---|---|---|
connection_failed | WebSocket URL unreachable | Check URL accessibility and SSL |
authentication_failed | Signature validation failed | Verify Auth Token in validation code |
invalid_content_type | Audio format mismatch | Match contentType between XML and playAudio |
buffer_overflow | Sending audio too fast | Implement rate limiting on audio sends |
Related
- Audio Streaming Guide - Complete streaming documentation
- Best Practices - Debug logs and monitoring
- Stream Event Protocol - WebSocket message reference