-
Notifications
You must be signed in to change notification settings - Fork 127
YandexDialogs
Alex X edited this page Dec 12, 2021
·
6 revisions
- У вас должен быть настроен компонент YandexDialogs, для его работы нужен внешний HTTPS-доступ в ХА
- С помощью этого компонента вы должны создать свой диалог с именем из двух слов, например "Умный дом"
- У диалога должна быть включена настройка Хранилище данных (включается автоматически при создании диалога из компонента)
- У вас есть две секунды, чтоб в автоматизации ответить на вопрос Диалога, дольше Алиса не ждёт
- При анализе ответов пользователя вы можете использовать Интенты Яндекса, например на ответ "да" или "хорошо" придёт
intent: YANDEX.CONFIRM
- При желании, вы можете создавать свои интенты, чтоб не "парсить" сложные ответы пользователя средствами шаблонов ХА
- Если пользователь ничего не ответит диалогу - колонка на некоторое время останется "внутри" Диалога, и первая команда колонке попадёт не в Алису, а в ваш Диалог
- Вы можете делать подобные автоматизации средствами Node-RED
Продолжение диалога через автоматизации. Каждая автоматизация это новый шаг диалога.
script:
yandex_dialog1:
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station_mini # поменяйте на вашу колонку
data:
media_content_id: <speaker is_whisper="true">Хозяин, уже утро, пора вставать!
media_content_type: dialog:умный дом:утро # имя диалога и "тег" диалога
automation:
- trigger:
platform: event
event_type: yandex_intent
event_data:
session: { dialog: утро } # тот самый тег в media_content_type
action:
choose:
# проверяем варианты ответов, таких проверок может быть несколько
- conditions: "{{ trigger.event.data.text in ['хорошо','конечно','уже встаю'] }}"
sequence:
- event: yandex_intent_response
event_data:
text: Включить вам чайник? # ответ пользователю (text без спецэффектов)
session: { dialog: утро2 } # новый "тег" диалога
end_session: False # НЕ заканчиваем диалог
default: # если все прошлые проверки ответов НЕ выполнись
- event: yandex_intent_response
event_data:
tts: <speaker effect="megaphone">Рота, подъем! # tts - поддерживает спецэффекты
- trigger:
platform: event
event_type: yandex_intent
event_data:
session: { dialog: утро2 } # новый тег для продолжения разговора
action:
choose:
- conditions: "{{ trigger.event.data.text in ['да','конечно','давай'] }}"
sequence:
- event: yandex_intent_response
event_data:
text: Запускаю # ответ пользователю
- service: homeassistant.turn_on # и выполнение любого действия в ХА
target:
entity_id: switch.kettle
default: # если все прошлые проверки ответов НЕ выполнись
- event: yandex_intent_response
event_data:
text: Ну нет, так нет
Старт и продолжение диалога в едином скрипте, используя wait_for_trigger
с timeout
. Пример полностью повторяет Вариант 1.
script:
alice_dialog2:
sequence:
- service: media_player.play_media
entity_id: media_player.yandex_station_mini
data:
media_content_id: <speaker is_whisper="true">Хозяин, уже утро, пора вставать!
media_content_type: dialog:умный дом:утро
- wait_for_trigger:
platform: event
event_type: yandex_intent
event_data:
session: { dialog: утро }
timeout:
seconds: 15
- choose:
- conditions: "{{ wait.trigger.event.data.text in ['хорошо','конечно','уже встаю'] }}"
sequence:
- event: yandex_intent_response
event_data:
text: Включить вам чайник?
session: { dialog: утро2 }
end_session: False
- wait_for_trigger:
platform: event
event_type: yandex_intent
event_data:
session: { dialog: утро2 }
timeout:
seconds: 15
- choose:
- conditions: "{{ wait.trigger.event.data.text in ['да','конечно','давай'] }}"
sequence:
- event: yandex_intent_response
event_data:
text: Запускаю
- service: homeassistant.turn_on
target:
entity_id: switch.kettle
default:
- event: yandex_intent_response
event_data:
text: Ну нет, так нет
default:
- event: yandex_intent_response
event_data:
tts: <speaker effect="megaphone">Рота, подъем!