Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@sberdevices/assistant-client

sberdevices346Sber Public License at-nc-sa v.25.0.2TypeScript support: included

Модуль взаимодействия с виртуальным ассистентом

sber, assistant, smartapp

readme

npm ui

Assistant Client — это инструмент для локального тестирования и отладки Сanvas App c виртуальным ассистентом. Он реализован в виде JavaScript протокола, который эмулирует среду Android и вызывает нативные методы. Такой подход не требует от разработчика наличия физических устройств и позволяет запустить виртуального ассистента через браузер.

Пример: Todo смартап, который демонстрирует взаимодействие с Assistant Client.

Оглавление


Конфигурация

Аутентификация

Для работы с Assistant Client необходимо:

  1. Завести аккаунт в SmartApp Studio.
  2. Создать смартап типа Сanvas App.
  3. Получить токен. Для этого необходимо перейти в Настройки профиля > пункт Auth Token > опция Скопировать ключ.
  4. Передать полученный токен в методе createSmartappDebugger в параметре token.

Требования к устройствам

Смартапы должны корректно отображаться на разных устройствах (SberBox, SberPortal и др). Для этого необходимо проверять смартап на следующих разрешениях: 559x568, 768x400, 959x400, 1920x1080. Настроить эти разрешения можно на вкладке Devices Chrome.

Установка

Для установки Assistant Client выполните следующую команду:

$ npm i @sberdevices/assistant-client

Пример использования

// Функция createSmartappDebugger используется в development среде. В production среде необходимо использовать createAssistant.
import { createAssistant, createSmartappDebugger } from '@sberdevices/assistant-client';

const initialize = (getState, getRecoveryState) => {
    if (process.env.NODE_ENV === 'development') {
        return createSmartappDebugger({
            // Токен из Кабинета разработчика
            token: 'token',
            // Пример фразы для запуска смартапа
            initPhrase: 'Хочу попкорн',
            // Текущее состояние смартапа
            getState,
            // Состояние смартапа, с которым он будет восстановлен при следующем запуске
            getRecoveryState,
            // Необязательные параметры панели, имитирующей панель на реальном устройстве
            nativePanel: {
                // Стартовый текст в поле ввода пользовательского запроса
                defaultText: 'Покажи что-нибудь',
                // Позволяет включить вид панели, максимально приближенный к панели на реальном устройстве
                screenshotMode: false,
                // Атрибут `tabindex` поля ввода пользовательского запроса
                tabIndex: -1,
            },
        });
    }

      // Только для среды production
    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: { type: 'some_action_name', payload: { param: 'some' } } });
};

const handleOnRefreshClick = () => {
    // Отправка сообщения бэкенду с возможностью подписки на ответ.
    // В обработчик assistant.on('data') сообщение не передается
    const unsubscribe = assistant.sendAction(
        { type: 'some_action_name', payload: { param: 'some' } },
        (data: { type: string; payload: Record<string, unknown> }) => {
            // Обработка данных, переданных от бэкенд
            unsubscribe();
        },
        (error: { code: number; description: string }) => {
            // Обработка ошибки, переданной от бэкенд
        });
}

Альтернативное подключение

Assitant Client доступен для подключения через <script>. Версию assistant сlient можно поменять в src. Доступ к API осуществляется через глобальную переменную assistant.

Пример, для разработки и отладки в браузере (в этом случае обязательно подключение react):

<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@sberdevices/assistant-client@4.7.0/umd/assistant.development.min.js"></script>
<script>
  const client = assistant.createSmartappDebugger({
            // Токен из Кабинета разработчика
            token: 'token',
            // Пример фразы для запуска смартапа
            initPhrase: 'Хочу попкорн',
            // Текущее состояние смартапа
            getState: () => ({}),
            // Состояние смартапа, с которым он будет восстановлен при следующем запуске
            getRecoveryState: () => ({}),
        });
</script>

Пример, для использования на устройствах:

<script src="https://unpkg.com/@sberdevices/assistant-client@4.7.0/umd/assistant.production.min.js"></script>
<script>
  const client = assistant.createAssistant({ getState: () => ({}), getRecoveryState: () => ({}), });
</script>

API

createAssistant

Создает экземпляр AssistantClient для запуска виртуального ассистента. Используется на устройствах в production среде.

Параметр Обязательный Описание
getState Да Функция, которая возвращает актуальное состояние смартапа
getRecoveryState Нет Функция, которая сохраняет состояние смартапа на момент последнего закрытия

createSmartappDebugger

Создает экземпляр AssistantClient и добавляет на экран браузера панель с голосовым ассистентом (подобно устройствам). Панель ассистента находится в нижней части отрисованного экрана и позволяет отправлять виртуальному ассистенту следующие типы сообщений:

  • текстовые сообщения через текстовое поле ввода;
  • голосовые сообщения через кнопку «Салют».

createSmartappDebugger используется для локальной отладки и разработки в development среде.

Параметр Обязательный Описание
token Да Токен из SmartApp Studio
initPhrase Да Фраза, которая запускает смартап
getState Да Функция, которая возвращает актуальное состояние смартапа
getRecoveryState Нет Функция, которая сохраняет состояние смартапа на момент последнего закрытия
settings Нет Объект настроек ассистента
nativePanel Нет Объект настроек панели ассистента
surface Нет Строка, название поверхности. Возможные значения: SBERBOX (SberBox), STARGATE (SberPortal), SATELLITE (SberBox Top) SBOL (приложение СберБанк Онлайн), COMPANION (приложение Салют), TV (Салют ТВ), TV_HUAWEI (Huawei Vision), TIME (SberBox Time)

Свойства Settings

Свойство Значения По умолчанию Описание
dubbing true / false true Озвучивание ответа ассистента

Свойства nativePanel

Все свойства являются необязательными.

Свойство Тип значения По умолчанию Описание
defaultText string Покажи что-нибудь Стартовый текст в поле ввода пользовательского запроса
screenshotMode boolean false Позволяет включить вид панели, максимально приближенный к панели на реальном устройстве
tabIndex number -1 Атрибут tabindex поля ввода пользовательского запроса

AssistantClient

cancelTts(): void

Опциональный метод. Вызывается со стороны смартапа для остановки озвучивания ответа (pronounceText). Имеет значение undefined, если устройство не поддерживает данную функцию.

close(): void

Вызывается со стороны смартапа для завершения работы.

getInitialData(): AssistantCommands[]

Возвращает данные, полученные при инициализации смартапа. Передает в Assistant Client текущего ассистента, а не ассистента, выставленного по умолчанию. Если при запуске смартапа не вызвать команду getInitialData(), то команды из appInitialData будут отправляться в on('data').

getRecoveryState(): unknown

Возвращает состояние, сохраненное при закрытии смартапа. Устройство запоминает последнее состояние, которое возвращает функция getRecoveryState при инициализации Assistant Client.

on('start', cb: () => void): void

Осуществляет подписку на событие готовности ассистента к работе.

on('data', cb: (data: AssistantCharacterCommand | AssistantNavigationCommand | AssistantInsetsCommand | AssistantThemeCommand | AssistantSmartAppError | AssistantSmartAppCommand) => {}): void

Осуществляет подписку на событие получения данных с бэкенда. Получает команды из appInitialData, если при запуске смартапа не была вызвана команда getInitialData().

