1 февраля в Симферополе прошёл хакатон по разработке навыков для Алисы. Местные фронтенд-разработчики взялись его организовать, а Яндекс предоставил место. Несмотря на то, что участники создавали голосовые интерфейсы впервые, за день было создано больше десятка работающих прототипов, и некоторые из них даже опубликовались.


В этом посте мы приводим примеры навыков, которые можно сделать за несколько часов, и рассказываем какой подход лежит в их основе. Хотим, чтобы было больше навыков полезных и разных. Погнали.



На фотографии пара участников хакатона и затылок Сегаловича


Что такое навык в Алисе?


Навык в Алисе — это сценарий (фактически бот), написанный внешним по отношению к Яндексу разработчиком. У каждого навыка есть активационная фраза, после которой навык запускается и пользователь переводится из основной Алисы во внешний сценарий.


Навык может быть игрой, голосовым справочником, интерфейсом к умному дому, или любой другой функцией, которой хочется дополнить Алису. Более двух тысяч навыков можно найти в каталоге dialogs.yandex.ru/store, а кроме них, есть ещё множество приватных навыков. Подробнее про возможности навыков можно узнать в официальной документации Яндекс.Диалогов yandex.ru/dev/dialogs/alice. Ряд полезных инструментов для их разработки собран в неофициальном репозитории.


Зачем пилить навык?


Ну во-первых, навыки это прикольно. Диалоговые интерфейсы создают новое представление любого сервиса и позволяют посмотреть на него под другим углом. Создание навыка — это нетривиальная творческая задача, которая позволяет размять мозги и попробовать себя в роли редактора.


Во-вторых, Алиса — это площадка с миллионной аудиторией и ваше мини-приложение получит сразу ненулевое количества пользователей без затрат на перформанс (MAU внешних навыков 4 млн).


В-третьих, это возможность присоединиться к сообществу внешних разработчиков Алисы. Это активное сообщество из 2000 человек, которое делится знаниями и устраивает хакатоны. Чат сообщества https://t.me/yadialogschat.


Как это работает


Внешний навык подключается через API Яндекс.Диалогов и визуально отличается от остальной Алисы.


Алиса запрашивает:


{
  "request": {
    "command": "Какие есть напитки?"
  }
}

Навык отвечает:


{
  "response": {
    "text": "Что бы вы хотели из напитков?",
    "card": {
      "items": [{"title": "Pepsi", ...}, ...]
    }
  }
}

На экране (если у устройства есть экран) это выглядит примерно так:



Схема проста: Алиса присылает запрос от пользователя, навык отвечает на него. На бэкенде навыка может быть что угодно. Главное, чтобы он стабильно и корректно отвечал на запросы. Стабильность проверяется ежеминутными пингами от Яндекса. Корректность проверяется вручную модераторами при публикации навыка.


Запрос может содержать только текст, а не исходную аудиозапись. Навык должен успевать отвечать за 3 секунды. Навык не может отправить что-то в Алису сам, без запроса.


Ответ навыка может содержать картинки и аудио, если они были предварительно загружены в хранилище.


Активация навыка возможна по ограниченному набору запросов. Обычные навыки активируются по названию:


Алиса, включи навык "Мой секретарь"

В одном запросе с активацией в навык можно передать команду:


Алиса, попроси навык "Мой секретарь" создать встречу завтра в 8

Навыки умного дома (у них отдельное API) активируются по набору фраз, обычно содержащих название устройства и действие с ним.


Что нужно учитывать при проектировании навыка


  • Люди пользуются Алисой на разных устройствах и в разных приложениях и при дизайне навыка это стоит учитывать. Например, в мобильном приложении есть визуальная часть, а в колонке ее нет. При создании навыка разработчик может указать, для какого типа устройств предназначен навык. Неполный список точек входа в навык: колонки, приложение «Яндекс», навигатор, десктопный браузер (Windows only), бортовой компьютер Яндекс.Авто, детские часы Elari, Яндекс.Телефон.
  • Диалоговые интерфейсы зависят от контекста использования. Чаще всего ими пользуются тогда, когда не хочется использовать визуальный интерфейс. Поэтому Алису так любят дети, старшее поколение, люди за рулем.
  • Люди легко готовы использовать те навыки, которые отвечают реальным потребностям. Самые популярные сценарии Алисы — это поиск, адреса и маршруты, музыка, погода, будильники, умный дом.

