developers.home-assistant/docs/intent_handling.md
Ville Skyttä 770185004b
Code block improvements (#382)
* Use f-strings instead of .format()

* Code block language marker fixes

* Make example code blocks syntactically valid Python

* Run all python code blocks through black

https://github.com/scop/misc/blob/master/black_markdown.py

* Add some missing code block language markers

* Use shell language consistently to mark shell code blocks

* Undo folding of some example dicts

* Remove outdated OrderedDict comments per Python 3.7, replace with plain dict
2020-01-13 21:55:41 +02:00

1.2 KiB

title
Handling intents

Any component can register to handle intents. This allows a single component to handle intents fired from multiple voice assistants.

A component has to register an intent handler for each type that it wants to handle. Intent handlers have to extend homeassistant.helpers.intent.IntentHandler

import asyncio
from homeassistant.helpers import intent

DATA_KEY = "example_key"


@asyncio.coroutine
def async_setup(hass, config):
    hass.data[DATA_KEY] = 0
    intent.async_register(hass, CountInvocationIntent())


class CountInvocationIntent(intent.IntentHandler):
    """Handle CountInvocationIntent intents."""

    # Type of intent to handle
    intent_type = "CountInvocationIntent"

    # Optional. A validation schema for slots
    # slot_schema = {
    #     'item': cv.string
    # }

    @asyncio.coroutine
    def async_handle(self, intent_obj):
        """Handle the intent."""
        intent_obj.hass.data[DATA_KEY] += 1

        response = intent_obj.create_response()
        response.async_set_speech(
            f"This intent has been invoked {intent_obj.hass.data[DATA_KEY]} times"
        )
        return response