Hello Live is an OpenAI GPT-Live app that supports both WebRTC and SIP (telephone) users. You can access the app via WebRTC at hello-live.val.run, or via SIP by calling 425-800-0073.
This demo shows off the GPT-Live WebRTC session API, the SIP webhook flow, and
the server-side sideband websocket used to observe and control a session. It
uses Responses delegation: gpt-live-1 handles the spoken conversation
while a backend Responses model (gpt-5.6-luna) handles reasoning and tool
calls (e.g. end_call). Demo calls are limited to 3 minutes.
If you remix the app, you'll just need to pop in your own OPENAI_API_KEY (from
platform.openai.com), and if you want SIP, the
OPENAI_SIGNING_SECRET. For SIP you also need to subscribe your project's
webhook to the live.transport.incoming event.
- WebRTC Flow:
- Browser connects to frontend and creates a WebRTC offer
/rtcendpoint posts the offer + session config toPOST /v1/live/sessionsand returns the SDP answer + session ID- sideband observer attached to monitor the session
- SIP Flow:
- Phone call triggers the
live.transport.incomingwebhook /sipendpoint verifies the webhook and accepts the call with the session config- sideband observer attached to monitor the session
- Phone call triggers the
- Delegation:
- GPT-Live delegates tool use to the Responses backend
- Function calls arrive on the sideband wrapped in
response.event - The observer returns results with
response.item.createand continues the backend withresponse.create
Rendering mermaid diagram...
GET /- serves the WebRTC-based appPOST /rtc- creates a new GPT-Live WebRTC session; body is the SDP offer, response is{ session: { id }, transport: { type: "webrtc", sdp } }POST /sip- handles thelive.transport.incomingwebhook for an incoming SIP callPOST /observer/:sessionId- internal endpoint to attach a GPT-Live sideband websocket for session control
├── frontend/
│ └── index.html # HTML/JS application for WebRTC
├── main.tsx # Main entrypoint for the val.town app
└── routes/
├── agent.ts # GPT-Live session configuration, delegation, and tools
├── observer.ts # Server-side sideband control for SIP & WebRTC
├── rtc.ts # WebRTC session setup
├── sip.ts # SIP webhook handling and session setup
└── utils.ts # Various HTTP helpers
frontend/index.htmlmain.tsxroutes/agent.tsroutes/observer.tsroutes/rtc.tsroutes/sip.tsroutes/utils.ts
- Drive
audioActive/callEndingfrom reflectedsession.output_audio.deltaevents so hangup waits for the goodbye to finish playing - Send
session.closefrom the browser on Stop and wait forsession.closed - Render transcript deltas as captions