Realistic Avatars
LiveAvatar.start rejects with code 4001
LiveAvatar.start rejects with code 4001
TALKING_AVATAR_API_KEY is set on the server, has no extra spaces or quotes, and still appears on the dashboard’s API keys page. Create a new key if you lost it: keys are shown only once.Sessions end, or won't start, with code 4002
Sessions end, or won't start, with code 4002
A session ended with code 4003
A session ended with code 4003
No WebSocket in this runtime
No WebSocket in this runtime
WebSocket. Upgrade to Node.js 22, or install ws and pass it in:The avatar shows but there's no sound
The avatar shows but there's no sound
view.connect() from a click. If the status is muted, show a button that calls view.unmute().The voice is heard twice
The voice is heard twice
<audio> element, a speaker stream, or track.attach() in LiveKit). The avatar plays the voice itself; remove the other playback.The voice sounds too fast, too slow, or like noise
The voice sounds too fast, too slow, or like noise
sampleRate doesn’t match your audio, or the audio isn’t raw PCM16 mono. Ask your TTS for raw PCM, pass its exact sample rate, and decode MP3, Opus or WAV (and strip WAV headers) first. See Stream audio.The page never connects
The page never connects
- Check that your
/avatarroute returnsavatar.handleView(req.body)as JSON, and parses JSON bodies. - Check that the
LiveAvatarfor that conversation is still running (not closed). - Users behind strict firewalls may need a TURN server: pass it in
iceServers.
handleView throws 'handleView is for direct output'
handleView throws 'handleView is for direct output'
livekit option. In LiveKit mode, the avatar joins your room and your LiveKit client plays it: you don’t need handleView or LiveAvatarView.Voice Agents
Callers see 'This agent can't take calls right now'
Callers see 'This agent can't take calls right now'
Callers see 'This agent isn't available'
Callers see 'This agent isn't available'
Callers see 'Microphone needed'
Callers see 'Microphone needed'
allow="microphone; autoplay".Callers see 'Call limit reached'
Callers see 'Call limit reached'
The agent says '[Company]' or other placeholders
The agent says '[Company]' or other placeholders
[placeholders]. The Agent tab shows how many are left to fill in.The agent cuts callers off, or waits too long
The agent cuts callers off, or waits too long
A tool isn't called, or fails
A tool isn't called, or fails
- Make the tool’s When to use it description specific, and mention the tool in the prompt.
- Your endpoint must be HTTPS, answer
POSTwith JSON within 10 seconds, and return a2xxstatus. - The Calls tab shows how many tool calls each call made; your server’s logs show what it received.
The webhook shows 'Couldn't reach it' or 'Failed'
The webhook shows 'Couldn't reach it' or 'Failed'
2xx within 10 seconds. Check that it’s public HTTPS, accepts POST JSON, and that signature checks use the raw body and the right secret. We don’t retry; the call and its transcript are still in the dashboard.Signature verification fails
Signature verification fails
Account and billing
I didn't get a sign-in code
I didn't get a sign-in code
'No account found for this email'
'No account found for this email'
My credits haven't arrived after paying
My credits haven't arrived after paying
Auto top-up didn't charge
Auto top-up didn't charge