ym88659208ym87991671
Обработка команд сценария в Native App | Документация для разработчиков

Обработка команд сценария в Native App

Обновлено 23 июня 2023

Чтобы фронтенд понимал команды, приходящие с бэкенда, вам нужно дополнительно настроить Android-приложение.

Некоторые команды ОС передает напрямую в приложение минуя сценарий. К таким командам относятся навигационные и команды управления плеером.

Рассмотрим это на примере демонстрационного Native App. Он опубликован в каталоге приложений, чтобы запустить его, скажите ассистенту на умном устройстве Sber: «Открой демо новый зеленый».

Демо

В демонстрационном Native App на вкладке Assistant пользователь может надевать вещи на андроида и снимать их. Чтобы настроить этот процесс:

  1. Подпишитесь на получение сообщений от сценария с помощью библиотеки Messaging:

    init {
    messaging.addListener(listener)
    }
  2. Добавьте список команд, чтобы пользователи могли надевать и снимать одежду с андроида:

    /**
    * Base command from smartapp backend
    */
    @Serializable
    sealed class BaseCommand

    /**
    * Command for dressing up the Android
    */
    @Serializable
    @SerialName("wear_this")
    internal class WearThisCommand(
    val clothes: Clothes? = null
    ): BaseCommand()

    /**
    * Command for undressing the Android
    */
    @Serializable
    @SerialName("dont_wear_anything")
    internal class ClearClothesCommand: BaseCommand()
  3. Добавьте список вещей, которые пользователь сможет надевать на андроида:

    /**
    * Items variants
    */
    @Serializable
    enum class Clothes(val clothes: String) {
    @SerialName("шапку")
    BEANIE("шапка"),

    @SerialName("перчатки")
    GLOVES("перчатки"),

    @SerialName("ботинки")
    BOOTS("ботинки"),

    @SerialName("куртку")
    JACKET("куртка")
    }
  4. Настройте передачу информации о вещах в графический интерфейс:

    private val _clothes = MutableSharedFlow<Clothes?>
  5. Подключите обработчик входящих сообщений:

    private val listener = object : Messaging.Listener {
    override fun onMessage(messageId: MessageId, payload: Payload) {
    logger.debug { "Message ${messageId.value} received: ${payload.data}" }

    val model = commandParser.decodeFromString<BaseCommand>(payload.data) // парсим входящие сообщения

    when (model) { // обрабатываем входящую команду – надеваем или снимаем вещь
    is WearThisCommand -> {
    model.clothes?.let {
    currentClothes.add(it)
    _clothes.tryEmit(model.clothes)
    }
    }
    is ClearClothesCommand -> {
    currentClothes.clear()
    _clothes.resetReplayCache()
    _clothes.tryEmit(null)
    }
    }

    // send current state to smartapp backend
    appStateHolder.setState( // определяем текущий appState – что надето на андроиде
    Json.encodeToString(
    MyAppState("На андроиде ${currentClothes.joinToString(transform = { it.clothes })}")
    )
    )
    }

    override fun onError(messageId: MessageId, throwable: Throwable) { // создаем обработчик ошибок
    logger.error { throwable.stackTraceToString() }
    }
    }
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.