diff --git a/src/components/configurator/VoiceAgentProvider.tsx b/src/components/configurator/VoiceAgentProvider.tsx index 535149e..b1ecaab 100644 --- a/src/components/configurator/VoiceAgentProvider.tsx +++ b/src/components/configurator/VoiceAgentProvider.tsx @@ -243,7 +243,7 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi body: JSON.stringify({ locale }), }); const tokenData = await tokenRes.json(); - if (!tokenData.success) throw new Error('Token generation failed'); + if (!tokenData.success) throw new Error(`Token generation failed: ${tokenData.error ?? tokenRes.status}`); const { apiKey, model, config } = tokenData; @@ -353,22 +353,26 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi } }; - ws.onerror = () => { + ws.onerror = (e) => { + console.error('[VoiceAgent] WebSocket error:', e); setStatus('error'); setErrorMessage('Connection error. Please try again.'); }; - ws.onclose = () => { + ws.onclose = (e) => { + console.log('[VoiceAgent] WebSocket closed:', e.code, e.reason); if (status === 'active') { setStatus('idle'); } }; } catch (error) { + console.error('[VoiceAgent] Start failed:', error); setStatus('error'); if (error instanceof DOMException && error.name === 'NotAllowedError') { setErrorMessage('Microphone access was denied.'); } else { - setErrorMessage('Failed to start conversation. Please try again.'); + const msg = error instanceof Error ? error.message : 'Unknown error'; + setErrorMessage(`Failed to start: ${msg}`); } } }, [locale, trackAmplitude, handleToolCall, playAudioChunk, addTranscript, status]);