Skip to content

YandexDialogs

Alex X edited this page Dec 12, 2021 · 6 revisions

Пример диалога с колонкой

  • У вас должен быть настроен компонент YandexDialogs, для его работы нужен внешний HTTPS-доступ в ХА
  • С помощью этого компонента вы должны создать свой диалог с именем из двух слов, например "Умный дом"
  • У диалога должна быть включена настройка Хранилище данных (включается автоматически при создании диалога из компонента)
  • У вас есть две секунды, чтоб в автоматизации ответить на вопрос Диалога, дольше Алиса не ждёт
  • При анализе ответов пользователя вы можете использовать Интенты Яндекса, например на ответ "да" или "хорошо" придёт intent: YANDEX.CONFIRM
  • При желании, вы можете создавать свои интенты, чтоб не "парсить" сложные ответы пользователя средствами шаблонов ХА
  • Если пользователь ничего не ответит диалогу - колонка на некоторое время останется "внутри" Диалога, и первая команда колонке попадёт не в Алису, а в ваш Диалог
  • Вы можете делать подобные автоматизации средствами Node-RED

Вариант 1

Продолжение диалога через автоматизации. Каждая автоматизация это новый шаг диалога.

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: Ну нет, так нет

Вариант 2

Старт и продолжение диалога в едином скрипте, используя 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">Рота, подъем!
Clone this wiki locally