Overview
A reference implementation demonstrating how to stream a pre-recorded WAV file to a live phone call using Teler’s Media Streaming Bridge over WebSockets, while recording and collecting the caller’s responses.
This project demonstrates a simple but powerful voice workflow: initiate an outbound phone call, stream a pre-recorded WAV file to the callee over WebSockets, capture the callee’s responses in real time, and store the call recording for later review and analysis.
Unlike AI voice agents, there’s no real-time speech generation or conversational AI involved. The caller hears a pre-recorded audio message, and their responses are recorded and made available after the call. This makes the integration lightweight, predictable, and ideal for one-way announcements, surveys, campaigns, and response collection workflows.
Who is this for? Teams that want to automate voice outreach without deploying AI agents.
Key Features
- Pre-recorded audio, no AI pipeline — Stream a WAV file directly into a live call over WebSockets, with no STT, LLM, or TTS involved.
- Captures caller responses — Records whatever the caller says back, available for review after the call.
- Dockerized deployment — Clone the repo and run it with a single Docker Compose command.
- Recordings accessible two ways — View and manage recordings from the FreJun Teler Dashboard, or retrieve them programmatically through the Recording API.
Common Use Cases
Appointment reminders
Play a pre-recorded reminder and collect customer confirmations or responses.
Recruitment and candidate screening
Play screening questions and collect recorded candidate answers.
Customer feedback campaigns
Gather voice feedback without requiring a live agent or AI assistant.
How to Integrate
Prerequisites
- Node.js 18+
- Docker and Docker Compose
- A Teler API key (get one at platform.frejun.ai)
- An ngrok account and auth token
Step 1: Clone and configure
git clone https://github.com/frejun-tech/teler-wav-bridge.git
cd teler-wav-bridge
cp .env.example .env
Update the .env file with your credentials.
Step 2: Run with Docker
docker compose up -d --build
Environment variables
| Variable | Description | Default |
|---|---|---|
TELER_SAMPLE_RATE |
Audio sample rate used for streaming | 8k |
TELER_API_KEY |
Your Teler API key | Required |
NGROK_AUTHTOKEN |
Your ngrok auth token | Required |
Audio requirements
For best results, audio files should be:
- WAV format
- PCM S16LE
- Mono
- 8000 Hz sample rate
This format aligns with standard telephony audio and ensures optimal playback quality during calls.
API endpoints
Health & Status
GET /– Health check and server informationGET /health– Service statusGET /ngrok-status– Current ngrok status and public URL
Calls
POST /api/v1/calls/initiate-call– Initiate an outbound callPOST /api/v1/calls/flow– Retrieve call flow configuration
Media Streaming
WebSocket /api/v1/calls/media-stream– Streams pre-recorded WAV audio to the call and receives caller audio events.
Webhooks
POST /api/v1/webhooks/receiver– Receives call status and media events from Teler.
Call initiation example
curl -X POST "https://your_ngrok_domain/api/v1/calls/initiate-call" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+918064xxx",
"toNumber": "+919967xxx"
}'
Integration at a Glance
| Requirements | Node.js 18+, Docker and Docker Compose, a Teler API key, an ngrok account and auth token |
| Setup type | Self-hosted bridge – clone the repo, configure .env, and run via Docker Compose; not dashboard-configured |
| Support | support@frejun.com, or file an issue directly on the GitHub repo for bridge-specific bugs |