{"record":{"id":"527268f2704d5ca2","repo":"home-assistant/core","slug":"no-answer-from-question","errorCode":null,"errorMessage":"No answer from question","messagePattern":"No answer from question","errorType":"exception","errorClass":"HomeAssistantError","httpStatus":null,"severity":"warning","filePath":"homeassistant/components/assist_satellite/entity.py","lineNumber":379,"sourceCode":"            question_media_id,\n            preannounce_media_id=preannounce_media_id if preannounce else None,\n        )\n\n        if self._is_announcing:\n            raise SatelliteBusyError\n\n        self._is_announcing = True\n        self._set_state(AssistSatelliteState.RESPONDING)\n        self._ask_question_future = asyncio.Future()\n\n        try:\n            # Wait for announcement to finish\n            await self.async_start_conversation(announcement)\n\n            # Wait for response text\n            response_text = await self._ask_question_future\n            if response_text is None:\n                raise HomeAssistantError(\"No answer from question\")\n\n            if not answers:\n                return AssistSatelliteAnswer(id=None, sentence=response_text)\n\n            return self._question_response_to_answer(response_text, answers)\n        finally:\n            self._is_announcing = False\n            self._set_state(AssistSatelliteState.IDLE)\n            self._ask_question_future = None\n\n    def _question_response_to_answer(\n        self, response_text: str, answers: list[dict[str, Any]]\n    ) -> AssistSatelliteAnswer:\n        \"\"\"Match text to a pre-defined set of answers.\"\"\"\n\n        # Build intents and match\n        intents = Intents.from_dict(\n            {","sourceCodeStart":361,"sourceCodeEnd":397,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/assist_satellite/entity.py#L361-L397","documentation":"Raised inside AssistSatelliteEntity's ask-question flow after the entity announced the question and awaited self._ask_question_future, but the future resolved to None. None is how the pipeline signals that the user gave no response (silence, timeout, or the pipeline ended without a final answer).","triggerScenarios":"async_internal_ask_question completes the announcement but the conversation pipeline times out or the resident interrupts nothing, so the internal wake/end handler sets the future's result to None; satellite device disconnects before answering; STT picked up nothing so the pipeline finished without a response.","commonSituations":"User does not reply to the spoken question within the pipeline timeout; microphone muted or too far away; satellite dropped offline mid-question.","solutions":["Treat this as expected UX: catch HomeAssistantError and re-ask or fall back to a default action","Check the satellite's microphone/volume and the STT pipeline logs to confirm audio was captured","Increase the pipeline timeout or retry the question if silence was accidental","Verify the device stayed connected during the whole question (check entity state history)"],"exampleFix":"# before\nanswer = await satellite.async_internal_ask_question(question=\"Continue?\")\n\n# after\ntry:\n    answer = await satellite.async_internal_ask_question(question=\"Continue?\")\nexcept HomeAssistantError as err:\n    if \"No answer from question\" in str(err):\n        answer = None  # user stayed silent; take default branch\n    else:\n        raise","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    answer = await satellite.async_internal_ask_question(question=q, answers=a)\nexcept HomeAssistantError as err:\n    if \"No answer from question\" in str(err):\n        answer = None  # user silent -> default branch\n    else:\n        raise","preventionTips":["Treat 'no answer' as a normal outcome and design a default branch","Check satellite state and mic levels before asking critical questions","Retries should be rate-limited; users often intend silence"],"tags":["assist-satellite","voice","timeout","pipeline"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}