ym88659208ym87991671
Настраиваем обмен данными | Документация для разработчиков
Skip to main content

Настраиваем обмен данными

Android-приложение (фронтенд Native App) и сценарий (бэкенд Native App) могут обмениваться данными о действиях пользователя: голосовых запросах или нажатиях кнопок интерфейса. Чтобы настроить обмен данными, подключите библиотеку Messaging (входит в состав Native-App SDK).

Данные передаются в запросе SERVER_ACTION, который содержит объект server_action с произвольным идентификатором и параметрами сообщения.

Кроме SERVER_ACTION вы можете отправить запросы, описанные в классе MessageName. Примеры и описания запросов можно посмотреть в справке SmartApp API.

Отправка данных

Для создания запроса SERVER_ACTION в демонстрационном Native App используется класс ServerAction:

@Serializable
internal data class ServerAction<T>(
@SerialName("action_id")
val actionId: String,

@SerialName("parameters")
val parameters: T
)

Созданный запрос нужно передать в методе sendAction() вместе с названием запроса, например так:

private fun formActionFromNativeApp(): Payload =
Payload(
json.encodeToString(
ServerAction(
actionId = "ACTION_FROM_NATIVE_APP"
)
)
)

viewModelScope.launch(ioCoroutineDispatcher) {
messaging.sendAction(
MessageName.SERVER_ACTION,
formActionFromNativeApp()
)
}

Получение данных в бэкенде

После вызова метода sendAction() ассистент передает сообщение в сценарий Native App.

В сценарии, написанном с помощью Code, получить сообщение можно с помощью тега event!, в котором нужно указать идентификатор сообщения из поля action_id:

state: ActionNativeApp
event!: ACTION_FROM_NATIVE_APP

После чего запрос можно будет обработать необходимым образом.

Пример обмена данными в демо Native App

Для примера настройки обмена данными между фронтендом и бэкендом рассмотрим демонстрационный Native App. Когда приходит запрос «надеть на андроида шапку»:

  1. Ассистент определяет в этой фразе интент dressUp и вместе с запросом передает его в сценарий. Подробнее об обработке голосовых запросов читайте в разделе Настраиваем голосовое управление.
  2. Получив интент, сценарий переходит в стейт ЧтоНадеть, который формирует ответ с помощью тега script:
state: ЧтоНадеть
intent!: /dressUp
script:
var whatToWear = $parseTree["одежда"][0]["value"]
reply( {
"pronounceText": whatToWear + " надели на андроида",
items: [
formWearCommand(whatToWear)
]
},
$response);

В демонстрационном Native App в теге script используются вспомогательные функции reply() и formWearCommand() из библиотеки utils.js, которые подключены с помощью тега require в начале сценария. Вы можете подключить свои вспомогательные библиотеки в конфигурационном файле chatbot.yaml. Подробнее читайте в разделе Подключение скриптов.

  1. Функция formWearCommand()возвращает команду smart_app_data с данными о том, какие вещи нужно надеть на андроида:
function formWearCommand(whatToWear) {
return {
"command": {
type: "smart_app_data",
smart_app_data: {
command: "wear_this",
clothes: whatToWear
}
}
}
}
  1. Фронтенд смартапа получает сообщение в методе onMessage() и надевает шапку на андроида.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней