Статьи

Как создать свой первый навык Amazon Alexa

Из коробки «Alexa» поддерживает ряд встроенных навыков, таких как добавление предметов в список покупок или запрос песни. Тем не менее, разработчики могут создавать новые пользовательские навыки с помощью набора навыков Алекса (ASK).

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

Короче говоря, единственная причина, по которой Alexa может понимать голосовые команды пользователя, заключается в том, что у него определены навыки. Каждый навык Alexa — это часть программного обеспечения, предназначенная для понимания голосовых команд. Кроме того, каждый навык Alexa имеет свою собственную логику, которая создает соответствующий ответ для голосовой команды. Чтобы дать вам представление о некоторых существующих навыках Alexa, они включают в себя:

  • заказ пиццы в Domino’s Pizza
  • призывая к Uber
  • говорю тебе свой гороскоп

Как уже было сказано, мы можем развивать наши собственные специальные навыки, соответствующие нашим потребностям, с помощью набора Alexa Skill Kit, набора API и инструментов, разработанных для этой цели. ASK включает в себя такие инструменты, как распознавание речи, кодирование текста в речь и обработка на естественном языке. Этот комплект должен помочь любому разработчику быстро освоить свои собственные навыки.

В этой статье вы узнаете, как создать базовый навык Alexa «получить факт». Короче говоря, мы можем попросить Алексу представить нам случайный факт о кошке. Полный код для выполнения нашей задачи можно найти на GitHub . Прежде чем мы начнем, давайте удостоверимся, что мы понимаем терминологию навыков Alexa.

Овладение терминологией навыков Алекса

Во-первых, давайте узнаем, как пользователь может взаимодействовать с пользовательским навыком. Это будет важно для понимания различных концепций, связанных с навыками.

Чтобы активировать определенный навык, пользователь должен позвонить в Alexa и попросить открыть навык. Например: «Алекса, факт открытой кошки». Делая это, мы называем имя вызова навыка. По сути, имя вызова может выглядеть как имя приложения.

Теперь, когда мы запустили правильный навык, у нас есть доступ к голосовым намерениям / командам, которые навык понимает. Поскольку мы хотим сделать вещи простыми, мы определяем намерение «Получить факт Ката». Однако нам нужно предоставить примеры предложений, чтобы вызвать намерение. Намерение может быть вызвано многими примерами предложений, также называемыми высказываниями . Например, пользователь может сказать «Дайте факт». Поэтому мы определяем следующие примеры предложений:

  • «Скажи факт»
  • «Дайте кошачий факт»
  • «Дайте факт»

Можно даже объединить имя вызова с целью, подобной этой: «Алекса, попросите Cat Fact дать факт».

Теперь, когда мы знаем разницу между именем вызова и намерением, давайте перейдем к созданию вашего первого навыка Alexa.

Создание учетной записи разработчика Amazon

Для начала нам нужна учетная запись разработчика Amazon. Если у вас есть, вы можете пропустить этот раздел.

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

Войдите в личный кабинет и нажмите кнопку « Консоль разработчика» в правом верхнем углу.

Открытая консоль разработчика

Далее мы хотим открыть набор навыков Алекса.

Open Alexa Skills Kit

Если вы не смогли открыть комплект Alexa Skills Kit, воспользуйтесь этой ссылкой .

В следующем разделе мы создадим наш реальный навык.

Создание нашего первого пользовательского навыка Alexa

Хорошо, мы готовы создать наш первый навык Alexa. Нажмите синюю кнопку Создать навык, чтобы открыть меню для создания нового навыка.

Кнопка Создать Навык

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

Примечание. Если вы выбрали предопределенный навык, вы получите список моделей взаимодействия и примеры предложений (высказываний). Тем не менее, даже пользовательский навык оснащен самыми основными намерениями, такими как « Отмена» , « Помощь» , « NavigateHome» и « Стоп» .

Выбрать название навыка

