Skip to content

Commit

Permalink
Add custom end_session
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexxIT committed Oct 3, 2020
1 parent 1126e88 commit e6a0492
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

custom_components/yandex_dialogs/__pycache__/
32 changes: 32 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
yandex_dialogs:
name: Умный дом # должно быть уникальное имя вашего навыка
```
У вас должен быть настроен `exernal_url`. Это можно сделать либо в GUI (`http://ip:8123/config/core`), либо в [YAML](https://www.home-assistant.io/docs/configuration/basic/).

После запуска в панели уведомлений Home Assistant будет сообщение с ссылкой на ваш навык.

Expand Down Expand Up @@ -172,6 +174,36 @@ automation:
{% endif %}
```

### Управление продолжением диалога

Фраза "Алиса включи навык Умный дома" включит навык и навык будет ждать вашей команды.

Фраза "Алиса спроси у Умного дома сколько градусов в зале" - вызовет ваш навык, получит ответ и тут же выйдет из него назад к Алисе.

Чтоб изменить это поведение, используйте параметр `end_session`. С ним вы можете либо продолжить разговор при фразе "Алиса спроси у Умного дома...". Либо прервать диалог в любом месте. Параметр опциональный при вызове `event: yandex_intent_response`.

```yaml
intent_script:
yandex_default:
action:
- service: persistent_notification.create
data:
title: Команда из Яндекса
message: "{{ text }}"
- event: yandex_intent_response
event_data:
end_session: True
speech:
text: >-
{% if text == 'привет' %}
{{ ['слушаю', 'здесь я', 'на связи']|random }}
{% elif text == 'температура в зале' %}
Температура {{ states("sensor.temperature_hall")|round }} °C
{% else %}
Не могу выполнить: {{ text }}
{% endif %}
```

### Настройка Интентов в Яндекс.Диалогах

- `$room` - слово с долларом это переменная
Expand Down
14 changes: 11 additions & 3 deletions custom_components/yandex_dialogs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ async def async_setup(hass: HomeAssistantType, hass_config: dict):
hass.http.register_view(dialog)

async def listener(event: Event):
dialog.response_text = event.data['text']
dialog.response_text = event.data.get('text')
dialog.response_end_session = event.data.get('end_session')
dialog.response_waiter.set()

hass.bus.async_listen('yandex_intent_response', listener)
Expand All @@ -50,6 +51,7 @@ class YandexDialog(HomeAssistantView):
requires_auth = False

response_text = None
response_end_session = None
response_waiter = asyncio.Event()

def __init__(self, hass: HomeAssistantType, user_ids: list):
Expand Down Expand Up @@ -106,6 +108,7 @@ async def post(self, request: web.Request) -> web.Response:
_LOGGER.debug(f"Request: {slots}")

self.response_text = None
self.response_end_session = None

try:
if intent_type in self.hass.data.get('intent', {}):
Expand All @@ -130,9 +133,14 @@ async def post(self, request: web.Request) -> web.Response:
except:
text = ''

_LOGGER.debug(f"Response: {text}")
if self.response_end_session is not None:
end_session = self.response_end_session
else:
end_session = (data['session']['new'] and
request['command'] != '')

_LOGGER.debug(f"Response: {text}, end_session: {end_session}")

end_session = data['session']['new'] and bool(request['command'])
return web.json_response({
'response': {
'text': text,
Expand Down

0 comments on commit e6a0492

Please sign in to comment.