sendAction({ type: string; payload: Record<string, unknown> }, params?: { name?: string; requestId?: string }) => void

Передает ошибки и обработчики ответа от бэкенда.
sendAction — отправляет server-action и типизирует сообщения data и error.
clear() — делает отписку от сообщений бэкенда. Это означает, что сообщения не будут переданы в обработчик assistant.on('data')

Пример:

import { AssistantSmartAppCommand } from '@sberdevices/assistant-client';

interface SomeBackendMessage extends AssistantSmartAppCommand['smart_app_data'] {
  type: 'target_action',
  payload: {
    data: ['some_data'],
  },
}

const unsubscribe = assistant.sendAction<SomeBackendMessage>({ type: 'some_action_name', payload: { someParam: 'some_value' } },
  ({ payload }) => {
    // обработка payload.data
    unsubscribe();
  }, (error) => {});

sendData({ action: AssistantServerAction, requestId?: string }, onData?: data: AssistantCharacterCommand | AssistantNavigationCommand | AssistantSmartAppError | AssistantSmartAppCommand) => void): () => void

Отправляет события с фронтенда на бэкенд через ассистента. Первый параметр (обязательный) принимает данные для отправки. Второй параметр (опциональный) принимает обработчик ответа (на переданные первым параметром данные). В этом случае в on('data') ответ не приходит. Возвращает функцию, вызов которой отменяет обработчик ответа.

Пример с обработкой ответа:

...

const unsubscribe = assistant.sendData({ action: { type: 'some_action_name' } }, (data: command) => {
  if (data.type === 'smart_app_data' && data.smart_app_data.type === 'target_action') {
    unsubsribe();
    ... // обработка команды
  }
});

setGetState(nextGetState: () => AssistantAppState): void

Подменяет callback, который возвращает актуальное состояние смартапа.

setGetRecoveryState(nextGetRecoveryState: () => unknown)

Подменяет callback, который возвращает объект, доступный только при следующем запуске смартапа. Данные приходят при вызове getRecoveryState.


Форматы объектов

AssistantAppState

Объект AssistantAppState — текущее состояние смартапа, которое не хранится в платформе или сценарии. Каждый раз, когда пользователь начинает говорить, Assistant Client вызывает getState, чтобы получить и передать в бэкенд состояние экрана пользователя. То, что происходит на экране у пользователя и как он взаимодействует со смартапом в конкретный момент времени — ответственность смартапа. Assistant Client в данном случае — это буфер, который только передает состояние платформе или сценарию.

interface AssistantAppState {
  // Любые данные, которые могут потребоваться в бэкенде для принятия решений
  [key: string]: unknown;
  item_selector?: {
    ignored_words?: string[];
    // Список соответствий между голосовыми командами и действиями в приложении
    items: AssistantViewItem[];
  };
}

interface AssistantViewItem {
  // Уникальный (в рамках items) порядковый номер элемента, который назначается смартапом
  number?: number;
  // Уникальный id элемента
  id?: string;
  // Ключевая фраза, которая должна приводить к данному действию
  title?: string;
  // Фразы-синонимы, которые должны приводить к данному действию
  aliases?: string[];
  // Проксирование action обратно на бэкенд
  server_action?: AssistantServerAction;
  // Выполнение действия от имени пользователя
  action?: Action | { type: string };
  // Дополнительные данные для бэкенд
  [key: string]: unknown;
}

Например, когда пользователь говорит «Покажи 1», бэкенд должен понимать, что скрывается за единицей (то есть, какой элемент у пользователя пронумерован этой цифрой). Ниже пример состояния, который позволяет понять бэкенду, что, называя «1», пользователь хочет чипсы.

{
  item_selector: {
    ignored_words: ["покажи"],
    items: [
      { title: 'Сладкий попкорн' },
      { title: 'Соленый попкорн' },
      { title: 'Чипсы', number: 1 },
      { title: 'Начос', number: 2 },
      { title: 'Кола', number: 3 }
    ]
  }
}

AssistantServerAction

Объект AssistantServerAction — это любое сообщение, которое отправляется с фронтенда на бэкенд. Оно может быть привязано к ui-элементу и приходить с бэкенд, или формироваться самостоятельно фронтовой частью при обработке событий внутри WebView смартапа.

interface AssistantServerAction {
  // Тип Server Action
  type: string;
  // Любые параметры
  payload?: Record<string, unknown>;
}

AssistantCharacterCommand

Объект AssistantCharacterCommand — информирует смартап о текущем персонаже (Сбер, Афина или Джой). Персонаж может быть изменен в любой момент по инициативе пользователя. Поэтому разработчик может дополнительно добавить обработку таких изменений.

interface AssistantCharacterCommand {
  type: "character";
  character: {
    id: "sber" | "eva" | "joy";
  };
  sdk_meta: {
    requestId: string;
  };
}

AssistantNavigationCommand

Объект AssistantNavigationCommand — команда навигации пользователя по смартапу (вперед, назад, дальше и т. д.). В платформе виртуального ассистента есть стандартные фразы, которые приходят и обрабатываются одинаково для всех смартапов.

interface AssistantNavigationCommand {
  // Тип команды
  type: "navigation";
  // Навигационная команда (направление навигации)
  navigation: { command: "UP" | "DOWN" | "LEFT" | "RIGHT" | "FORWARD" };
  sdk_meta: {
    requestId: string;
  };
}

AssistantInsetsCommand

Объект AssistantInsetsCommand — команда, которая сообщает смартапу о том, что поверх него будет отображен нативный UI и его размеры. В insets передаются отступы от краев экрана. Их нужно соблюдать, чтобы не было наложения нативных UI элементов и контента смартапа.

interface AssistantInsetsCommand {
  type: 'insets';
  insets: {
    left: number;    //px
    top: number;     //px
    right: number;   //px
    bottom: number;  //px
  };
}

AssistantThemeCommand

Объект AssistantInsetsCommand - команда, которая сообщает смартапу текущую тему платформы — тёмная или светлая. По умолчанию нужно использовать тёмную тему.

interface AssistantThemeCommand {
   type: 'theme';
   theme: {
      name: 'dark' | 'light'
   }
}

AssistantSmartAppError

Объект AssistantSmartAppError — это уведомление об ошибке.

interface AssistantSmartAppError {
  type: 'smart_app_error';
  smart_app_error: {
    code: number;
    description: string;
  };
}

AssistantSmartAppCommand

Объект AssistantSmartAppCommand — это команда передачи смартапу любых данных с бэкенда.

interface AssistantSmartAppCommand {
  // Тип команды
  type: "smart_app_data";
  smart_app_data: {
    type: string;
    // Любые данные, которые нужны смартапу
    payload: Record<string, unknown>;
  };
  sdk_meta: {
    requestId: string;
  };
}

Пульт

Нажатие кнопок на пульте

Для получения и обработки нажатия кнопок на пульте от SberBox необходимо подписаться на события нажатия клавиш клавиатуры. Пример ниже:

window.addEventListener('keydown', (event) => {
  switch(event.code) {
    case 'ArrowDown':
      // вниз
      break;
     case 'ArrowUp':
      // вверх
      break;
     case 'ArrowLeft':
      // влево
      break;
     case 'ArrowRight':
      // вправо
      break;
     case 'Enter':
      // ок
     break;
  }
});

