Маруся и Сбер Салют¶
Те же эндпоинты Smart Home API, что у Алисы, но в экосистемах Mail.ru (Маруся) и Сбер (Салют). Один раз связали — управление работает у всех ассистентов сразу.
Что общего с Алисой¶
- Единая device-модель в облаке — реле/датчики маппятся в типы Smart Home один раз, все три ассистента видят их одинаково.
- Discovery / Query / Action / Push — те же четыре операции.
- OAuth2 для привязки пользовательского аккаунта.
- Один проект в Kavlev cloud → много привязанных аккаунтов (можно одновременно Алиса + Маруся одного человека).
В чём отличается¶
| Аспект | Алиса | Маруся | Салют |
|---|---|---|---|
| Backend URL | cloud.kavlev.ru/v1.0/ |
cloud.kavlev.ru/marusya/ |
cloud.kavlev.ru/sber/ |
| OAuth provider | oauth.yandex.ru |
o2.mail.ru |
online.sberbank.ru/CSAFront/oidc/ |
| Dev-консоль | yandex.ru/dev/dialogs | dev.vk.com | developers.sber.ru/portal |
| Статус готовности | ✅ Production | 🟡 Beta (готов код, нужно ваше OAuth-приложение) | 🟡 Beta |
Маруся: пошагово¶
1. OAuth-приложение в VK Developers¶
dev.vk.com → Создать приложение → Standalone или Сайт:
| Поле | Значение |
|---|---|
| Название | Kavlev Smart Home |
| Платформа | Web |
| Callback URL | https://cloud.kavlev.ru/oauth/marusya/callback |
Получаете app_id и secure_key.
2. Навык в VK Mini Apps / Маруся-консоли¶
Сейчас (2026) Маруся не имеет публичного marketplace для приватных Smart Home провайдеров — нужен запрос в Mail.ru на endpoint-привязку. Альтернатива — использовать voice-only без обнаружения (команды по голосу, без exploration в приложении).
3. Прописать в облаке¶
Интеграции → Маруся → Подключить → ввести app_id и secure_key.
4. Привязать аккаунт¶
В приложении Маруси → Умный дом → Добавить → Kavlev.
Дальше — как у Алисы.
Сбер Салют: пошагово¶
1. SmartApp в Sber Developer Portal¶
developers.sber.ru/portal → Создать SmartApp → Smart Home.
Получаете client_id и client_secret от их OAuth-провайдера.
2. Прописать в облаке¶
Интеграции → Сбер Салют → Подключить.
3. Привязать аккаунт¶
В приложении Салют → Умный дом.
Что под капотом¶
Cloud-service маппит запросы провайдеров на единые internal handlers:
# cloud_service/voice/router.py
@router.post("/v1.0/user/devices") # Яндекс
@router.post("/marusya/user/devices") # Маруся
@router.post("/sber/user/devices") # Салют
async def discovery(...):
return await voice_discovery(...) # one impl
Маппинг типов устройств в типы провайдера — в cloud_service/voice/<provider>/device_types.py. Если у провайдера нет аналога нашего типа (например, у Маруси нет atmospheric_pressure) — устройство не попадёт в discovery этого провайдера (но останется у Алисы).
Что НЕ работает межпровайдерно¶
- Состояние реле: одно. Если Алиса выключила — Маруся это увидит через push.
- Имя устройства: одно. Меняется в любом из приложений → push'нётся обратно в облако → синхронизируется во все.
- Комнаты / группы: каждый провайдер хранит свои. Маруся не видит группы Алисы. Это ограничение Smart Home API — мы не можем синхронизировать UX-структуру.
Disconnect¶
В интеграциях → Disconnect конкретного провайдера. Удаляет OAuth-привязки этого провайдера, на остальные не влияет.