mirror of
https://github.com/home-assistant/developers.home-assistant.git
synced 2025-05-01 08:47:15 +00:00

* 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
44 lines
1.2 KiB
Markdown
44 lines
1.2 KiB
Markdown
---
|
|
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`
|
|
|
|
```python
|
|
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
|
|
```
|