Troubleshooting
Wake phrase not matching
You subscribed to glasses.audio.transcriptions() and matched a wake phrase, but the handler doesn't run when you say it. Common causes and fixes.
Coming soon — this stub will become the full walkthrough.
Your handler subscribes to glasses.audio.transcriptions() and matches strings against the Final transcripts, but the if branch that fires your business logic doesn't run. Most-common causes:
Symptoms this page will cover
- Wake phrase matches in the browser simulator but not on real glasses (or vice-versa)
- Wake phrase matches intermittently — sometimes fires, sometimes silent
- Wrong wake phrase wins — the user says phrase A and the handler reacts as if phrase B was said
- Final transcripts never arrive at all
- Partial transcripts arrive but no Final
- Transcripts arrive in the wrong case / with punctuation / with apostrophes that break string matching
Quick checklist (the things to verify first)
glasses.toggles.statesnapshot. All four of these must be on for transcripts to flow:transcription_enabled = true,audio_capture_enabled = true,privacy_mode = false,listening_mode != "off". Any one closed and you'll see no Final transcripts.- You're matching on
isFinal, not partial. Partial transcripts emit 5–20 per second and partial text can match a wake phrase mid-utterance. Pattern-match the.final(...)variant before string comparison. - Casing + punctuation normalization on the read side. The library does not normalize —
transcript.textis what the recognizer returned, verbatim. Match againsttranscript.text.lowercased().replace(...)to cover variance. SeesearchDocs(topic: 'voice_ux_guide')for the canonical normalizer. - You called
getVoiceCommandGuidanceon the phrases. The tool catches homophone collisions, ambiguity against existing phrases, hard-to-recognize words, and Meta wake-word conflicts — issues the runtime can't surface back as "didn't match." getEventLog(filter: 'audio')in the simulator session. If you see Final transcripts in the log but your handler'sifdoesn't run, the string-match logic is the culprit. If you don't see Final transcripts at all, the toggle state or the connection is the culprit.
Related
searchDocs(topic: 'voice_ux_guide')— phrase design rules + the canonical normalize() helpersearchDocs(topic: 'toggles')— full toggle gating modelgetCapabilityGuide(feature: 'transcription_incremental')— call shape + gotchasgetCodeExample(pattern: 'voice_qa_assistant')— full working composition to peel from