Навигация по страницам смартапа

Для корректной обработки кнопки back и навигации по страницам смартапа необходимо построить историю переходов, используя History API. Например, подписываемся на window.onpopstate и реализуем изменение страницы в обработчике этого события. Когда хотим выполнить изменение страницы, вызываем window.history.pushState:


const [page, setPage] = useState<string>('previous');

const handleNext = () => {
  window.history.pushState({ page: 'next' }, ''); // инициируем переход на следующую страницу
}

useEffect(() => {
  window.history.replaceState({ page: 'previous' }, ''); // устанавливаем текущую страницу
  window.onpopstate = ({ state }) => {
    setPage(state.page); // выполняем переход на заданную страницу: next - по вызову handleNext или previous - по нажатию кнопки back
  }
}, []);

Утилиты для тестирования

Имитация команд ассистента

Для имитации команд от ассистента используйте утилиту createAssistantHostMock. Ниже приведен пример использования. Полный пример доступен по ссылке.

import { createAssistantHostMock } from '@sberdevices/assistant-client';

const ITEMS = [
  {
    id: 1,
    title: 'Купить молоко',
    number: 1,
  },
  {
    id: 2,
    title: 'Купить хлеб',
    number: 2,
  },
];

describe('Мой список дел', () => {
  it('По клику на чекбокс - ожидаем экшен "done" c заголовком выбранного элемента', (done) => {
    cy.visit('/')
      .window()
      .then((window) => {
        const mock = createAssistantHostMock({ context: window });
        const selected = ITEMS[1];
        mock.onReady(() => {
          // эмулируем инициализационную команду от бэкенда со списком задач
          mock.receiveCommand({
            type: 'smart_app_data',
            action: {
              type: 'init',
              notes: [...ITEMS],
            },
          })
          .then(() =>
            // ожидаем вызов assistantClient.sendData
            mock.waitAction(() =>
                // эмулируем отметку выполнения пользователем, который должен вызвать sendData({ action: { type: 'done } })
                window.document.getElementById(`checkbox-note-${selected.id}`).click(),
            ),
          )
          .then(({ action, state }) => {
            expect(action.type).to.equal('done'); // ожидаем экшен data_note
            expect(action.payload?.title).to.equal(selected.title); // ожидаем в параметрах title экшена
            expect(state?.item_selector.items).to.deep.equal(ITEMS); // ожидаем отправку списка в стейте
            done();
          });
        });
      });
  });
});

createAssistantHostMock можно вызывать только при использовании createAssistant. Например, при использовании cypress функция инициализации ассистента может выглядеть следующим образом:

import { createAssistant, createSmartappDebugger } from '@sberdevices/assistant-client';

const initializeAssistant = (getState: AssistantAppState) => {
    if (process.env.NODE_ENV === 'development' && window.Cypress == null) {
        return createSmartappDebugger({
            token: process.env.REACT_APP_TOKEN ?? '',
            initPhrase: `Запусти ${process.env.REACT_APP_SMARTAPP}`,
            getState,
        });
    }

    if (window.cypress) {
      window.appInitialData = [];
    }

    return createAssistant({ getState });
};

addActionHandler(actionType: string, handler: (action: AssistantServerAction) => void): void

Подписка на экшены фронтенда с определенным type, который передается первым параметром.

removeActionHandler(actionType: string): void

Отмена подписки от экшенов фронтенда.

receiveCommand(command: AssistantClientCommand): Promise<void>

Эмуляция команды, полученной от бэкенда. Команда приходит подписчикам AssistantClient.onData.

waitAction(onAction?: () => void): Promise<{ state: AssistantAppState; action: AssistantServerAction; name?: string; requestId?: string; }>

Получение promise, который будет разрезолвлен при следующем вызове AssistantClient.sendData

onReady(cb: () => void): void

Подписка на события готовности утилиты. Параметр cb будет вызван по готовности к работе.

Запись лога сообщений

В режиме разработки есть возможность записать и скачать лог сообщений. Управление записью осуществляется кнопками start и stop. Кнопка save сохранит файл с логом в загрузки браузера. Пример активации панели управления записью лога:

import { createSmartappDebugger } from '@sberdevices/assistant-client';

const assistant = createSmartappDebugger({
    token: process.env.REACT_APP_TOKEN ?? '',
    initPhrase: `Запусти ${process.env.REACT_APP_SMARTAPP}`,
    getState,
    enableRecord: true, // активируем функцию записи лога
    recordParams: {
      defaultActive: true, // включать запись при старте приложения (по-умолчанию = true)
    }
  });

Воспроизведение лога сообщений

Пример пошагового воспроизведения лога сообщений. Входящие сообщения от ассистента будут последовательно переданы подписчикам AssistantClient.on('data').

import { createRecordPlayer } from '@sberdevices/assistant-client';
import assistantLog from './assistant-log.json';

const player = createRecordPlayer(assistantLog);
let end = false;

while(!end) {
  end = !player.continue();
}

continue(): boolean

Передает следующее сообщение от ассистента в AssistantClient (может содержать несколько команд). Возвращает флаг наличия в логе следующих сообщений от ассистента.

play(): void

Последовательно передает все сообщения лога от ассистента в AssistantClient.

getNextAction: { action: AssistantServerAction; name?: string; requestId?: string; }

Возвращает следующее сообщение от AssistantClient (вызов sendData) в ассистент. Можно использовать для сравнения эталонного сообщения (из лога) и текущего в тесте.

setRecord(record: AssistantRecord): void

Загружает указанную запись в плеер.


FAQ

Не работает озвучка и/или микрофон в браузере

Нужно перейти в настройки сайта и разрешить доступ к звуку и микрофону.

changelog

v5.0.1 (Tue Apr 19 2022)

🐛 Bug Fix

  • Нажатие на enter в смартаппах #8 (@sasha-tlt)

Authors: 1


v5.0.0 (Thu Apr 14 2022)

💥 Breaking Change

  • BREAKING: Запрашивать токен перед соединением (@sasha-tlt)
  • BREAKING: createAssistantClient (@sasha-tlt)
  • refactor: Переделана работа с озвучкой и голосом (@sasha-tlt)