Далее нам нужно выбрать способ размещения нашего навыка. Опять же, мы не хотим слишком усложнять вещи и выбирать опцию Alexa-Hosted (Node.js) . Это означает, что нам не нужно запускать серверную часть самостоятельно, что требует определенных усилий, чтобы сделать его «Алекса-совместимым». Это означает, что вы должны отформатировать ответ в соответствии со стандартами Amazon Alexa, чтобы устройство могло это понять. Вариант с размещением Alexa:

разместите навыки в своей учетной записи до уровня бесплатного пользования AWS и начните работу с шаблоном Node.js. Вы получите доступ к конечной точке AWS Lambda, 5 ГБ хранилища мультимедиа с 15 ГБ ежемесячной передачи данных и таблицу для сохранения сеанса.

Выберите метод хоста

Хорошо, теперь, когда все настройки установлены, вы можете нажать кнопку « Создать навык» в правом верхнем углу экрана. Эта кнопка генерирует фактический навык в нашей учетной записи Amazon Developer.

Изменение вашего первого навыка Alexa

Теперь, если вы перейдете к консоли разработчика Alexa , вы найдете там свой навык. Нажмите кнопку редактирования , чтобы начать изменение навыка.

Модифицируйте Alexa Skill

Далее Amazon отобразит вкладку сборки для навыка Cat Fact . С левой стороны вы найдете список намерений, которые определены для навыка. Как было сказано ранее, по умолчанию набор навыков Alexa генерирует намерение Отмена , Стоп , Справка и NavigateHome . Первые три полезны для пользователя, который хочет бросить навык или не знает, как его использовать. Последний, NavigateHome , используется только для сложных навыков, которые включают в себя несколько шагов.

Модель взаимодействия

Шаг 1. Проверьте имя вызова

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

Если вы меняете имя, обязательно нажмите кнопку « Сохранить модель» в верхней части страницы.

Имя вызова

Шаг 2: Измените «HelloWorldIntent»

На втором этапе мы хотим изменить намерение по умолчанию HelloWorldIntent .

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

Обзор HelloWorldIntent

Лично я предпочитаю использовать редактор JSON, который вы найдете в меню слева. При открытии редактора JSON вы увидите следующий объект JSON.

JSON редактор для намерений

Преимущество редактора JSON заключается в том, что вы можете изменять все намерения одновременно. Давайте сначала добавим новое намерение с именем «GetFactIntent».

Далее мы хотим добавить некоторые примеры высказываний, как на картинке ниже.

Изменить намерения в редакторе JSON

После изменений вот как должен выглядеть ваш объект JSON. Пока мы не хотим определять примерные высказывания для других намерений. По умолчанию набор навыков Alexa связывает предложение «help» с «HelpIntent».

Примечание. Не забудьте нажать кнопку « Сохранить модель» , а затем нажать кнопку « Создать модель» . По сути, Alexa создаст модель и обучит себя в соответствии с моделью, которую вы определили с помощью примеров высказываний.

Сохранить и построить модель

Шаг 3: Проверьте навык «Custom Cat Fact»

Давайте перейдем к тестовой вкладке в горизонтальном меню. Теперь переключите выпадающее меню «Тестирование навыков включено в» на « Разработка» . Это позволит нам проверить навык.

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

Тест навыка вызова: поздоровайся или помоги

Шаг 4. Изменение кода для GetFactIntent

Далее мы погрузимся в кодовую вкладку. При нажатии на вкладку кода вы получите онлайн-редактор с кодом по умолчанию.

Во-первых, мы хотим скопировать код для HelloWorldIntentHandler и переименовать его в GetFactIntentHandler .

После этого мы должны указать, какой тип намерения может обработать этот обработчик. Строка № 21 ищет намерение с именем GetFactIntent .

Теперь, когда мы нашли намерение, давайте определим статический ответ: «Я расскажу факт!», speakOutput мы присваиваем переменной speakOutput .

Добавить намерение GetFact

