Поиск по базе знаний

Создание приватных навыков Алисы для нестандартного управления

Стандартные интеграции платформы умного дома Яндекса покрывают большинство потребностей обычных пользователей. Через приложение «Дом с Алисой» можно легко объединить устройства десятков брендов, настроить расписания и связать датчики с исполнительными реле. Однако продвинутые пользователи и энтузиасты домашних DIY-систем часто упираются в ограничения экосистемы. Например, если вам требуется управлять нестандартным контроллером полива теплицы на базе чипа ESP32, опрашивать базу данных SQL для получения отчетов о расходе воды или запускать скрипты на локальном сервере с помощью голоса — стандартные карточки устройств не помогут. В таких сценариях идеальным решением становится разработка и развертывание собственного приватного навыка Алисы через платформу Яндекс Диалоги. Это бесплатный инструмент, позволяющий перенаправлять голосовые запросы от ваших колонок на ваш личный веб-сервер.

Архитектура взаимодействия Алисы и кастомного бэкенда

Создание собственного навыка превращает Яндекс Станцию в гибкий интерфейс ввода-вывода. Процесс взаимодействия строится по классической клиент-серверной архитектуре и включает следующие этапы:

  1. Голосовой ввод. Пользователь произносит фразу-активатор (например, «Алиса, запусти помощник полива»), а затем дает команду (например, «включи полив газона на 10 минут»).
  2. Распознавание и парсинг. Серверы Яндекса переводят аудиосигнал в текст и анализируют фразу. Если навык настроен на работу со структурированными интентами (Intents), платформа сама выделяет сущности (например, имя зоны «газон» и числовую переменную времени «10»).
  3. HTTP-запрос (Webhook). Облако Яндекса формирует POST-запрос в формате JSON и отправляет его на URL-адрес (вебхук) вашего сервера. Запрос содержит уникальный идентификатор пользователя, сессии, текст фразы и распознанные сущности.
  4. Обработка на сервере. Ваш бэкенд (написанный на Node.js, Python, PHP или развернутый в среде визуального программирования Node-RED) получает этот JSON. Код анализирует команду, выполняет физическое действие (например, отправляет команду MQTT на реле водяного насоса) и готовит текстовый ответ.
  5. JSON-ответ. Сервер возвращает Яндексу JSON-пакет, в котором указан текст ответа и разметка для синтезатора речи TTS (Text-to-Speech), включая ударения и звуковые эффекты. Алиса озвучивает этот ответ пользователю.

Пошаговое руководство по созданию приватного навыка

Настроим приватный навык для управления умным домом с нуля:

  1. Шаг 1. Создание диалога в консоли. Перейдите на сайт Яндекс Диалогов (dialogs.yandex.ru/developer). Нажмите кнопку «Создать диалог» ➡️ выберите тип «Навык в Алисе». Задайте уникальное имя навыка, которое будет использоваться для его запуска.
  2. Шаг 2. Развертывание бэкенда и настройка туннеля. Напишите простой обработчик на Python/Flask или Node.js, который принимает POST-запросы на порт 5000. Если ваш сервер находится за домашним NAT (нет белого IP-адреса), используйте утилиту ngrok или LocalTunnel для создания временного безопасного HTTPS-адреса: ngrok http 5000. Полученный HTTPS URL скопируйте в поле «Backend URL» настроек навыка.
  3. Шаг 3. Обработка входящего JSON-пакета. В коде обработчика извлеките текст команды из пути request.json['request']['original_utterance']. Настройте условие: если текст содержит слово «полив», отправьте управляющий сигнал на реле. Сформируйте ответный JSON следующего вида:
    {
      "response": {
        "text": "Команда выполнена. Запускаю полив газона.",
        "end_session": true
      },
      "version": "1.0"
    }
  4. Шаг 4. Настройка приватного доступа. Чтобы вашим навыком не могли воспользоваться посторонние люди, в настройках публикации в консоли Диалогов найдите раздел «Приватность». Поставьте галочку «Доступно только мне» или укажите список доверенных Яндекс ID-аккаунтов членов вашей семьи. Это исключит прохождение публичной модерации и позволит опубликовать навык мгновенно.
  5. Шаг 5. Тестирование. В консоли Диалогов перейдите на вкладку «Тестирование». Напишите команду текстом или активируйте микрофон. Если сервер ответил корректно, вы увидите ответ Алисы в окне чата.

