Керування 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 мс). Ми реалізували понад 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 тижня. Замовте інтеграцію вже сьогодні.