Примеры хороших навыков


Топ по аудитории – игры и развлечения, детские навыки, заказ еды и напитков.



Хорошая возвращаемость также у контентных и образовательных навыков, категорий «управление» и «продуктивность» — в общем, «полезных»



Собственно, две основные метрики навыка, которые его разработчик (и Яндекс тоже) хотели бы растить — это аудитория навыка (число пользователей за интервал времени) и их возвращаемость (какая доля пользователей воспользовалась навыком повторно опять же за определённый интервал времени).


Частые ошибки при проектировании навыков


Люди склонны покидать беседу с ботом/навыком, если:


  • Не понимают, как добиться результата.
  • Видят, что бот их не понимает.
  • Бот отвечает скучно и однообразно.

Поэтому со стороны разработчика важно решить задачу пользователя, не дать ему зайти в тупик, предусмотреть все варианты и давать своевременные подсказки, удержать пользователя в диалоге и мотивировать вернуться.


Диалог глазами бота




Самое важную роль в успехе навыка играет контент. Это «мясо», к которому ваш бот даёт доступ. Без него смысла в навыке нет.


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


Дальше следует веб-приложение, дающее доступ к отвечалке из внешнего мира. По смыслу мало отличается от бэкенда сайта (можно писать на node, flask, и т.п.).


Окружение a.k.a. cервер, где установлены все зависимости и запущено приложение, тоже важно. Система отключает навык, если сервер не отвечает или отвечает медленно.


Как прошёл хакатон


Симферопольский боткэмп — не первый алисий хакатон, но самый продуктивный. В хакатоне приняли участие около 50 человек, разделенные на небольшие команды. Первый час ушел на вводную речь опытных разработчиков про специфику и возможности навыков Алисы, на краткую презентацию идей навыков, и на доукомплектование команд. А весь последующий день хакатонщики яростно кодили, отвлекаясь, как водится, только на кофе и пиццу. Вечером команды презентовали больше 10 работающих навыков. Для нас такая продуктивность была приятным сюрпризом, ведь большинство участников утром ещё даже не видели API Алисы.


Традиционно самые популярные языки для написания навыков — Python и JavaScript (хотя на самом деле выбор языка ничем не ограничен). Конкретно в этом хакатоне практически все выбрали JS — видимо, сказался фронтенд-бэкграунд участников. Некоторые навыки раскрыли свой исходный код, и читатель может самостоятельно оценить их сложность или попробовать воспроизвести их. Все опубликованные навыки можно запустить в Алисе, сказав, например, "Алиса, запусти навык Семь нот".


Навык Код Ссылка на навык
Гайды Лиги легенд https://github.com/pomaransh-square/alice-lol-guide В каталоге
Страны и столицы https://github.com/pomaransh-square/alice-countries В каталоге
Двое из таверны https://github.com/sergw/alicehack Приватный
Семь нот https://github.com/Krepish/alice-skill-seven-music-notes Приватный
Выбор подарка* https://github.com/progeras/alice-gifts Приватный
Морская битва https://github.com/psr1919plus21/alisa-sea-battle Приватный
Извозчик отвези меня родной (поиск транспорта) https://github.com/rajdee/alice-search-transport Приватный
Справочник организаций Севастополя В каталоге

* Кстати, разработчики этого навыка (Venul и NoLogicTheOne) сейчас ищут работу.



Выбрать наилучший навык из всех созданных за этот день было бы непросто, но организаторы хакатона и не ставили такой цели. Вместо этого приз — Яндекс.Станция Мини — был разыгран между всеми участниками, дожившими до вечера. Счастливчика выбрала сама Алиса, назвав случайное число, соответствующее его номеру. Но более ценным призом, чем колонка, стал опыт разработки голосовых интерфейсов, приобретённый участниками. И, конечно, сами разработанные навыки.


Следующий хакатон по разработке навыков для Алисы пройдёт 29 февраля в Москве.


P.S. Авторы текста — cointegrated и @helmeton — являются/являлись сотрудниками Яндекса, но в данном хакатоне принимали участие в качестве независимых разработчиков. Все утверждения данного текста также являются личным мнением авторов, и могут не совпадать с официальной позицией Яндекса или с реальностью.