Использование разметки TTS и звуковых эффектов

Одной из самых интересных возможностей кастомных навыков является тонкое управление озвучкой Алисы с помощью специального синтаксиса TTS. Вы можете задавать правильные ударения, расставлять паузы и использовать встроенные звуки Яндекса.

  • Ударения. Чтобы указать ударную гласную, поставьте перед ней знак плюса: например, слово зд+ание или зам+ок (для разделения замка и замка).
  • Паузы. Вы можете вставить паузу заданной длительности в миллисекундах с помощью тега sil: например, Подождите секунду. sil <[1000]> Продолжаем работу..
  • Звуки (Sounds). В консоли Диалогов доступна библиотека звуков (звук выливающейся воды, сирена, щелчки, фанфары). Их можно внедрить в речь Алисы с помощью тега: <speaker audio="alice-sounds-things-water-1.opus">. Это делает голосовой интерфейс живым и интерактивным.

Практические примеры интеграции: базы данных и мониторинг

Кастомные навыки часто применяются для интеграции с домашней базой данных. Представьте сценарий: вы хотите спросить: «Алиса, сколько воды израсходовано за сегодня?».

  1. Ваш бэкенд на Python получает этот запрос.
  2. Выполняет SQL-запрос к базе данных: SELECT SUM(value) FROM water_metrics WHERE date = CURRENT_DATE.
  3. Получает результат, например, 140 литров.
  4. Формирует строку ответа: Сегодня израсходовано сто с+орок литров воды..
  5. Передает обратно в API Яндекса.

IMPORTANT

Обратите внимание, что Яндекс накладывает жесткий лимит на время ожидания ответа от вашего сервера. Если бэкенд не вернет ответный JSON-пакет в течение 1.5 секунд, Алиса прервет сессию и сообщит пользователю, что навык не отвечает. Если ваша логика требует длительного времени (например, опрос датчиков занимает 5 секунд), возвращайте ответ немедленно («Команда принята, проверяю»), а само действие выполняйте в асинхронном фоновом потоке.

TIP

Для тех, кто предпочитает визуальное программирование без необходимости вручную писать код и разворачивать собственный бэкенд, вы можете прочитать нашу статью об интеграции Node-RED с Яндекс Диалогами, где показан процесс быстрой настройки нод и интеграции по REST API.

Использование приватных навыков открывает неограниченные возможности интеграции любых кастомных устройств и внешних сервисов API в экосистему Алисы, превращая умный дом в гибкий и масштабируемый комплекс.

Для обеспечения безопасного проброса кастомных навыков разберитесь с настройкой Nginx Proxy Manager для HA и использованием DuckDNS для бесплатного SSL-сертификата в HA.

Инструкция по настройке

1

Регистрация в Яндекс Диалогах

Создайте новый проект во вкладке Диалоги на yandex.ru, выбрав тип диалога Навык в Алисе.

2

Настройка вебхука (Webhook URL)

Укажите URL-адрес вашего веб-сервера (например, Node-RED, Flask или AWS Lambda), который будет принимать POST-запросы от Алисы.

3

Обработка JSON-запросов

Напишите код парсинга интентов (намерений пользователя) и формирования ответного JSON-пакета с текстом для Алисы.

4

Публикация приватного навыка

Отправьте навык на модерацию. Для приватных навыков укажите доступ только для вашего аккаунта Яндекса.