{"id":15637192,"url":"https://github.com/alexxit/yandexdialogs","last_synced_at":"2026-02-17T16:07:44.748Z","repository":{"id":49798842,"uuid":"279052059","full_name":"AlexxIT/YandexDialogs","owner":"AlexxIT","description":"Компонент для управления Home Assistant через Яндекс.Диалоги","archived":false,"fork":false,"pushed_at":"2025-11-18T12:32:02.000Z","size":594,"stargazers_count":164,"open_issues_count":11,"forks_count":11,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-11-18T15:48:32.224Z","etag":null,"topics":["home-assistant","yandex-dialogs"],"latest_commit_sha":null,"homepage":"https://t.me/AlexxIT_SmartHome","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexxIT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-07-12T11:40:01.000Z","updated_at":"2025-11-18T12:32:06.000Z","dependencies_parsed_at":"2024-12-13T14:45:07.243Z","dependency_job_id":"d6ae9e2b-53f9-434d-9d88-5622463cfad4","html_url":"https://github.com/AlexxIT/YandexDialogs","commit_stats":{"total_commits":31,"total_committers":1,"mean_commits":31.0,"dds":0.0,"last_synced_commit":"abb79cfeeb9458fa5c32db2122e4b372104ad5fa"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/AlexxIT/YandexDialogs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FYandexDialogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FYandexDialogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FYandexDialogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FYandexDialogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexxIT","download_url":"https://codeload.github.com/AlexxIT/YandexDialogs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexxIT%2FYandexDialogs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["home-assistant","yandex-dialogs"],"created_at":"2024-10-03T11:10:41.945Z","updated_at":"2026-02-17T16:07:39.740Z","avatar_url":"https://github.com/AlexxIT.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Яндекс.Диалоги для Home Assistant \n\n[![](https://img.shields.io/badge/HACS-Custom-orange.svg)](https://github.com/custom-components/hacs)\n![](https://img.shields.io/github/stars/AlexxIT/YandexDialogs?style=flat-square\u0026logo=github)\n\nКомпонент позволяет управлять [Home Assistant](https://www.home-assistant.io/) из [Яндекс Алисы](https://yandex.ru/alice) через собственный навык в [Яндекс.Диалогах](https://dialogs.yandex.ru/developer).\n\nС помощью Яндекс.Диалогов вы можете настроить реакцию Алисы на абсолютно любые фразы. А не только те, что заложили разработчики. Яндекс Алиса работает на колонках, мобильных приложениях Яндекса и на компьютере в браузере Яндекса.\n\nОсобенностью управления через Диалоги является необходимость называть имя навыка:\n\n- Алиса, узнай у **Умного дома** температуру в спальне\n- Алиса, попроси **Мой дом** включить Ютуб на телевизоре в зале\n- Алиса, узнай у **Домашнего ассистента** когда было последнее движение у входной двери\n\nДля начала диалога без использования имени навыка есть два метода:\n\n- Создать сценарий Яндекса, например: если я скажу \"включи мультики на телевизоре\", умная колонка выполнит команду \"скажи навыку умный дом включи мультики на ТВ\"\n- Начинать диалог из Home Assistant с помощью компонента [Yandex.Station](https://github.com/AlexxIT/YandexStation#%D0%B4%D0%B8%D0%B0%D0%BB%D0%BE%D0%B3-%D1%81-%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BA%D0%BE%D0%B9)\n\nДля работы компонента нужен рабочий внешний доступ к вашему Home Assistant по протоколу HTTPS. Его можно получить через другой мой компонент - [Dataplicity](https://github.com/AlexxIT/Dataplicity).\n\nНе стоит путать Яндекс.Диалоги с Умным домом Яндекса. Это разные технологии, не связанные между собой.\n\n---\n\n  * [Установка](#установка)\n  * [Настройка](#настройка)\n  * [Использование](#использование)\n  * [Управление](#управление)\n    * [Управление через автоматизации на событиях](#управление-через-автоматизации-на-событиях)\n    * [Управление через Intent Script](#управление-через-intent-script)\n    * [Управление через python-скрипт](#управление-через-python-скрипт)\n  * [Настройка Интентов в Яндекс.Диалогах](#настройка-интентов-в-яндексдиалогах)\n    * [Пример калькулятора](#пример-калькулятора)\n    * [Пример тепературы в разных помещениях](#пример-тепературы-в-разных-помещениях)\n\n## Установка\n\n**Способ 1.** [HACS](https://hacs.xyz/) \u003e Интеграции \u003e 3 точки (правый верхний угол) \u003e Пользовательские репозитории \u003e URL: `AlexxIT/YandexDialogs`, Категория: Интеграция \u003e Добавить \u003e подождать \u003e YandexDialogs \u003e Установить\n\n**Способ 2.** Вручную скопируйте папку `yandex_dialogs` из [latest release](https://github.com/AlexxIT/YandexDialogs/releases/latest) в директорию `/config/custom_components`.\n\n## Настройка\n\n**Способ 1.** GUI\n\n\u003e Настройки \u003e Интеграции \u003e Добавить интеграцию \u003e **Yandex Dialogs**\n\nЕсли интеграции нет в списке - очистите кэш браузера.\n\n**Способ 2.** YAML\n\n```yaml\nyandex_dialogs:\n```\n\n## Использование\n\nЕсли у вас уже работает компонент [YandexStation](https://github.com/AlexxIT/YandexStation) и есть внешний доступ по HTTPS - этот компонент может автоматически создать и настроить навык в Яндекс.Диалогах.\n\nДля этого ещё раз добавьте интеграцию:\n\n\u003e Настройки \u003e Интеграции \u003e Добавить интеграцию \u003e **Yandex Dialogs**\n\nИ укажите:\n\n- аккаунт Яндекса, от имени которого создавать Диалог\n- публичную HTTPS-ссылку на ваш сервер Home Assistant\n- имя навыка (Яндекс требует имя из двух слов)\n\nКомпонент автоматически создаст новый приватный диалог, опубликует его и сохранит идентификатор вашего пользователя в настройки интеграции. Навык публикуется в течение нескольких минут!\n\nПо умолчанию приватный навык доступен только вашему пользователю. Но для дополнительной безопасности можно ограничить доступ только списку пользователей. Идентификаторы пользователей уникальны для связки **пользователь+навык** и выглядят примерно так: `ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF0123456`. Если список пользователей пуст - дополнительная проверка выключена.\n\nПри необходимости вы можете создать несколько диалогов с разными именами.\n\n**PS:** При желании можете самостоятельно создать приватный навык с Webhook на ваш Home Assistant: `https://myhome.duckdns.org/api/yandex_dialogs`\n\n## Управление\n\nПоддерживается обработка команд диалога разными способами:\n\n- Управление через [автоматизации](https://www.home-assistant.io/docs/automation/) на событиях\n- Управление через [Intent Script](https://www.home-assistant.io/integrations/intent_script/)\n- Управление через python-скрипт\n\n### Управление через автоматизации на событиях\n\n**Внимание:** у вас несколько секунд, чтоб вызвать событие с текстовым результатом ответа.\n\nЭтот подход можно использовать в Node-RED.\n\nПри обращении к навыку создаётся событие `yandex_intent` с параметрами:\n\n- `text` - произнесённая фраза\n- `command` - фраза, почищенная от знаков препинания и числетельные преобразованы в числа\n- `intent` - интент это обозначение \"типовой\" фразы. Например, для ответов \"да\" или \"хорошо\" здесь будет значение `YANDEX.CONFIRM`. При желании вы можете настраивать свои интенты (описано ниже)\n- `session`, `user`, `application` - \"хранилище\" [состояний](https://yandex.ru/dev/dialogs/alice/doc/request.html#request__state-desc) диалога\n- `...` - другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах\n\nДля ответа вы должны сами вызвать событие `yandex_intent_response` с параметрами:\n\n- `text` - опциональный, текст ответа\n- `tts` - опциональный, ответ в [формате TTS](https://yandex.ru/dev/dialogs/alice/doc/speech-tuning.html)\n- `end_session`, опциональный, по умолчанию `True`, \"выйти\" из диалога после ответа\n- `session`, `user`, `application` - опциональные, новое значение \"хранилища\" состояний. Состояния `session` и `application` не переносятся между разными шагами диалога автоматически! \n\nДля ответа вы можете заполнить или `text` или `tts` в зависимости от того, нужно ли вам произнести ответ со [спецэффектами TTS](https://github.com/AlexxIT/YandexStation#%D1%81%D0%BF%D0%B5%D1%86%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D1%8B-%D0%B2-tts).\n\n```yaml\nautomation:\n- trigger:\n    platform: event\n    event_type: yandex_intent  # это событие ОТ вашего навыка\n    event_data:\n      text: привет  # проверяем точное совпадение с фразой \"привет\"\n  action:\n    event: yandex_intent_response  # это наш ответ навыку, нужно уложиться в пару секунд\n    event_data:\n      text: \"{{ ['слушаю', 'здесь я', 'на связи']|random }}\"\n\n- trigger:\n    platform: event\n    event_type: yandex_intent\n    event_data:\n      intent: calc  # проверяем на совпадение с Интентом калькулятора\n  action:\n  - service: persistent_notification.create\n    data:\n      title: Яндекс Калькулятор\n      message: \"{{ trigger.event.data.text }}\"\n  - event: yandex_intent_response\n    event_data:  # есть все переменные, как и в примере выше\n      text: \u003e-\n        {% if trigger.event.data.action == 'плюс' %}\n          {{ trigger.event.data.x + trigger.event.data.y }}\n        {% elif trigger.event.data.action == 'минус' %}\n          {{ trigger.event.data.x - trigger.event.data.y }}\n        {% elif trigger.event.data.action == 'умножить на' %}\n          {{ trigger.event.data.x * trigger.event.data.y }}\n        {% elif trigger.event.data.action == 'разделить на' %}\n          {{ trigger.event.data.x / trigger.event.data.y }}\n        {% endif %}\n```\n\n**Управление продолжением диалога**\n\nФраза \"Алиса, включи навык Умный дома\" включит навык и навык будет ждать вашей команды.\n\nФраза \"Алиса, спроси у Умного дома сколько градусов в зале\" - вызовет ваш навык, получит ответ и тут же выйдет из него назад к Алисе.\n\nЧтоб изменить это поведение, используйте параметр `end_session`. С ним вы можете либо продолжить разговор при фразе \"Алиса спроси у Умного дома...\". Либо прервать диалог в любом месте.\n\n### Управление через Intent Script\n\nАльтернативный способ управления диалогом. Более сложный и не рекомендуется к использованию.\n\nСуществует скрипт по умолчанию `yandex_default`. Он выполняется когда для фразы не совпал ни один Интент.\n\n`action` опциональный. Он выполняется ДО генерации ответа и при желании может на него повлиять.\n\n**Внимание:** у вашего скрипта пара секунд, чтоб вернуть ответ. Алиса дольше не ждёт. Если ваш скрипт выполняется дольше - запускайте его ассинхронно (читайте [документацию](https://www.home-assistant.io/integrations/intent_script/)).\n\nВам доступны переменные:\n- `text` - произнесённая фраза\n- `command` - фраза, почищенная от знаков препинания и числетельные преобразованы в числа\n- `intent` - если фраза совпала, тут будет ID Интента из Яндекс.Диалогов\n- `...` - другие переменные, которые вы прописали в Интенте в Яндекс.Диалогах\n\n```yaml\nintent_script:\n  yandex_default:  # это скрипт по умолчанию\n    action:  # действие опционально и должно уложиться в пару секунд\n    - service: persistent_notification.create\n      data:\n        title: Команда из Яндекса\n        message: \"{{ text }}\"\n    speech:  # фраза для ответа, поддерживает шаблоны\n      text: \u003e-\n        {% if text == 'привет' %}\n          {{ ['слушаю', 'здесь я', 'на связи']|random }}\n        {% elif text == 'какая температура в спальне' %}\n          Температура {{ states(\"sensor.temperature_bedroom\")|round }} °C\n        {% else %}\n          Не могу выполнить: {{ text }}\n        {% endif %}\n\n  calc:  # это Интент калькулятора (пример как настроить ниже)\n    action:\n    - service: persistent_notification.create\n      data:\n        title: Яндекс Калькулятор\n        message: \"{{ text }}\"\n    speech:  # в нём распознались переменные action, x и y\n      text: \u003e-\n        {% if action == 'плюс' %}\n          {{ x+y }}\n        {% elif action == 'минус' %}\n          {{ x-y }}\n        {% elif action == 'умножить на' %}\n          {{ x*y }}\n        {% elif action == 'разделить на' %}\n          {{ x/y }}\n        {% endif %}\n\n  temperature:  # это Интент температуры в помещении (пример как настроить ниже)\n    speech:\n      text: \u003e-\n        {% if room == 'в зале' %}\n          Температура в зале {{ states(\"sensor.temperature_hall\")|round }} °C\n        {% elif room == 'в ванной' %}\n          Температура в ванной {{ states(\"sensor.temperature_bathroom\")|round }} °C\n        {% elif room == 'на балконе' %}\n          Температура на балконе {{ states(\"sensor.temperature_balcony\")|round }} °C\n        {% endif %}\n```\n\n### Управление через python-скрипт\n\n- Python-код можно писать во внешнем файле или сразу в YAML\n- Код из внешнего файла загружается при каждом вызове диалога (его можно закешировать при старте Hass)\n- Можно установить внешние зависимости python через pip\n- Синтаксис скрипта совместим с функциями [Yandex Cloud](https://yandex.ru/dev/dialogs/alice/doc/quickstart-programming.html)\n\n```yaml\nyandex_dialogs:\n  requirements:     # можно установить внешние библиотеки python\n    - requests\n  file: dialogs.py  # можно писать код в внемнем файле\n  cache: True       # закешировать код внешнего файла (по умолчанию выключено)\n  source: |\n    def handler(event, context):\n        return {\"response\": {\"text\": \"OK\"}, \"version\": \"1.0\"}\n```\n\nПример скрипта (подробнее в [документации](https://yandex.ru/dev/dialogs/alice/doc/response.html)):\n\n```python\ndef make_response(event: dict, text: str, end_session=False) -\u003e dict:\n    return {\n        \"version\": event[\"version\"],\n        \"session\": event[\"session\"],\n        \"response\": {\"text\": text, \"end_session\": end_session},\n    }\n\ndef handler(event: dict, context: dict) -\u003e dict:\n    return make_response(event, \"Ну привет!\")\n```\n\n## Настройка Интентов в Яндекс.Диалогах\n\nПлатформа Яндекс.Диалогов позволяет гибко обрабатывать сказанные фразы через [Natural Language Processing](https://yandex.ru/dev/dialogs/alice/doc/nlu-docpage/) (NLU) от Яндекса.\n\nФраза, которую нужно распознать, называется Интентом. ID интента и все составляющие разобранной фразы прилетят в Home Assistant. И их можно использовать в автоматизациях.\n\nПри желании вы можете не пользоваться Интентами, а анализовать фразы в автоматизациях Home Assistant или Node-RED.\n\n- `$room` - слово с долларом это переменная\n- `[...]` - квадрытные скобки означают, что слова могут идти в любом порядке\n- `(какая)?` - вопрос означает, что слова может не быть\n- `%lemma` - означает режим сравнение без учёта формы слова (например \"*включай свет*\" приравнивается к \"*включи свет*\")\n\nПолная [документация](https://yandex.ru/dev/dialogs/alice/doc/nlu-docpage/).\n\nИнтенты можно настраивать только после публикации навыка. Любые изменения в интентах требуют новой публикации (занимает пару минут).\n\n![](assets/intents1.png)\n\n### Пример калькулятора\n\n![](assets/intents2.png)\n\n```\nroot:\n    сколько будет $x $action $y\nslots:\n    x:\n        source: $x\n        type: YANDEX.NUMBER\n    y:\n        source: $y\n        type: YANDEX.NUMBER\n    action:\n        source: $action\n$x:\n    $YANDEX.NUMBER\n$y:\n    $YANDEX.NUMBER\n$action:\n    плюс | минус | умножить на | разделить на\n```\n\n### Пример тепературы в разных помещениях\n\n![](assets/intents3.png)\n\n```\nroot:\n    [(какая)? температура $room]\n    [сколько градусов $room]\nslots:\n    room:\n        source: $room\n$room:\n    в зале | в ванной | на балконе\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexxit%2Fyandexdialogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexxit%2Fyandexdialogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexxit%2Fyandexdialogs/lists"}