🚀 Enhancement

  • feat: Поддержка system back (@sasha-tlt)
  • feat: Добавлена возможность подклеивать ArrayBuffer[] к голосовому сообщению (@evgeniysemin)
  • feat: Добавить команду остановки tts (@sasha-tlt)
  • feat: Добавить параметр для выбора поверхности (@sasha-tlt)
  • feat: Записывать версию assistant-client в window (@sasha-tlt)
  • feat: метод findInInitialData (@VladislavPetyukevich)
  • feat: Добавлен эмитер StartSmartSearch (@evgeniysemin)
  • feat: Добавлено API для управления отображением NativePanel в рантайм (assistant.nativePanel) (@evgeniysemin)
  • feat: Актуализирован вид NativePanel. Добавлен screenshotMode для NativePanel (@evgeniysemin)
  • feat: Добавлена поддержка BackgroundApps (@evgeniysemin)
  • feat: улучшение api методов setHints и setSuggests (IAnKulygin@sberbank.ru)
  • feat: Добавлено: assistant.listen возвращает промис запроса микрофона (@evgeniysemin)
  • feat: Добавлено событие ассистента - персонаж (@sasha-tlt)
  • feat: добавлен геттер settings для объекта assistant (@Burzachil)
  • feat: Добавлен метод sendText для AssistantHost (@evgeniysemin)
  • feat: Приложение может управлять ready (@sasha-tlt)
  • feat: Добавлен тип AssistantThemeCommand (@evgeniysemin)
  • feat: запилил рекордер моков для эмуляции vps (avstarikovich@sberbank.ru)
  • feat: вынес метод для voice.stop (@neolite)
  • feat: Добавить методы setSuggests и setHints (@sasha-tlt)
  • feat: Поддержать команду visiblity (@maderwin)
  • feat: Отправлять additionalInfo (@sasha-tlt)
  • feat: отправка cancel при отмене слушания (@neolite)
  • feat: Флаг первой сессии должен быть аргументом assistant.start (@sasha-tlt)
  • feat: Добавить возможность расширять meta (@sasha-tlt)
  • feat: Отключение приветствия - параметр для start (@sasha-tlt)
  • feat: эмитить ActionCommand приходящие в systemMessage (@soulko)
  • feat: Частичный переход на типы из @salutejs/types (@sasha-tlt)
  • feat: эмитить ошибку при неудачном реконекте сокета (@soulko)
  • feat: assistant host postmessage for iframe (@Turanchoks)
  • feat: Ответ на sendAction без подписки теперь попадает в общие подписки (assistant.on('data')) (@sasha-tlt)
  • feat(initializeassistantsdk): добавил features и capabilities как параметры initializeAssistantSDK (PIReutov@sberbank.ru)
  • feat: Без действий пользователя не рекконектиться к vps (@sasha-tlt)
  • feat: Поддержка smartAppData и smartAppError (@sasha-tlt)
  • feat: Возвращать observable при отправке команд (@sasha-tlt)
  • feat: поддержка команды start_music_recognition (@sasha-tlt)
  • feat: Отправка версии клиента в "surface_version" (@ivan-ushatsky)
  • feat: фильтровать дубли сообщений appInitialData (@sasha-tlt)
  • feat: Поддержка флага auto_listening (@sasha-tlt)
  • feat: Изменились параметры createOfflinePlayer (@sasha-tlt)
  • feat: Поддержать recoveryState (@sasha-tlt)
  • feat: Добавлен тип AssistantSmartAppError (@sasha-tlt)
  • feat: Поддержка insets (@sasha-tlt)
  • feat: Утилиты для тестирования смартапов (@sasha-tlt)
  • feat: ts-дженерики для входящих комманд ассистента (@sasha-tlt)
  • feat: UMD для unpkg (@sasha-tlt)
  • feat: add basic release workflow (@IgorAntonov)

🐛 Bug Fix

  • fix: Удалён ненужный комментарий #5 (@ivan-ushatsky)
  • chore: Отключен Cypress Record #4 (@ivan-ushatsky)
  • fix: Добавлены hints в SystemMessage #3 (@ivan-ushatsky)
  • fix: После включения озвучки не срабатывает автослушивание (@sasha-tlt)
  • fix: После отписки, команды не приходят в on('data') (xwND1k9iIGYi7pQL)
  • fix: Стейт не приходит в сценарий (@sasha-tlt)
  • fix: Не падать в ноде (@sasha-tlt)
  • fix: Команды из appInitialData приходят два раза (@sasha-tlt)
  • fix: В канвас не приходит smart_app_error (@sasha-tlt)
  • fix: объявлять appInitialData в фрейме (@sasha-tlt)
  • fix: Исправлен асинхронный сбор меты background_apps (@evgeniysemin)
  • fix: Стек initialCommands теперь формируется при window.AssistantClient.onStart() (@evgeniysemin)
  • fix: Удалён метод Promise.allSettled (@evgeniysemin)
  • fix: Исправлен момент отправки эмоции listen при готовности захвата речи (@evgeniysemin)
  • fix: Отправлять current_app вместе с greetings (@sasha-tlt)
  • fix: activate_app_info по-умолчанию должен быть true (@sasha-tlt)
  • fix: Использовать 5 версию vps (@sasha-tlt)
  • fix: Озвучка не проигрывается, если контекст на паузе (@sasha-tlt)
  • fix: Вернуть афину в AssistantCharacterCommand (@sasha-tlt)
  • fix: dev и prod сборки umd (@Burzachil)
  • fix: AppInitialData не прокидывается в onData в Салют (@evgeniysemin)
  • fix: merge additionaInfo in updateDevice (@soulko)
  • fix: Не работает подписки sendAction в браузере (@sasha-tlt)
  • fix: запретил линтеру ругаться на console в некоторых местах (avstarikovich@sberbank.ru)
  • fix: отрефакторил механизм логирования и записи (avstarikovich@sberbank.ru)
  • fix: убрал лишнюю абстракцию mockDecoder'a (avstarikovich@sberbank.ru)
  • fix: ошибка при оффлайне (@soulko)
  • fix: Не отсылается initPhrase, если userId не меняется (@sasha-tlt)
  • fix: Отправка systemMessage после запроса на пермишены (@soulko)
  • fix: changeSettings не должен создавать коннект (@sasha-tlt)
  • fix: Доработать саджесты (@sasha-tlt)
  • fix: Не воспроизводить озвучку, если плеер не готов (@sasha-tlt)
  • fix: tree shaking и ssr (@sasha-tlt)
  • fix: остановка слушания при disableListening=true (@soulko)
  • fix: Обновление настроек должно поднимать соединение (@sasha-tlt)
  • fix: panel (@sasha-tlt)
  • fix: Верстка панели в px по макету (@sasha-tlt)
  • fix: Неразрезолвленный доступ к микрофону (@sasha-tlt)
  • fix: Добавлен onStart для AssistantPostMessage (@sasha-tlt)
  • fix: Не останавливается озвучка, если слушание выключено (@sasha-tlt)
  • fix: Параметр features отсутсвует у createAssistantDev (@sasha-tlt)
  • fix: Ограничить время ожидания стейта от аппа (@sasha-tlt)
  • fix: Остановка воспроизведения озвучки и последующий старт работают некорректно (@sasha-tlt)
  • fix: После закрытия аппа, логика взаимодействия с аппом продолжается (@sasha-tlt)
  • fix: Не работает лавашар на ios safari (@sasha-tlt)
  • fix: Не проигрывать озвучку в ответ на текстовые сообщения (@soulko)
  • fix: Отправлять настройки звука если был старт (@sasha-tlt)
  • fix: Вызов changeConfiguration крашит сокет (@sasha-tlt)
  • fix: Отправка флага первой сессии (@sasha-tlt)
  • fix: слушание и озвучка в safari ios (@sasha-tlt)
  • fix: слушание не работает в firefox (@sasha-tlt)
  • fix: export ActionCommandEvent type (@soulko)
  • fix: Отправлять appInfo в ответ на запрос пермишенов (@sasha-tlt)
  • fix: обработка ошибок коннекта (@sasha-tlt)
  • fix: корректная отправка сообщений из очереди после вызова updateDefaults (@sasha-tlt)
  • fix: added sendCancel method (@ivan-ushatsky)
  • fix: updated typing.ts same as .proto (@ivan-ushatsky)
  • fix: added field Message.content.cancel (@ivan-ushatsky)
  • fix: ssr снова работает (@sasha-tlt)
  • fix: В консоль не падают ошибки в ie (@sasha-tlt)
  • fix: payload опционален в AssistantSmartAppCommand (@sasha-tlt)
  • fix: Поддержка ssr (@sasha-tlt)
  • fix: AssistantSmartAppData['smart_app_data'] теперь unknown (@sasha-tlt)
  • fix: Остановка воспроизведения подгружающейся озвучки (@sasha-tlt)
  • fix: Воспроизведение озвучки в safari (@sasha-tlt)
  • fix: NativePanel mobile layout (@it-efrem)
  • fix: Добавление поля tenant в Device (@ivan-ushatsky)
  • fix: bump auto version (@Yeti-or)
  • fix: Эмитить initialData в onData, если не было вызова getInitialData (@sasha-tlt)
  • fix: Команда 'back' не приходит (@sasha-tlt)
  • fix: Дублирование сообщений из appInitialData (@sasha-tlt)
  • fix: расширил интерфейс AssistantAppContext (avstarikovich@sberbank.ru)
  • fix: Проигрывание озвучки после остановки (@sasha-tlt)
  • fix: Добавить метод остановки воспроизведения текущей очереди озвучки (@sasha-tlt)
  • fix: Не бросать ошибку при запрете доступа к микрофону (@sasha-tlt)
  • fix: Не падать без appInitialData (@sasha-tlt)
  • fix: Отправлять конечную гипотезу до отписки от события createMusicRecognizer (maprimberdiev@sberbank.ru)
  • fix: Отправлять конечную гипотезу до отписки от события createSpeechRecognizer (maprimberdiev@sberbank.ru)
  • fix: Не показывать анимацию при запрете доступа к микрофону (@sasha-tlt)
  • fix: Дев-токена слишком длинный на ie (@sasha-tlt)
  • fix: Обновление protobufjs (@sasha-tlt)
  • fix: nanoevents (@sasha-tlt)
  • fix: мета в intialSettings (@sasha-tlt)
  • fix: обновление контракта (@sasha-tlt)
  • fix: не падать, если appInitialData нет (@Turanchoks)
  • fix: декодинг мтт (@sasha-tlt)
  • fix: Воспроизведение пустой озвучки (@sasha-tlt)
  • fix: Добавлены дженерики в мок (@sasha-tlt)
  • fix: дженерики для AppState action (@sasha-tlt)
  • fix: воспроизведение озвучки из буфера при остановленном плеере (@sasha-tlt)
  • fix: Пробрасывать sdkMeta в сообщения в window.appInitialData (@sasha-tlt)
  • fix: eslint (@sasha-tlt)
  • fix: AssistantCharacterCommand приходит только 1 раз (@sasha-tlt)
  • fix: eslint errors (@IgorAntonov)
  • fix: поправил вывод стейта (@Turanchoks)
  • fix: передать пустую строчку вместо null в sendDataContainer (@Turanchoks)

