Интеграция Яндекс.Алисы для управления IoT-устройствами в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Интеграция Яндекс.Алисы для управления IoT-устройствами в мобильном приложении
Сложная
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Интеграция Яндекс.Алисы для управления IoT-устройствами в мобильном приложении

Управление умным домом через Яндекс.Алису — это либо Умный дом API (для устройств в экосистеме Яндекса), либо Skills API (для голосового навыка с собственным бэкендом), либо прямая интеграция через Yandex IoT Core MQTT-брокер. Для мобильного приложения, которое хочет управлять устройствами через Алису, путь почти всегда такой: OAuth 2.0 → Умный дом API → управление устройствами.

Умный дом 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 час. Обновление токена — отдельный корутин с таймером.

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

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

Интеграция Умный дом API в существующее iOS или Android приложение: 1-2 недели. Разработка Skills API с OAuth-привязкой и webhook-бэкендом: 2-3 недели. IoT Core MQTT-интеграция с реальными устройствами: 3-4 недели. Стоимость рассчитывается индивидуально.