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:POST /v1/agents
takes as config (Agents). The first is the default:
- 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
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’sSmallWebRTCTransport, 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 ownDEMO_MAX_CALLS and
whatever fronts it are the only limits.