⚠️ Pushed to main

  • test: Ошибка из-за отсутсвие appInitialData (@sasha-tlt)
  • docs: ошибка в README (@sasha-tlt)
  • docs: Добавлено описание AssistantThemeCommand (@sasha-tlt)
  • docs: Исправление битой ссылке в README.md примера todo-canvas-app (@BorodinDK)
  • docs: Ссылки в альтернативном подключении (@sasha-tlt)
  • chore: Ошибка при сборке (@sasha-tlt)
  • docs: readme для sdk (@sasha-tlt)
  • refactor: работа с озвучкой и голосом (@sasha-tlt)
  • refactor: файловая структура sdk (@sasha-tlt)
  • chore: Ошибки линтера (@sasha-tlt)
  • refactor: Исключена зависимость транспорта от протокола (@ivan-ushatsky)
  • docs: корректная версия assistant-client в umd (@sasha-tlt)
  • docs: Откатил изменения предыдущего коммита (@sasha-tlt)
  • build: add umd production build (@Burzachil)
  • chore: Починил запуск todo-canvas-app (@sasha-tlt)
  • chore: ошибки компилятора (@sasha-tlt)
  • test: Обновление токена (@sasha-tlt)
  • test: приветствие (@ivan-ushatsky)
  • chore: конфигурация commitlint (@sasha-tlt)
  • chore: тесты (@sasha-tlt)
  • chore: Теперь собираем CommonJs-модуль (@sasha-tlt)
  • refactor: клиент vps (@sasha-tlt)
  • docs: update Readme.md (@emochalova)
  • refactor: предупреждения редактора (@sasha-tlt)
  • chore: lint-staged (@sasha-tlt)
  • docs: Опечатка в readme.md (@sasha-tlt)
  • docs: пример обработки клавиш пульта (@sasha-tlt)
  • chore: update axios@0.21.1 (AASivashov@sberbank.ru)
  • docs: Поправил пример теста (@sasha-tlt)
  • refactor: proto и messageNames (@sasha-tlt)
  • test: Покрытие api тестами (@sasha-tlt)
  • docs: Добавление голосовой навигации в todo-canvas-app (@ivan-ushatsky)
  • docs: Документация для тестовых утилит (@sasha-tlt)
  • docs: Интеграционный тест todo-canvas-app (@sasha-tlt)
  • docs: Пример интеграции через script (@sasha-tlt)
  • docs: Обновлена документация todo-canvas-app (@ivan-ushatsky)
  • docs: Update README.md (@sasha-tlt)
  • ci: поправить базовую ветку (main) (@Yeti-or)
  • docs: Добавлен пример использования assistant-client (@ivan-ushatsky)
  • ci: add slack integration (@Yeti-or)
  • 38 Задокументировать assistant.close() (@sasha-tlt)

  • Поправил ссылки в оглавлении readme.md (@sasha-tlt)
  • hotfix: передать пустую строчку вместо null в sendDataContainer (@sasha-tlt)
  • v.1.1.1 (@sasha-tlt)
  • 42 Добавлен .npmrc и ссылка на NPM в README.md (@ivan-ushatsky)

  • Update README.md (@sasha-tlt)
  • 39 Версия 1.1.0 (@ivan-ushatsky)

  • 39 Обновление документации для работы с ассистентом без озвучки (@ivan-ushatsky)

  • 35 Добавлена возможность работать с ассистентом без озвучки (@ivan-ushatsky)

  • Интеграционные тесты инициализации ассистента и отправки текста (@sasha-tlt)
  • Фикс запуска тестов (@sasha-tlt)
  • Фикс отправки команды строкой (@sasha-tlt)
  • Фикс мастера: типы и потерянный файл (createVoicePlayer) (@sasha-tlt)
  • Проверять срок действия токена и показывать ошибки по истечении (@sasha-tlt)
  • Фикс воспроизведения коротких фраз (<= 1 секунда) (@sasha-tlt)
  • docs: Обновлен README.md (@emochalova)
  • Фикс обратной совместимости sendData (@sasha-tlt)
  • Убрал использование styled-components (@sasha-tlt)
  • Изменение типа платформы в дев режиме (@sasha-tlt)
  • Починил обновление стейта аппа при походе в бэк при отладке (@AVStarikovich)
  • Переместил react, react-dom и styled-components в peerDeps (@sasha-tlt)
  • Возможность изменения задержки перед озвучкой (по-умолчанию 1 сек) (@sasha-tlt)
  • Фикс sendDataContainer для устройств (@sasha-tlt)
  • Update README.md (@awinogradov)
  • добавил лого (@awinogradov)
  • добавил FAQ про токен (@Turanchoks)
  • Апдейт AssistantViewItem и AssistantNavigationCommand (@sasha-tlt)
  • добавил лицензию (@Turanchoks)
  • prettier + eslint (@sasha-tlt)
  • Указал продовый url (@Turanchoks)
    • Добавлена поддержка recoveryState (@sasha-tlt)
  • поправил доку (@Turanchoks)
  • Добавил createSmartappDebugger (@Turanchoks)
  • Подключение считать успешным по истечению таймера (@sasha-tlt)
  • Поправил термин смартап и названия устройств (@Lytkini)
  • Поправил README.md (@awinogradov)
  • Поправил модели sendData (@sasha-tlt)
  • Поправил вызов sendData (@sasha-tlt)
  • Init commit (@sasha-tlt)

