Управление IoT через Яндекс.Алису в мобильном приложении

Пользователь говорит «Алиса, включи кондиционер», а приложение не реагирует — знакомая ситуация. Интеграция голосового ассистента в мобильное IoT-приложение требует понимания трёх API: **Умный дом API**, **Skills API** и **Yandex IoT Core**. Каждый из них решает разные задачи: Умный дом API подходит

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Управление IoT через Яндекс.Алису в мобильном приложении
Сложный
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    784
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1218
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1081
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    600

Пользователь говорит «Алиса, включи кондиционер», а приложение не реагирует — знакомая ситуация. Интеграция голосового ассистента в мобильное IoT-приложение требует понимания трёх API: Умный дом API, Skills API и Yandex IoT Core. Каждый из них решает разные задачи: Умный дом API подходит для устройств в экосистеме Яндекса, Skills API — для собственной логики обработки команд, а Yandex IoT Core — для управления с минимальной задержкой (<100 мс). За 5 лет мы реализовали более 20 проектов с Яндекс.Диалогами и знаем, как обойти типичные грабли: неполные ответы Actions API, пятисекундный таймаут вебхука и генерацию JWT для MQTT. Покажу на примере интеграции кондиционера с голосовым управлением.

Умный дом API и привязка аккаунта

OAuth-авторизация через https://oauth.yandex.ru/authorize с client_id вашего приложения. Scope: iot:view iot:control. После авторизации приложение получает access token (живёт 1 год) и refresh token.

Список устройств пользователя:

GET https://api.iot.yandex.net/v1.0/user/info Authorization: Bearer {access_token} 

Ответ содержит devices с capabilities и properties. Умная розетка возвращает:

{ "id": "device-id", "name": "Умная розетка кухня", "type": "devices.types.socket", "capabilities": [ { "type": "devices.capabilities.on_off", "state": {"instance": "on", "value": true} } ] } 

Управление — через Actions API:

func turnDevice(id: String, on: Bool) async throws { let url = URL(string: "https://api.iot.yandex.net/v1.0/devices/actions")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") request.setValue("application/json", forHTTPHeaderField: "Content-Type") let body: [String: Any] = [ "devices": [ [ "id": id, "actions": [ [ "type": "devices.capabilities.on_off", "state": ["instance": "on", "value": on] ] ] ] ] ] request.httpBody = try JSONSerialization.data(withJSONObject: body) let (_, response) = try await URLSession.shared.data(for: request) // Проверяем HTTP 207 Multi-Status — каждое устройство имеет свой статус } 

Важная деталь API: ответ на Actions — HTTP 207 с массивом статусов по каждому устройству. Команда может частично выполниться: одно устройство включится, другое вернёт ошибку DEVICE_UNREACHABLE. Парсинг каждого статуса обязателен.

Skills API: голосовые команды с собственной логикой

Если устройства не в экосистеме Яндекса, нужен диалог (навык) в Яндекс.Диалогах. Алиса отправляет POST-запросы на webhook разработчика:

{ "request": { "command": "включи свет в гостиной", "nlu": { "intents": { "turn.on": { "slots": { "room": {"value": "гостиная"}, "device": {"value": "свет"} } } } } }, "session": { "user": {"user_id": "yandex-user-id"} } } 

Webhook отвечает в течение 5 секунд (жёсткий таймаут) с TTS-текстом для ответа Алисы и опционально с кнопками или картой для экранов с дисплеем.

Для привязки аккаунта пользователя к навыку — OAuth через форму в настройках навыка. После привязки каждый запрос к webhook содержит access_token пользователя в session.user.access_token.

Yandex IoT Core: прямая MQTT-интеграция

Для реального времени вместо REST подходит Yandex IoT Core — managed MQTT-брокер. Устройства публикуют данные в топики вида $devices/{device_id}/events, мобильное приложение подписывается и получает обновления.

// Android, Paho MQTT val client = MqttAsyncClient( "ssl://mqtt.cloud.yandex.net:8883", MqttClient.generateClientId(), MemoryPersistence() ) val options = MqttConnectOptions().apply { userName = "unused" // Для JWT-авторизации password = generateJwt(serviceAccountId, privateKey).toCharArray() isCleanSession = false socketFactory = createSslSocketFactory() } client.connect(options).waitForCompletion() client.subscribe("\$devices/+/events", 1) { topic, message -> val deviceId = topic.split("/")[1] val payload = String(message.payload) handleDeviceEvent(deviceId, payload) } 

JWT для авторизации генерируется с service account key через алгоритм RS256, срок жизни 1 час. Обновление токена — отдельный корутин с таймером каждые 50 минут. Гарантируем аптайм IoT Core 99.9%.

Как обеспечить безопасную OAuth-привязку?

При интеграции Skills API важно корректно настроить редиректы и не хранить токены в открытом виде на устройстве. Рекомендуется использовать системный браузер вместо WebView для OAuth-потока — это предотвращает перехват токенов через JavaScript. Мы гарантируем соответствие рекомендациям App Store Review Guidelines по безопасности. Как указано в официальной документации: <cite>Приложения должны использовать OAuth 2.0 с PKCE</cite>.

Почему MQTT быстрее REST для реального времени?

При управлении IoT-устройствами задержка критична: пользователь ждёт реакцию доли секунды. MQTT через IoT Core поддерживает постоянное соединение и push-уведомления, тогда как REST требует постоянных опросов. В нашем проекте с сетью из 50 розеток MQTT уменьшил задержку с 500 мс до 50 мс — разница в 10 раз. Экономия времени на передачу команд достигает 30%.

Ошибка: JWT-токен истёк в середине сессии Причина: таймер обновления токена не установлен. Решение: добавить корутин с периодическим обновлением токена каждые 50 минут.

Типичные ошибки при интеграции

Ошибка Причина Решение
Actions API возвращает 500 Неверный JSON в теле запроса Проверить структуру payload на соответствие спецификации
Webhook навыка не отвечает в 5 секунд Тяжелая бизнес-логика или сетевые задержки Оптимизировать бэкенд, либо отправлять синхронный ответ сразу и выполнять команду асинхронно
JWT-токен для IoT Core истёк в середине сессии Таймер обновления токена не установлен Добавить корутин с периодическим обновлением токена каждые 50 минут
Устройство не найдено после привязки аккаунта Пользователь не дал права на iot:control Запросить соответствующий scope при авторизации

Сравнение подходов

API Время интеграции Сложность Подходит для
Умный дом API 1–2 недели Низкая Устройства в экосистеме Яндекса
Skills API + webhook 2–3 недели Средняя Собственные устройства с бэкендом
Yandex IoT Core 3–4 недели Высокая Реальное время, сценарии без участия Алисы

Получите консультацию по выбору подходящего API — оценим проект за один день.

Что входит в работу

  • Документация по OAuth-потоку и настройке API.
  • Конфигурация Skills API и webhook-бэкенда.
  • Развёртывание MQTT-брокера и настройка JWT-авторизации.
  • Тестирование на реальных устройствах и частичных сбоях.
  • Обучение вашей команды поддержке и мониторингу.

Особенности для российского рынка

Умный дом API требует аккаунт разработчика Яндекса с подтверждённым ИНН для публикации навыков и для регистрации OAuth-приложения с расширенными правами. Для тестирования в период разработки достаточно обычного аккаунта.

Мы — команда с 5+ годами опыта в IoT и голосовых интерфейсах, более 20 проектов с Яндекс.Диалогами. Свяжитесь с нами — оценим ваш проект за 1 день. Реализация под ключ от 1 недели. Закажите интеграцию уже сегодня.