Skip to main content
turncall-demo is a small server for a “talk to an agent” button on a website. It runs the real voice pipeline — the agent’s own STT, LLM and TTS, Silero VAD, Smart Turn — over WebRTC, with no database, Redis, project or carrier. The agents come from a file and the provider keys from the environment, so it runs where the platform cannot: a container that starts per visitor and is thrown away after the call. It authenticates nothing. Put it behind something that decides who may call — a CAPTCHA, a rate limit, a daily budget — because every minute is your provider bill.

Run it

It is the TurnCall image with another command:
The agents file maps a name to an agent config, in the shape POST /v1/agents takes as config (Agents). The first is the default:
A demo call has nothing to write to, so an agent may use only what needs no platform. The server refuses to start — naming the agent and the field — on an agent with:
  • a tool other than end_call (which says goodbye and hangs up), or a webhook tool
  • MCP servers, knowledge bases, ambience or a video avatar
An unknown field is refused too, as on the API. Every agent’s max_call_duration_seconds is capped at DEMO_MAX_CALL_SECONDS.

Settings

Provider keys are the platform’s usual variables (OPENAI_API_KEY, DEEPGRAM_API_KEY, …). Without one an agent needs, the call is refused with a 503 naming it.

Endpoints

The browser speaks to it with pipecat’s SmallWebRTCTransport, as it does to /v1/webrtc/connect. The agent is named in requestData:
On SIGTERM it stops taking calls and lets the one on the line finish, as the API does (graceful shutdown).

What it does not do

No call is stored: no transcript, recording, events, webhooks or post-call analysis. Nothing reaches a project, so project credentials, limits and suppression lists do not apply — the server’s own DEMO_MAX_CALLS and whatever fronts it are the only limits.