Authors: 23


v4.20.0 (Mon Apr 04 2022)

🚀 Enhancement

Authors: 1


v4.19.1 (Mon Mar 21 2022)

🐛 Bug Fix

  • fix: После включения озвучки не срабатывает автослушивание #273 (@sasha-tlt)

Authors: 1


v4.19.0 (Fri Mar 11 2022)

🚀 Enhancement

  • feat: Добавлена возможность подклеивать ArrayBuffer[] к голосовому сообщению #260 (@evgeniysemin)

Authors: 1


v4.18.0 (Fri Mar 11 2022)

🚀 Enhancement

  • feat: Добавить команду остановки tts #272 (@sasha-tlt)

Authors: 1


v4.17.2 (Tue Feb 08 2022)

🐛 Bug Fix

  • fix: После отписки, команды не приходят в on('data') #263 (xwND1k9iIGYi7pQL)
  • fix: Стейт не приходит в сценарий #265 (@sasha-tlt)
  • fix: Не падать в ноде #262 (@sasha-tlt)
  • test: Ошибка из-за отсутсвие appInitialData #259 (@sasha-tlt)

Authors: 2

  • akutniakov (xwND1k9iIGYi7pQL)
  • Alexander Salmin (@sasha-tlt)

v4.17.1 (Tue Feb 01 2022)

🐛 Bug Fix

  • fix: Команды из appInitialData приходят два раза #258 (@sasha-tlt)

Authors: 1


v4.17.0 (Fri Jan 28 2022)

🚀 Enhancement

  • feat: Добавить параметр для выбора поверхности #254 (@sasha-tlt)

Authors: 1


v4.16.0 (Thu Jan 20 2022)

🚀 Enhancement

  • feat: Записывать версию assistant-client в window #251 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v4.15.0 (Mon Jan 17 2022)

🚀 Enhancement

Authors: 1


v4.14.1 (Mon Jan 10 2022)

🐛 Bug Fix

  • fix: объявлять appInitialData в фрейме #250 (@sasha-tlt)
  • docs: Добавлено описание AssistantThemeCommand #249 (@sasha-tlt)

Authors: 1


v4.14.0 (Thu Dec 23 2021)

🚀 Enhancement

Authors: 1


v4.13.1 (Tue Dec 21 2021)

🐛 Bug Fix

  • fix: Исправлен асинхронный сбор меты background_apps #242 (@evgeniysemin)

Authors: 1


v4.13.0 (Tue Dec 21 2021)

🚀 Enhancement

  • feat: Добавлено API для управления отображением NativePanel в рантайм (assistant.nativePanel) #216 (@evgeniysemin)

Authors: 1


v4.12.0 (Tue Dec 21 2021)

🚀 Enhancement

  • feat: Актуализирован вид NativePanel. Добавлен screenshotMode для NativePanel #206 (@evgeniysemin)

🐛 Bug Fix

  • fix: Стек initialCommands теперь формируется при window.AssistantClient.onStart() #226 (@evgeniysemin)

Authors: 1


v4.11.2 (Tue Dec 21 2021)

🐛 Bug Fix

  • fix: Удалён метод Promise.allSettled #246 (@evgeniysemin)
  • docs: Исправление битой ссылке в README.md примера todo-canvas-app #241 (@BorodinDK)
  • docs: Ссылки в альтернативном подключении #239 (@sasha-tlt)

Authors: 3


v4.11.1 (Wed Dec 08 2021)

🐛 Bug Fix

  • fix: Исправлен момент отправки эмоции listen при готовности захвата речи #238 (@evgeniysemin)

Authors: 1


v4.11.0 (Tue Dec 07 2021)

🚀 Enhancement

Authors: 1


v4.10.1 (Tue Nov 23 2021)

🐛 Bug Fix

Authors: 1


v4.10.0 (Tue Nov 09 2021)

🚀 Enhancement

Authors: 1


v4.9.1 (Wed Oct 27 2021)

🐛 Bug Fix

  • fix: activate_app_info по-умолчанию должен быть true #222 (@sasha-tlt)

Authors: 1


v4.9.0 (Tue Oct 12 2021)

🚀 Enhancement

  • feat: Добавлено: assistant.listen возвращает промис запроса микрофона #202 (@evgeniysemin)

🐛 Bug Fix

Authors: 2


v4.8.1 (Tue Oct 12 2021)

🐛 Bug Fix

  • fix: Озвучка не проигрывается, если контекст на паузе #199 (@sasha-tlt)

Authors: 1


v4.8.0 (Mon Oct 11 2021)

🚀 Enhancement

  • feat: Добавлено событие ассистента - персонаж #200 (@sasha-tlt)

🐛 Bug Fix

  • fix: Вернуть афину в AssistantCharacterCommand #211 (@sasha-tlt)
  • refactor: Исключена зависимость транспорта от протокола #210 (@ivan-ushatsky)
  • docs: корректная версия assistant-client в umd #208 (@sasha-tlt)

Authors: 2


v4.7.0 (Wed Oct 06 2021)

🚀 Enhancement

  • feat: добавлен геттер settings для объекта assistant #207 (@Burzachil)

🐛 Bug Fix

Authors: 2


v4.6.0 (Wed Sep 29 2021)

🚀 Enhancement

  • feat: Добавлен метод sendText для AssistantHost #196 (@evgeniysemin)

🐛 Bug Fix

  • fix: AppInitialData не прокидывается в onData в Салют #193 (@evgeniysemin)

Authors: 1


v4.5.1 (Tue Sep 28 2021)

🐛 Bug Fix

  • fix: merge additionaInfo in updateDevice #185 (@soulko)

Authors: 1


v4.5.0 (Wed Sep 22 2021)

🚀 Enhancement

  • feat: Приложение может управлять ready #186 (@sasha-tlt)

Authors: 1


v4.4.0 (Wed Sep 22 2021)

🚀 Enhancement

🐛 Bug Fix

  • chore: Починил запуск todo-canvas-app #188 (@sasha-tlt)

