Керування IoT через Яндекс.Алісу в мобільному застосунку

Коли користувач каже «Алісо, увімкни кондиціонер», а застосунок не реагує, це руйнує довіру до вашого IoT-продукту. Ми розробляємо інтеграцію голосового керування через Яндекс.Алісу в мобільних застосунках, реалізуючи проєкт під ключ — від аудиту до впровадження та подальшої підтримки. Наша команда забезпечує надійне рішення, яке масштабується разом із бізнесом.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

Користувач каже «Алісо, увімкни кондиціонер», а застосунок не реагує — знайома ситуація. Інтеграція голосового асистента в мобільний IoT-застосунок потребує розуміння трьох API: Розумний дім API, Skills API та Yandex IoT Core. Кожен із них вирішує різні задачі: Розумний дім API підходить для пристроїв у екосистемі Яндексу, Skills API — для власної логіки обробки команд, а Yandex IoT Core — для керування з мінімальною затримкою (<100 мс). Ми реалізували понад 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 щодо безпеки. Як зазначено в офіційній документації: Застосунки повинні використовувати OAuth 2.0 з PKCE.

Чому 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-застосунку з розширеними правами. Для тестування в період розробки достатньо звичайного облікового запису.

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

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

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714