Начиная с сентября 2020 года подразделение Сбера SberDevices развивает собственную платформу для разработки приложений, основанных на семействе виртуальных ассистентов (Сбер, Афина и Джой) или смартапов. Кроме того SberDevices предоставляет набор инструментов для разработки таких приложений - SmartApp Studio, SmartApp Code и другие, а также маркетплейс для загрузки и продажи приложений - SmartMarket.

Смартапы бывают двух видов: Chat App и Canvas App. В данной статье мы будем рассматривать второй тип. Canvas App - это обычное веб приложение, которое можно установить на одно из устройств SberDevices (Sber Portal, Sber Box, Sber Watch) и возможности которого расширены благодаря использованию виртуальных ассистентов. SmartApp можно сравнить с навыком в Алисе, но SmartApp предоставляет более широкий набор возможностей по взаимодействию: голосом, касанием, текстовым вводом и даже виртуальным геймпадом.
Есть хорошая статья, в которой подробно описана процедура локального тестирования смартапа. В этой статье я расскажу о локальном тестировании смартапа без необходимости приобретения устройства от Сбера.
Установка библиотек
Для локального тестирования смартапа в SberDevices была разработана библиотека assistant-client. assistant-client позволяет обмениваться сообщениями между смартап бекендом (webhook) и фронтендом.
Для начала установим библиотеку assistant-client на компьютере
$ npm i @sberdevices/assistant-client
Также установим React
npm install --save react react-dom react-scripts
Теперь нужно создать отдельный проект в SmartMarket Code и SmartMarket Studio. Здесь я не буду описывать процесс создания проекта - он довольно простой.
Для начала нам нужно связать проект в SmartMarket Studio и SmartMarket Code. Для этого нам потребуется вебхук смартапа в SmartMarket Code. Его можно получить в разделе Публикации в левом панели проекта в Code
Затем нужно открыть настройки проекта в Studio и вставить вебхук в поле Внешняя ссылка под заголовком Webhook смартапа. Также нужно выбрать тип проекта SmartApp API.
После каждой публикации версии смартапа при внесении изменений нужно обновить вебхук бекенда в Studio.
Кроме того в Studio нужно указать активационную фразу для смартапа. В поле Активационные имена в настройках проекта введем слово для активации (может быть имя проекта), которое будет использоваться для старта смартапа с помощью голосовой команды "Запусти <Активационное имя>".
В качестве активационного имени рекомендуется указывать слово на русском языке. Можно использовать целую фразу.
Для тестирования с помощью Assistant Client нам понадобится токен. Его можно найти в Studio. Переходим в настройки профиля, выбираем в левой панели Эмулятор и копируем токен.
Токен действителен в течении суток. После этого его необходимо обновить нажатием кнопки Обновить ключ.
Создание клиента
Сейчас создадим простое приложение на React
npx create-react-app test_app
Откроем файл App.tsx и добавим строки импорта необходимых модулей
import React, { FC, memo, useReducer, useState, useRef, useEffect } from 'react'; import { createSmartappDebugger, createAssistant, AssistantAppState } from '@sberdevices/assistant-client';
Нам нужно проинициализировать Assistant Client
const initializeAssistant = (getState: any) => { if (process.env.NODE_ENV === 'development') { return createSmartappDebugger({ token: "<токен>", initPhrase: `Запусти <активационное имя>`, getState, nativePanel: { defaultText: 'Покажи что-нибудь', screenshotMode: false, tabIndex: -1, }, }); } return createAssistant({ getState }); };
Осталось только добавить такой код React:
export const App: FC = memo(() => { const assistantStateRef = useRef<AssistantAppState>(); const assistantRef = useRef<ReturnType<typeof createAssistant>>(); useEffect(() => { assistantRef.current = initializeAssistant(() => assistantStateRef.current); assistantRef.current.on('data', ({ action }: any) => { }); }, []); return ( <div className="App"> <header className="App-header"> <h1>Title</h1> </header> </div> ); });
Теперь запустим фронтенд:
npm start
У нас откроется такой экран
Наше приложение активируется при старте. Мы можем нажать на зеленый лавашар и произнести голосом команду или нажать одну из кнопок. Разработку сценария на бекенде смартапа можно посмотреть в серии обучающих видео.
PS: Для лучшего понимания работы смартапов советую посмотреть видео команды СберДевайсы (видео, серия обучающих видео).
В заключение хотел бы сказать, что при возникновении проблемы при разработке смартапов можно обратиться в чат команды СберДевайсы в Телеграме. В этом сообществе можно быстро получить ответ на любые вопросы или предложить идеи по улучшению платформы. Всем удачи в разработке виртуальных ассистентов для SmartMarket!