Authors: 2


v4.3.1 (Tue Aug 31 2021)

🐛 Bug Fix

  • fix: Не работает подписки sendAction в браузере #184 (@sasha-tlt)

Authors: 1


v4.3.0 (Wed Aug 25 2021)

🚀 Enhancement

🐛 Bug Fix

Authors: 1


v4.2.0 (Tue Aug 24 2021)

🚀 Enhancement

  • feat: вынес метод для voice.stop (@neolite)

Authors: 1


v4.1.0 (Mon Aug 23 2021)

🚀 Enhancement

  • feat: Добавить методы setSuggests и setHints #180 (@sasha-tlt)

Authors: 1


v4.0.4 (Thu Aug 19 2021)

🐛 Bug Fix

  • fix: ошибка при оффлайне #176 (@soulko)

Authors: 1


v4.0.3 (Thu Aug 19 2021)

🐛 Bug Fix

  • fix: Не отсылается initPhrase, если userId не меняется #178 (@sasha-tlt)

Authors: 1


v4.0.2 (Wed Aug 18 2021)

🐛 Bug Fix

Authors: 1


v4.0.1 (Thu Aug 12 2021)

🐛 Bug Fix

  • fix: changeSettings не должен создавать коннект #172 (@sasha-tlt)

Authors: 1


v4.0.0 (Tue Aug 10 2021)

💥 Breaking Change

  • BREAKING: Запрашивать токен перед соединением #168 (@sasha-tlt)

Authors: 1


v3.9.0 (Fri Aug 06 2021)

🚀 Enhancement

  • feat: Поддержать команду visiblity #170 (@maderwin)

Authors: 1


v3.8.2 (Thu Aug 05 2021)

🐛 Bug Fix

Authors: 1


v3.8.1 (Wed Aug 04 2021)

🐛 Bug Fix

  • fix: Не воспроизводить озвучку, если плеер не готов #166 (@sasha-tlt)

Authors: 1


v3.8.0 (Wed Aug 04 2021)

🚀 Enhancement

Authors: 1


v3.7.4 (Wed Jul 28 2021)

🐛 Bug Fix

Authors: 1


v3.7.3 (Thu Jul 22 2021)

🐛 Bug Fix

  • fix: остановка слушания при disableListening=true #160 (@soulko)

Authors: 1


v3.7.2 (Thu Jul 22 2021)

🐛 Bug Fix

  • fix: Обновление настроек должно поднимать соединение #159 (@sasha-tlt)
  • chore: ошибки компилятора #159 (@sasha-tlt)
  • test: Обновление токена #159 (@sasha-tlt)

Authors: 1


v3.7.1 (Tue Jul 20 2021)

🐛 Bug Fix

Authors: 1


v3.5.0 (Mon Jul 19 2021)

🚀 Enhancement

  • feat: отправка cancel при отмене слушания #158 (@neolite)

Authors: 1


v3.4.3 (Fri Jul 16 2021)

🐛 Bug Fix

  • fix: Неразрезолвленный доступ к микрофону #156 (@sasha-tlt)

Authors: 1


v3.4.2 (Wed Jul 14 2021)

🐛 Bug Fix

  • fix: Добавлен onStart для AssistantPostMessage #155 (@sasha-tlt)
  • fix: Не останавливается озвучка, если слушание выключено #155 (@sasha-tlt)

Authors: 1


v3.4.1 (Mon Jul 12 2021)

🐛 Bug Fix

  • fix: Параметр features отсутсвует у createAssistantDev #154 (@sasha-tlt)

Authors: 1


v3.4.0 (Mon Jul 12 2021)

🚀 Enhancement

  • feat: Флаг первой сессии должен быть аргументом assistant.start #152 (@sasha-tlt)

🐛 Bug Fix

Authors: 2


v3.3.3 (Fri Jul 09 2021)

🐛 Bug Fix

  • fix: Ограничить время ожидания стейта от аппа #147 (@sasha-tlt)

Authors: 1


v3.3.2 (Thu Jul 08 2021)

🐛 Bug Fix

  • fix: Остановка воспроизведения озвучки и последующий старт работают некорректно #151 (@sasha-tlt)

Authors: 1


v3.3.1 (Fri Jul 02 2021)

🐛 Bug Fix

  • fix: После закрытия аппа, логика взаимодействия с аппом продолжается #145 (@sasha-tlt)

Authors: 1


v3.3.0 (Fri Jul 02 2021)

🚀 Enhancement

  • feat: Добавить возможность расширять meta #146 (@sasha-tlt)

Authors: 1


v3.2.2 (Tue Jun 29 2021)

🐛 Bug Fix

  • fix: Не работает лавашар на ios safari #143 (@sasha-tlt)

Authors: 1


v3.2.1 (Thu Jun 24 2021)

🐛 Bug Fix

  • fix: Не проигрывать озвучку в ответ на текстовые сообщения #141 (@soulko)

Authors: 1


v3.2.0 (Wed Jun 23 2021)

🚀 Enhancement

  • fix: Отправлять настройки звука если был старт #142 (@sasha-tlt)
  • feat: Отключение приветствия - параметр для start #142 (@sasha-tlt)

Authors: 1


v3.1.3 (Thu Jun 17 2021)

🐛 Bug Fix

  • fix: Вызов changeConfiguration крашит сокет #139 (@sasha-tlt)
  • fix: Отправка флага первой сессии #138 (@sasha-tlt)

Authors: 1


v3.1.2 (Wed Jun 16 2021)

🐛 Bug Fix

  • fix: слушание и озвучка в safari ios #137 (@sasha-tlt)
  • fix: слушание не работает в firefox #137 (@sasha-tlt)

Authors: 1


v3.1.1 (Wed Jun 09 2021)

🐛 Bug Fix

Authors: 1


v3.1.0 (Wed Jun 09 2021)

🚀 Enhancement

  • feat: эмитить ActionCommand приходящие в systemMessage #134 (@soulko)

Authors: 1


v3.0.1 (Tue Jun 08 2021)

🐛 Bug Fix

  • fix: Отправлять appInfo в ответ на запрос пермишенов #133 (@sasha-tlt)

Authors: 1


v3.0.0 (Mon Jun 07 2021)

💥 Breaking Change

🚀 Enhancement

  • feat: Частичный переход на типы из @salutejs/types #129 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v2.16.1 (Mon May 24 2021)

🐛 Bug Fix

Authors: 1


v2.16.0 (Mon May 24 2021)

🚀 Enhancement

  • feat: эмитить ошибку при неудачном реконекте сокета #127 (@soulko)

Authors: 1


v2.15.4 (Mon May 24 2021)

🐛 Bug Fix

  • fix: корректная отправка сообщений из очереди после вызова updateDefaults #126 (@sasha-tlt)

Authors: 1


v2.15.3 (Fri May 21 2021)

🐛 Bug Fix

Authors: 1


v2.15.2 (Fri May 21 2021)

🐛 Bug Fix

Authors: 1


v2.15.1 (Wed May 19 2021)

🐛 Bug Fix

Authors: 1


v2.15.0 (Wed May 19 2021)

🚀 Enhancement

Authors: 1


v2.14.2 (Mon May 17 2021)

🐛 Bug Fix

