The Exotel transport connects VoxCore to Exotel’s App Bazaar Voicebot applet. Calls arrive as WebSocket connections from Exotel’s infrastructure, using Pipecat’s built-in ExotelFrameSerializer.

Connection flow

Endpoint

WebSocket /exotel/{bot_id}
bot_id identifies which bot configuration to fetch from VoxBridge.

Audio format

PropertyValue
EncodingLINEAR16 (signed 16-bit PCM)
Sample rate8,000 Hz
ChannelsMono
TransportWebSocket (binary/JSON)

Handshake

Exotel uses Pipecat’s standard telephony WebSocket handshake. VoxCore calls parse_telephony_websocket() which auto-detects Exotel from the WebSocket messages and returns call metadata:
FieldMapped from
stream_idcall_data.stream_id
caller_idcall_data.from
didcall_data.to

Hangup behavior

Bot-initiated: VoxCore closes the WebSocket connection. The Exotel App Bazaar flow moves to the Hangup applet, which tears down the telephony call. Customer hangup: Exotel sends a stop event, then closes the WebSocket. VoxCore receives WebSocketDisconnect and captures disconnected_by = "customer".

Limitations

Call transfer is not supported. Exotel’s current Voicebot applet does not expose a dynamic call control API for mid-call transfers. Transfer support is deferred until Exotel adds this capability.

Prerequisites

  • Exotel account with App Bazaar access
  • App Bazaar flow configured: Call Start → [Voicebot Applet] → [Hangup Applet]
  • Voicebot applet WebSocket URL pointing to VoxCore’s /exotel/{bot_id} endpoint
  • No Exotel credentials needed in VoxCore — call control is flow-based