Яндекс Алиса
Алиса — это голосовой помощник от компании Яндекс, который умеет поддерживать диалог с пользователем и выполнять различные действия в приложении или на устройстве, где запущена Алиса.
Алиса работает в мобильном приложении Яндекс.Поиск на Android и iOS, в Яндекс.Навигаторе, в десктопной версии Яндекс.Браузера для Windows, а также на голосовой аудио-колонке Яндекс.Станция.
Сторонние разработчики могут создавать для Алисы дополнительные функции — навыки. Эти навыки доступны пользователям на всех платформах, где работает Алиса.
Как работают навыки
Для Aimylogic навык Алисы — это чат-бот с определенным сценарием.
Чтобы воспользоваться навыком, пользователь должен активировать его одной из специальных фраз. Вы указываете эти фразы в Яндекс.Диалогах, когда создаете навык. После этого Алиса переключает пользователя на диалог с навыком, и все запросы пользователя отправляются к нему.
Запустить навык в приложении с Алисой или на умном устройстве можно следующими способами:
- Через активационное имя без команды. В этом случае навык только запустится, а для дальнейших действий пользователь должен дать отдельную команду.
- Через активационное имя с командой. В таком случае навык запустится и сразу выполнит команду пользователя.
Активационное имя — это фраза, по которой активируется навык. По умолчанию активационное имя совпадает с именем навыка.
Запуск без команды возможен подобными фразами:
- Запусти навык активационное имя .
- Запусти чат с активационное имя .
- Сыграем в активационное имя .
- Давай поиграем в активационное имя .
Пример запуска без команды: Запусти чат с Just AI.
Запуск с командой возможен подобными фразами:
- Скажи активационное имя команда .
- Узнай у активационное имя команда .
- Попроси активационное имя команда .
- Спроси у активационное имя команда .
Пример запуска с командой: Узнай у Just AI, когда пройдет Conversation.
Чтобы выйти из навыка, пользователю нужно произнести одну из фраз:
Навык автоматически прекратит работу, если:
- Бот пришлет ответ, не соответствующий формату.
- Бот будет отвечать дольше 4.5 секунд. В этом случае бот отправит пользователю сообщение о том, что навык не отвечает.
Создайте навык для Алисы
- Продумайте, как должен работать ваш навык. Чем подробнее вы продумаете логику работы навыка, тем проще вам будет его создать.
- Создайте сценарий, по которому будет работать бот для навыка Алисы. Яндекс предъявляет ряд требований к навыкам, которые нужно учитывать при создании сценария.
- Подключите бота к каналу Алиса.
- Получите вебхук канала.
- Создайте навык в консоли разработчика Яндекс.
- Опубликуйте навык.
Добавьте канал Алиса
- В сценарии для Алисы перейдите на вкладку Каналы.
- В секции Голосовые ассистенты выберите Алиса. Откроется окно настроек канала.
- Нажмите Получить OAuth-токен. Вы будете перенаправлены на страницу авторизации в Яндекс.
Получите вебхук канала
Чтобы создать ваш навык в Яндекс.Диалогах, вам потребуется вебхук канала на стороне Aimylogic. На этот вебхук Алиса будет отправлять запросы пользователя после того, как навык будет активирован.
Нажмите Получить webhook рядом с подключенным каналом, чтобы скопировать вебхук в буфер обмена.
Создайте навык в консоли разработчика
Чтобы ваш навык начал работать в Алисе, его нужно создать в Яндекс.Диалогах.
- Зайдите на страницу Яндекс.Диалоги и нажмите Создать Диалог.
- Выберите Навык в Алисе в качестве типа диалога.
- Укажите имя для навыка. Если вы создаете публичный навык, убедитесь, что навыка с таким названием нет в официальном списке навыков.
- В секции Backend выберите опцию Webhook URL и вставьте вебхук.
- Нажмите Сохранить.
Протестируйте навык
Вы можете протестировать работу вашего навыка для Алисы в интерфейсе Яндекс.Диалогов. Для этого перейдите на вкладку Тестирование и отправьте сообщение боту.
При тестировании в консоли разработчика навык считается постоянно активированным, поэтому проверить работу активационных имен здесь нельзя.
Чтобы проверить работу активационных имен, протестируйте навык в одном из приложений Яндекса, используя тот же аккаунт Яндекс, что и при создании навыка.
Симулятор Яндекс.Станции
Если вы создаете навык для умной колонки Яндекс.Станция, вы можете воспользоваться нашим симулятором для тестирования навыка.
С помощью симулятора вы можете протестировать навык голосом в браузере, чтобы убедиться, что ваш навык хорошо работает на станциях, у которых отсутствует экран.
Опубликуйте навык
Пока вы не опубликуете навык, он будет недоступен пользователям Алисы. Чтобы опубликовать его, в настройках навыка:
- добавьте примеры активационных фраз;
- выберите категорию;
- добавьте описание навыка;
- загрузите иконку.
Когда вы добавите всю необходимую информацию о навыке, отправьте его на модерацию. Обычно Яндекс проводит модерацию в течение трех дней.
Если ваш навык не прошел модерацию, исправьте замечания и отправьте его на модерацию снова.
После прохождения модерации зайдите в настройки навыка в Яндекс.Диалогах и нажмите Опубликовать.
Яндекс диалоги что это?
Яндекс Диалоги – это возможность общения операторов чата с вашего сайта и клиента прямо со страницы поиска Яндекса.
Давайте разберем конкретнее.
Вы владелец сайта, который что-то продает или предоставляет какие-либо услуги? И, наверное, вам нужно чтобы потенциальный клиент имел возможность связаться с вами любым доступным способом и желательно сделал это как можно скорее. Для этого в последнее время владельцы сайтов начали активно внедрять онлайн чаты.
Существует множество компании, предоставляющие свои готовые решения. К таким компаниям относятся JivoSite, Envybox, Calibri, CoMagic итд. Множество из них предоставляет большую часть функционала — бесплатно.
Как устанавливать конкретный чат на свой сайт можно прочитать в мануале, на странице разработчика.
Собственно, чаты для бизнеса Яндекса используют данные решения для отображения чата на странице выдачи. Т.е. в сниппете добавляется кнопка “Онлайн-консультант”, при нажатии на которую чат открывается сразу на странице поиска. Выглядит это следующим образом
Яндекс диалоги как настроить?
- Для начала вам потребуется аккаунт Яндекса. Если он у вас – половина работы сделано.
- Далее необходимо зайти в Яндекс Вебмастер и подтвердить, что сайт принадлежит вам. Делается это просто.
- Нажимаете на плюсик
- Указываете ссылку на свой сайт.
- Далее выбираете способ подтверждения. Самое простое закинуть в корень сайта HTML-файл, который можно скачать, нажав кнопку
Также можно вставить мета-тег в раздел head сайта. Но это лучше делать, если у вас есть хотя бы какие-то познания в html. После, нажимаем кнопку проверить. Если все сделано правильно – сайт будет подтверждён.
- Нажимаете на плюсик
- Далее идем на сайт Яндекс Диалогов https://dialogs.yandex.ru/ и нажимаем “Вход для разработчиков”. Там нам нужно нажать “Создать диалог” и выбираем “Чат для бизнеса”
- Тут нам сначала придется заполнить информацию по нашему сайту.
В Поле Сайт указываем ссылку на наш сайт. Организация – название вашей компании. Все это проверяется через Вебмастер, где мы были чуть ранее.
- В блоке основных настроек нужно указать своего провайдера (название чата). Там нужно будет указать ID канала. С этим могут возникнуть трудности, но эта трудность последняя. В зависимости от того, какой у вас чат – различаются и способы чтобы узнать ID канала т.е. делается это на сайте самого чата. Для самых распространенных провайдеров – в Яндексе есть встроенная документация. Если этой документации по вашему провайдеру нет – она наверняка есть на сайте чата. Когда вы узнаете ID – прописываем его и двигаемся к URL. Тут всего лишь надо подсказать Яндексу на каких страницах нужно активировать чат. Чтобы указать весь сайт – надо прописать адрес в виде https://*.example.com/* как это указано в подсказке.
- Далее просто указываем название вашей организации, название диалога и категорию, ничего трудного там быть не должно. Также там надо указать иконку вашей компании с размерами 224х224.
- По необходимости укажите рабочее время, когда чат будет активен.
- Сохраняем и отправляем на модерацию. Через некоторое время вам на почту придет ответ о прохождении модерации. Если все хорошо – вам останется лишь опубликовать его. Теперь у вас будет работать чат Яндекс Диалогов.
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Компонент для управления Home Assistant через Яндекс.Диалоги
AlexxIT/YandexDialogs
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
September 18, 2023 17:31
September 18, 2023 17:40
September 18, 2023 18:08
September 7, 2023 16:31
September 7, 2023 05:43
September 18, 2023 17:40
September 18, 2023 17:40
README.md
Яндекс.Диалоги для Home Assistant
Компонент позволяет управлять Home Assistant из Яндекс Алисы через собственный навык в Яндекс.Диалогах.
С помощью Яндекс.Диалогов вы можете настроить реакцию Алисы на абсолютно любые фразы. А не только те, что заложили разработчики. Яндекс Алиса работает на колонках, мобильных приложениях Яндекса и на компьютере в браузере Яндекса.
Особенностью управления через Диалоги является необходимость называть имя навыка:
- Алиса, узнай у Умного дома температуру в спальне
- Алиса, попроси Мой дом включить Ютуб на телевизоре в зале
- Алиса, узнай у Домашнего ассистента когда было последнее движение у входной двери
Для начала диалога без использования имени навыка есть два метода:
- Создать сценарий Яндекса, например: если я скажу «включи мультики на телевизоре», умная колонка выполнит команду «скажи навыку умный дом включи мультики на ТВ»
- Начинать диалог из Home Assistant с помощью компонента Yandex.Station
Для работы компонента нужен рабочий внешний доступ к вашему Home Assistant по протоколу HTTPS. Его можно получить через другой мой компонент — Dataplicity.
Не стоит путать Яндекс.Диалоги с Умным домом Яндекса. Это разные технологии, не связанные между собой.
- Установка
- Настройка
- Использование
- Управление
- Управление через автоматизации на событиях
- Управление через Intent Script
- Управление через python-скрипт
- Пример калькулятора
- Пример тепературы в разных помещениях
Установка
Способ 1. HACS > Интеграции > 3 точки (правый верхний угол) > Пользовательские репозитории > URL: AlexxIT/YandexDialogs , Категория: Интеграция > Добавить > подождать > YandexDialogs > Установить
Способ 2. Вручную скопируйте папку yandex_dialogs из latest release в директорию /config/custom_components .
Настройка
Способ 1. GUI
Настройки > Интеграции > Добавить интеграцию > Yandex Dialogs
Если интеграции нет в списке — очистите кэш браузера.
Способ 2. YAML
yandex_dialogs:
Использование
Если у вас уже работает компонент YandexStation и есть внешний доступ по HTTPS — этот компонент может автоматически создать и настроить навык в Яндекс.Диалогах.
Для этого ещё раз добавьте интеграцию:
Настройки > Интеграции > Добавить интеграцию > Yandex Dialogs
- аккаунт Яндекса, от имени которого создавать Диалог
- публичную HTTPS-ссылку на ваш сервер Home Assistant
- имя навыка (Яндекс требует имя из двух слов)
Компонент автоматически создаст новый приватный диалог, опубликует его и сохранит идентификатор вашего пользователя в настройки интеграции. Навык публикуется в течение нескольких минут!
По умолчанию приватный навык доступен только вашему пользователю. Но для дополнительной безопасности можно ограничить доступ только списку пользователей. Идентификаторы пользователей уникальны для связки пользователь+навык и выглядят примерно так: ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF0123456 . Если список пользователей пуст — дополнительная проверка выключена.
При необходимости вы можете создать несколько диалогов с разными именами.
PS: При желании можете самостоятельно создать приватный навык с Webhook на ваш Home Assistant: https://myhome.duckdns.org/api/yandex_dialogs
Управление
Поддерживается обработка команд диалога разными способами:
- Управление через автоматизации на событиях
- Управление через Intent Script
- Управление через python-скрипт
Управление через автоматизации на событиях
Внимание: у вас несколько секунд, чтоб вызвать событие с текстовым результатом ответа.
Этот подход можно использовать в Node-RED.
При обращении к навыку создаётся событие yandex_intent с параметрами:
- text — произнесённая фраза
- command — фраза, почищенная от знаков препинания и числетельные преобразованы в числа
- intent — интент это обозначение «типовой» фразы. Например, для ответов «да» или «хорошо» здесь будет значение YANDEX.CONFIRM . При желании вы можете настраивать свои интенты (описано ниже)
- session , user , application — «хранилище» состояний диалога
- . — другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах
Для ответа вы должны сами вызвать событие yandex_intent_response с параметрами:
- text — опциональный, текст ответа
- tts — опциональный, ответ в формате TTS
- end_session , опциональный, по умолчанию True , «выйти» из диалога после ответа
- session , user , application — опциональные, новое значение «хранилища» состояний. Состояния session и application не переносятся между разными шагами диалога автоматически!
Для ответа вы можете заполнить или text или tts в зависимости от того, нужно ли вам произнести ответ со спецэффектами TTS.
automation: — trigger: platform: event event_type: yandex_intent # это событие ОТ вашего навыка event_data: text: привет # проверяем точное совпадение с фразой «привет» action: event: yandex_intent_response # это наш ответ навыку, нужно уложиться в пару секунд event_data: text: «>« — trigger: platform: event event_type: yandex_intent event_data: intent: calc # проверяем на совпадение с Интентом калькулятора action: — service: persistent_notification.create data: title: Яндекс Калькулятор message: «>« — event: yandex_intent_response event_data: # есть все переменные, как и в примере выше text: >- > > > >
Управление продолжением диалога
Фраза «Алиса, включи навык Умный дома» включит навык и навык будет ждать вашей команды.
Фраза «Алиса, спроси у Умного дома сколько градусов в зале» — вызовет ваш навык, получит ответ и тут же выйдет из него назад к Алисе.
Чтоб изменить это поведение, используйте параметр end_session . С ним вы можете либо продолжить разговор при фразе «Алиса спроси у Умного дома. «. Либо прервать диалог в любом месте.
Управление через Intent Script
Альтернативный способ управления диалогом. Более сложный и не рекомендуется к использованию.
Существует скрипт по умолчанию yandex_default . Он выполняется когда для фразы не совпал ни один Интент.
action опциональный. Он выполняется ДО генерации ответа и при желании может на него повлиять.
Внимание: у вашего скрипта пара секунд, чтоб вернуть ответ. Алиса дольше не ждёт. Если ваш скрипт выполняется дольше — запускайте его ассинхронно (читайте документацию).
Вам доступны переменные:
- text — произнесённая фраза
- command — фраза, почищенная от знаков препинания и числетельные преобразованы в числа
- intent — если фраза совпала, тут будет ID Интента из Яндекс.Диалогов
- . — другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах
intent_script: yandex_default: # это скрипт по умолчанию action: # действие опционально и должно уложиться в пару секунд — service: persistent_notification.create data: title: Команда из Яндекса message: «>« speech: # фраза для ответа, поддерживает шаблоны text: >- > Температура > °C Не могу выполнить: > calc: # это Интент калькулятора (пример как настроить ниже) action: — service: persistent_notification.create data: title: Яндекс Калькулятор message: «>« speech: # в нём распознались переменные action, x и y text: >- > > > > temperature: # это Интент температуры в помещении (пример как настроить ниже) speech: text: >- Температура в зале > °C Температура в ванной > °C Температура на балконе > °C
Управление через python-скрипт
- Python-код можно писать во внешнем файле или сразу в YAML
- Код из внешнего файла загружается при каждом вызове диалога (его можно закешировать при старте Hass)
- Можно установить внешние зависимости python через pip
- Синтаксис скрипта совместим с функциями Yandex Cloud
yandex_dialogs: requirements: # можно установить внешние библиотеки python - requests file: dialogs.py # можно писать код в внемнем файле cache: True # закешировать код внешнего файла (по умолчанию выключено) source: | def handler(event, context): return , "version": "1.0">
Пример скрипта (подробнее в документации):
def make_response(event: dict, text: str, end_session=False) -> dict: return < "version": event["version"], "session": event["session"], "response": "text": text, "end_session": end_session>, > def handler(event: dict, context: dict) -> dict: return make_response(event, "Ну привет!")
Настройка Интентов в Яндекс.Диалогах
Платформа Яндекс.Диалогов позволяет гибко обрабатывать сказанные фразы через Natural Language Processing (NLU) от Яндекса.
Фраза, которую нужно распознать, называется Интентом. ID интента и все составляющие разобранной фразы прилетят в Home Assistant. И их можно использовать в автоматизациях.
При желании вы можете не пользоваться Интентами, а анализовать фразы в автоматизациях Home Assistant или Node-RED.
- $room — слово с долларом это переменная
- [. ] — квадрытные скобки означают, что слова могут идти в любом порядке
- (какая)? — вопрос означает, что слова может не быть
- %lemma — означает режим сравнение без учёта формы слова (например «включай свет» приравнивается к «включи свет«)
Интенты можно настраивать только после публикации навыка. Любые изменения в интентах требуют новой публикации (занимает пару минут).
Пример калькулятора
root: сколько будет $x $action $y slots: x: source: $x type: YANDEX.NUMBER y: source: $y type: YANDEX.NUMBER action: source: $action $x: $YANDEX.NUMBER $y: $YANDEX.NUMBER $action: плюс | минус | умножить на | разделить на
Пример тепературы в разных помещениях
root: [(какая)? температура $room] [сколько градусов $room] slots: room: source: $room $room: в зале | в ванной | на балконе
About
Компонент для управления Home Assistant через Яндекс.Диалоги