Authors: 1


v2.14.1 (Thu May 13 2021)

🐛 Bug Fix

  • fix: В консоль не падают ошибки в ie #120 (@sasha-tlt)

Authors: 1


v2.14.0 (Thu May 06 2021)

🚀 Enhancement

  • fix: payload опционален в AssistantSmartAppCommand #117 (@sasha-tlt)
  • feat: Ответ на sendAction без подписки теперь попадает в общие подписки (assistant.on('data')) #117 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v2.13.0 (Fri Apr 30 2021)

🚀 Enhancement

  • feat(initializeassistantsdk): добавил features и capabilities как параметры initializeAssistantSDK #116 (PIReutov@sberbank.ru)

Authors: 1


v2.12.0 (Mon Apr 26 2021)

🚀 Enhancement

  • feat: Без действий пользователя не рекконектиться к vps #114 (@sasha-tlt)

🐛 Bug Fix

Authors: 2


v2.11.9 (Fri Apr 16 2021)

🐛 Bug Fix

Authors: 1


v2.11.8 (Wed Apr 14 2021)

🐛 Bug Fix

Authors: 1


v2.11.7 (Wed Apr 14 2021)

🐛 Bug Fix

  • fix: bump auto version #109 (@Yeti-or)
  • refactor: предупреждения редактора #108 (@sasha-tlt)
  • fix: Эмитить initialData в onData, если не было вызова getInitialData #108 (@sasha-tlt)

Authors: 2


v2.11.6 (Wed Apr 07 2021)

🐛 Bug Fix

Authors: 1


v2.11.5 (Mon Apr 05 2021)

🐛 Bug Fix

  • fix: Дублирование сообщений из appInitialData #104 (@sasha-tlt)

Authors: 1


v2.11.4 (Fri Apr 02 2021)

🐛 Bug Fix

Authors: 1


v2.11.3 (Fri Apr 02 2021)

🐛 Bug Fix

  • fix: Проигрывание озвучки после остановки #98 (@sasha-tlt)

Authors: 1


v2.11.2 (Thu Apr 01 2021)

🐛 Bug Fix

  • fix: Добавить метод остановки воспроизведения текущей очереди озвучки #97 (@sasha-tlt)

Authors: 1


v2.11.1 (Mon Mar 15 2021)

🐛 Bug Fix

  • fix: Не бросать ошибку при запрете доступа к микрофону #96 (@sasha-tlt)

Authors: 1


v2.11.0 (Mon Mar 15 2021)

🚀 Enhancement

  • feat: Поддержка smartAppData и smartAppError #89 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v2.10.3 (Fri Mar 12 2021)

🐛 Bug Fix

  • fix: Отправлять конечную гипотезу до отписки от события createMusicRecognizer #95 (maprimberdiev@sberbank.ru)
  • fix: Отправлять конечную гипотезу до отписки от события createSpeechRecognizer #95 (maprimberdiev@sberbank.ru)

Authors: 1


v2.10.2 (Fri Mar 12 2021)

🐛 Bug Fix

  • fix: Не показывать анимацию при запрете доступа к микрофону #94 (@sasha-tlt)

Authors: 1


v2.10.1 (Thu Mar 04 2021)

🐛 Bug Fix

  • fix: Дев-токена слишком длинный на ie #91 (@sasha-tlt)
  • fix: Обновление protobufjs #91 (@sasha-tlt)

Authors: 1


v2.10.0 (Wed Feb 24 2021)

🚀 Enhancement

  • feat: Возвращать observable при отправке команд #79 (@sasha-tlt)

🐛 Bug Fix

⚠️ Pushed to main

  • docs: Опечатка в readme.md (@sasha-tlt)

Authors: 1


v2.9.4 (Fri Feb 19 2021)

🐛 Bug Fix

Authors: 1


v2.9.3 (Thu Feb 18 2021)

🐛 Bug Fix

Authors: 1


v2.9.2 (Mon Feb 15 2021)

🐛 Bug Fix

Authors: 3


v2.9.1 (Fri Jan 29 2021)

🐛 Bug Fix

Authors: 1


v2.9.0 (Thu Jan 28 2021)

🚀 Enhancement

  • feat: поддержка команды start_music_recognition #77 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v2.8.0 (Wed Jan 27 2021)

🚀 Enhancement

  • feat: Отправка версии клиента в "surface_version" #76 (@ivan-ushatsky)

Authors: 1


v2.7.0 (Tue Jan 26 2021)

🚀 Enhancement

  • feat: фильтровать дубли сообщений appInitialData #74 (@sasha-tlt)

🐛 Bug Fix

Authors: 1


v2.6.0 (Wed Dec 23 2020)

🚀 Enhancement

  • feat: Поддержка флага auto_listening #73 (@sasha-tlt)

Authors: 1


v2.5.0 (Fri Dec 18 2020)

🚀 Enhancement

  • feat: Изменились параметры createOfflinePlayer #69 (@sasha-tlt)

🐛 Bug Fix

  • fix: Воспроизведение пустой озвучки #72 (@sasha-tlt)
  • docs: Добавление голосовой навигации в todo-canvas-app #71 (@ivan-ushatsky)
  • docs: Документация для тестовых утилит #69 (@sasha-tlt)
  • docs: Интеграционный тест todo-canvas-app #69 (@sasha-tlt)

Authors: 2


v2.4.1 (Tue Dec 15 2020)

🐛 Bug Fix

  • fix: Добавлены дженерики в мок #68 (@sasha-tlt)
  • docs: Пример интеграции через script #67 (@sasha-tlt)

Authors: 1


v2.4.0 (Wed Dec 09 2020)

🚀 Enhancement

🐛 Bug Fix

  • docs: Обновлена документация todo-canvas-app #65 (@ivan-ushatsky)

Authors: 2


v2.3.0 (Fri Dec 04 2020)

🚀 Enhancement

  • feat: Утилиты для тестирования смартапов #54 (@sasha-tlt)

Authors: 1


v2.2.2 (Fri Dec 04 2020)

🐛 Bug Fix

  • fix: дженерики для AppState action #61 (@sasha-tlt)

Authors: 1


v2.2.1 (Wed Dec 02 2020)

🐛 Bug Fix

  • fix: воспроизведение озвучки из буфера при остановленном плеере #59 (@sasha-tlt)

Authors: 1


v2.2.0 (Mon Nov 30 2020)

🚀 Enhancement

  • feat: ts-дженерики для входящих комманд ассистента #58 (@sasha-tlt)

Authors: 1


v2.1.0 (Mon Nov 30 2020)

🚀 Enhancement

🐛 Bug Fix

Authors: 1


v2.0.1 (Tue Nov 24 2020)

🐛 Bug Fix

  • fix: Пробрасывать sdkMeta в сообщения в window.appInitialData #56 (@sasha-tlt)

Authors: 1


v2.0.0 (Mon Nov 23 2020)

💥 Breaking Change

  • refactor: Переделана работа с озвучкой и голосом #47 (@sasha-tlt)

Authors: 1


v1.2.0 (Thu Nov 19 2020)

🚀 Enhancement

🐛 Bug Fix

⚠️ Pushed to main

  • Поправил ссылки в оглавлении readme.md (@sasha-tlt)

Authors: 4