Наконец, мы должны добавить GetFactIntentHandler к другим обработчикам запросов. Мы можем просто сделать это, добавив его в функцию addRequestHandlers . Не забудьте сохранить и построить намерение!

Добавить обработчик GetFact

Теперь, когда навык был сохранен и построен, давайте кратко проверим ответ. Если мы просим умение рассказать факт, он должен ответить «Я расскажу факт!»

Проверить навык

Если все правильно, вы можете перейти к следующему шагу.

Шаг 5: API запросов для получения фактов Cat

В качестве последнего шага мы хотим запросить простой API, который возвращает факты о кошках. Для этого я использую следующую конечную точку API: https://catfact.ninja/fact .

Эта конечная точка API возвращает факт и его длину.

 { "fact": "Smuggling a cat out of ancient Egypt was punishable by death. Phoenician traders eventually succeeded in smuggling felines, which they sold to rich people in Athens and other important cities.", "length": 192 } 

Поскольку пакет https встроен для Node.js, мы можем использовать его в нашем коде для извлечения данных из API. Вот как мы это делаем:

HTTPS Получить

Фактический код можно найти здесь:

 const https = require('https'); const httpGet = () => { return new Promise(((resolve, reject) => { var options = { host: 'catfact.ninja', port: 443, path: '/fact', method: 'GET', }; const request = https.request(options, (response) => { response.setEncoding('utf8'); let returnData = ''; response.on('data', (chunk) => { returnData += chunk; }); response.on('end', () => { resolve(JSON.parse(returnData)); }); response.on('error', (error) => { reject(error); }); }); request.end(); })); } 

Теперь у нас есть подготовленный вспомогательный метод, мы можем добавить его в GetFactIntentHandler . Обратите внимание, что, поскольку мы хотим использовать await для запроса, нам пришлось сделать функцию handle async . Кроме того, мы вызываем функцию httpGet чтобы получить ответ факта cat, и присваиваем response.fact переменной speakOutput . Затем переменная speakOutput передается команде speak, которая используется Alexa:

 const GetFactIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'GetFactIntent'; }, async handle(handlerInput) { // const speakOutput = 'I will tell a fact!'; const response = await httpGet(); const speakOutput = response.fact; return handlerInput.responseBuilder .speak(speakOutput) //.reprompt('add a reprompt if you want to keep the session open for the user to respond') .getResponse(); } }; 

Добавить HTTP-вызов в обработчик

Мы готовы с изменениями кода. Сохраните код еще раз и затем нажмите кнопку развертывания.

Шаг 6: финальное тестирование навыков

В качестве последнего шага давайте проверим, получает ли навык случайные факты о кошках из API. Опять же, давайте перейдем на вкладку теста .

Начните навык, называя факт открытой кошки . Далее вы можете попросить рассказать факт . Если все идет хорошо, вы должны получить факт в качестве ответа.

Получите ответ Cat Fact

Успех!

Шаг 7 (необязательно): тест на реальном устройстве Alexa

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

Более подробную информацию можно найти в документации Alexa :

Чтобы протестировать устройство с поддержкой Alexa (например, Amazon Echo), зарегистрируйте устройство с тем же адресом электронной почты, который использовался для регистрации учетной записи разработчика на портале разработчиков Amazon. Затем вы можете применить свой навык с помощью слова «пробуждение» и имени вашего вызова: «Alexa, open «.

Если ваше устройство настроено на использование учетной записи, отличной от вашей учетной записи разработчика, перезагрузите устройство, а затем повторно зарегистрируйте его в своей учетной записи разработчика.

Понимание основ

Это только начало построения навыков с Alexa. Возможны гораздо более сложные примеры, такие как передача параметров (опций) с намерениями. Кроме того, могут быть разработаны многие другие типы навыков, например, навыки управления устройствами «умного дома».

Если вы хотите узнать больше о разработке Alexa Skill, поищите эти ресурсы: