session.events.onTranscription(async (data) => { if (!data.isFinal) return; const text = data.text.toLowerCase(); if (text.includes('weather')) { await session.audio.speak('The weather is sunny and 72 degrees'); } else if (text.includes('time')) { const time = new Date().toLocaleTimeString(); await session.audio.speak(`The time is ${time}`); } else if (text.includes('help')) { await session.audio.speak('You can ask about weather, time, or directions'); }});
// ✅ Goodawait session.audio.speak('Message sent');// ❌ Avoid - too longawait session.audio.speak( 'Your message has been successfully sent to the recipient and they will receive it shortly');
Wait for Completion
Don’t overlap audio:
Copy
Ask AI
// ✅ Good - sequentialawait session.audio.speak('First message');await session.audio.speak('Second message');// ❌ Avoid - messages overlapsession.audio.speak('First message'); // No awaitsession.audio.speak('Second message'); // Plays immediately
Provide Visual Feedback
Combine audio with visual cues:
Copy
Ask AI
// ✅ Goodsession.layouts.showTextWall('Processing...');await session.audio.speak('Processing your request');// User gets both visual and audio feedback
Handle Audio-Only Devices
Not all devices have displays:
Copy
Ask AI
if (session.capabilities?.hasDisplay) { session.layouts.showTextWall('Hello!');}// Always provide audio for accessibilityawait session.audio.speak('Hello!');
if (!session.capabilities) { session.logger.warn('Capabilities not loaded'); return;}// Note: Audio should work on all devices// It routes through phone if glasses don't have speakers