Assistant Client - это инструмент для локального тестирования и отладки Сanvas App c виртуальным ассистентом. Он реализован в виде JavaScript протокола, который эмулирует среду Android и вызывает нативные методы. Такой подход не требует от разработчика наличия физических устройств и позволяет запустить виртуального ассистента через браузер.
Оглавление
Конфигурация
Аутентификация
Для работы с Assistant Client необходимо:
- Завести аккаунт в SmartApp Studio.
- Создать приложение с типом Сanvas App.
- Получить токен в Кабинете разработчика и передать его в запросе.
Для получения токена необходимо авторизоваться в SmartApp Studio и в рамках Кабинета разработчика перейти в Настройки профиля > пункт Auth Token > опция Скопировать ключ. Полученный токен необходимо передавать в методе createSmartappDebugger
в параметре token
.
Установка
Для установки Assistant Client выполните следующую команду:
$ npm i @sberdevices/assistant-client
Пример использования
import { createAssistant, createSmartappDebugger } from '@sberdevices/assistant-client';
const initialize = (getState, getRecoveryState) => {
if (process.env.NODE_ENV === 'development') {
return createSmartappDebugger({
token: 'token',
initPhrase: 'Хочу попкорн',
getState,
getRecoveryState,
});
}
return createAssistant({ getState, getRecoveryState });
}
...
const assistant = initialize(() => state, () => recoveryState);
assistant.on('data', (command) => {
if (command.navigation) {
switch(command.navigation.command) {
case 'UP':
window.scrollTo(0, 0);
break;
case 'DOWN':
window.scrollTo(0, 1000);
break;
}
}
});
const handleOnClick = () => {
assistant.sendData({ action: { action_id: 'some_action_name' } });
};
API
createAssistant
Создает экземпляр AssistantClient
для запуска виртуального ассистента. Используется на устройствах в production среде.
Параметр | Обязательный | Описание |
---|
getState | Да | Функция, которая возвращает актуальное состояние смартапа |
getRecoveryState | Нет | Функция, которая сохраняет состояние смартапа на момент последнего закрытия |
createSmartappDebugger
Создает экземпляр AssistantClient
и добавляет на экран браузера панель с голосовым ассистентом (подобно устройствам). Панель ассистента находится в нижней части отрисованного экрана и позволяет отправлять виртуальному ассистенту следующие типы сообщений:
- текстовые сообщения через текстовое поле ввода;
- голосовые сообщения через кнопку "Салют".
createSmartappDebugger
используется для локальной отладки и разработки в development среде (Dev).
Параметр | Обязательный | Описание |
---|
token | Да | Токен из Кабинета Разработчика |
initPhrase | Да | Фраза, которая запускает приложение |
getState | Да | Функция, которая возвращает актуальное состояние смартапа |
getRecoveryState | Нет | Функция, которая сохраняет состояние смартапа на момент последнего закрытия |
settings | Нет | Объект настроек ассистента |
Свойство | Значения | По умолчанию | Описание |
---|
dubbing | true / false | true | Озвучивание ответа ассистента |
AssistantClient
close(): void
Вызывается со стороны смартапа для завершения работы.
Возвращает данные, полученные при инициализации смартапа.
getRecoveryState(): any
Возвращает состояние, сохраненное при закрытии приложения. Устройство запоминает последнее состояние, которое возвращает функция getRecoveryState при инициализации Assistant Client.
on('start', cb: () => void): void
Осуществляет подписку на событие готовности ассистента к работе.
Осуществляет подписку на событие получения данных с бэкенд.
Отправляет события с фронтенд на бэкенд через ассистента.
setGetState(nextGetState: () => AssistantAppState): void
Подменяет callback, который возвращает актуальное состояние приложения.
setGetRecoveryState(nextGetRecoveryState: () => any)
Подменяет callback, который возвращает объект, доступный только при следующем запуске приложения. Данные приходят при вызове getRecoveryState.
Форматы объектов
AssistantAppState
Объект AssistantAppState
— текущее состояние смартапа, которое не хранится в платформе или сценарии. Каждый раз, когда пользователь начинает говорить, Assistant Client вызывает getState, чтобы получить и передать в бэкенд состояние экрана пользователя.
То, что происходит на экране у пользователя и как он взаимодействует со смартапом в конкретный момент времени - ответственность смартапа. Assistant Client в данном случае - это буфер, который только передает состояние платформе или сценарию.
interface AssistantAppState {
[key: string]: any;
item_selector?: {
ignored_words?: string[];
items: AssistantViewItem[];
};
}
interface AssistantViewItem {
number?: number;
id?: string;
title?: string;
aliases?: string[];
server_action?: AssistantServerAction;
action?: AssistantAction | { type: string };
[key: string]: any;
}
Например, когда пользователь говорит "Покажи 1", бэкенд должен понимать, что скрывается за единицей (то есть, какой элемент у пользователя пронумерован этой цифрой). Ниже пример состояния, который позволяет понять бэкенду, что, называя "1", пользователь хочет чипсы.
{
item_selector: {
ignored_words: ["покажи"],
items: [
{ title: 'Сладкий попкорн' },
{ title: 'Соленый попкорн' },
{ title: 'Чипсы', number: 1 },
{ title: 'Начос', number: 2 },
{ title: 'Кола', number: 3 }
]
}
}
AssistantServerAction
Объект AssistantServerAction
- это любое сообщение, которое отправляется с фронтенда на бэкенд. Оно может быть привязано к ui-элементу и приходить с бэкенд, или формироваться самостоятельно фронтовой частью приложения при обработке событий внутри WebView смартапа.
interface AssistantServerAction {
action_id: string;
parameters?: Record<string, any>;
}
AssistantCharacterCommand
Объект AssistantCharacterCommand
- информирует смартап о текущем персонаже (Сбер, Афина или Джой). Персонаж может быть изменен в любой момент по инициативе пользователя. Поэтому разработчик может дополнительно добавить обработку таких изменений.
interface AssistantCharacterCommand {
type: "character";
character: {
id: "sber" | "eva" | "joy";
};
sdkMeta: {
requestId: string;
};
}
AssistantNavigationCommand
Объект AssistantNavigationCommand
- команда навигации пользователя по смартапу (например, "вперед, назад, дальше" и т.д.). В платформе виртуального ассистента есть стандартные фразы, которые приходят и обрабатываются одинаково для всех смартапов.
interface AssistantNavigationCommand {
type: "navigation";
navigation: { command: "UP" | "DOWN" | "LEFT" | "RIGHT" | "FORWARD" | "BACK" };
sdkMeta: {
requestId: string;
};
}
AssistantSmartAppCommand
Объект AssistantSmartAppCommand
- это команда передачи смартапу любых данных с бэкенд.
interface AssistantSmartAppCommand {
type: "smart_app_data";
smart_app_data: Record<string, any>;
sdkMeta: {
requestId: string;
};
}
Требования к устройствам
Смартапы должны корректно отображаться на разных устройствах (SberBox, SberPortal и др). Для этого необходимо проверять смартап на следующих разрешениях: 559x568, 768x400, 959x400, 1920x1080. Настроить эти разрешения можно на вкладке Devices Chrome.