Skip to main content

Firing intents

If your code matches the user's speech or text to intents, you can let the intent be handled by Home Assistant. This can be done from inside your own integration, or via the generic Intent handle API.

When you fire an intent, you will get a response back or an error will be raised. It is up to your code to return the result to the user.

HTTP API

When the intent integration is loaded, an HTTP API endpoint is available at /api/intent/handle. You can POST JSON data to it containing an intent name and it's data:

{
"name": "HassTurnOn",
"data": {
"name": "Kitchen Light"
}
}

Home Assistant integration

Example code to handle an intent in Home Assistant.

from homeassistant.helpers import intent

intent_type = "TurnLightOn"
slots = {"entity": {"value": "Kitchen"}}

try:
intent_response = await intent.async_handle(
hass, "example_component", intent_type, slots
)

except intent.UnknownIntent as err:
_LOGGER.warning("Received unknown intent %s", intent_type)

except intent.InvalidSlotInfo as err:
_LOGGER.error("Received invalid slot data: %s", err)

except intent.IntentError:
_LOGGER.exception("Error handling request for %s", intent_type)

The intent response is an instance of homeassistant.helpers.intent.IntentResponse.

NameTypeDescription
intentIntentInstance of intent that triggered response.
speechDictionarySpeech responses. Each key is a type. Allowed types are plain and ssml.
repromptDictionaryReprompt responses. Each key is a type. Allowed types are plain and ssml.
This is used to keep the session open when a response is required from the user. In these cases, speech usually is a question.
cardDictionaryCard responses. Each key is a type.

Speech dictionary values:

NameTypeDescription
speechStringThe text to say
extra_dataAnyExtra information related to this speech.

Reprompt dictionary values:

NameTypeDescription
repromptStringThe text to say when user takes too long to respond
extra_dataAnyExtra information related to this speech.

Card dictionary values:

NameTypeDescription
titleStringThe title of the card
contentAnyThe content of the card