Из коробки «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.
Войдите в личный кабинет и нажмите кнопку « Консоль разработчика» в правом верхнем углу.
Далее мы хотим открыть набор навыков Алекса.
Если вы не смогли открыть комплект 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 , вы найдете там свой навык. Нажмите кнопку редактирования , чтобы начать изменение навыка.
Далее Amazon отобразит вкладку сборки для навыка Cat Fact . С левой стороны вы найдете список намерений, которые определены для навыка. Как было сказано ранее, по умолчанию набор навыков Alexa генерирует намерение Отмена , Стоп , Справка и NavigateHome . Первые три полезны для пользователя, который хочет бросить навык или не знает, как его использовать. Последний, NavigateHome , используется только для сложных навыков, которые включают в себя несколько шагов.
Шаг 1. Проверьте имя вызова
Прежде всего, давайте проверим правильность имени вызова для навыка. Название должно сказать «обычай кошачий факт».
Если вы меняете имя, обязательно нажмите кнопку « Сохранить модель» в верхней части страницы.
Шаг 2: Измените «HelloWorldIntent»
На втором этапе мы хотим изменить намерение по умолчанию HelloWorldIntent .
Нажав на намерение, мы получаем красивый графический интерфейс, который позволяет нам изменить имя намерения или добавить примеры высказываний.
Лично я предпочитаю использовать редактор JSON, который вы найдете в меню слева. При открытии редактора JSON вы увидите следующий объект JSON.
Преимущество редактора JSON заключается в том, что вы можете изменять все намерения одновременно. Давайте сначала добавим новое намерение с именем «GetFactIntent».
Далее мы хотим добавить некоторые примеры высказываний, как на картинке ниже.
После изменений вот как должен выглядеть ваш объект JSON. Пока мы не хотим определять примерные высказывания для других намерений. По умолчанию набор навыков Alexa связывает предложение «help» с «HelpIntent».
Примечание. Не забудьте нажать кнопку « Сохранить модель» , а затем нажать кнопку « Создать модель» . По сути, Alexa создаст модель и обучит себя в соответствии с моделью, которую вы определили с помощью примеров высказываний.
Шаг 3: Проверьте навык «Custom Cat Fact»
Давайте перейдем к тестовой вкладке в горизонтальном меню. Теперь переключите выпадающее меню «Тестирование навыков включено в» на « Разработка» . Это позволит нам проверить навык.
А пока давайте попробуем активировать навык, чтобы увидеть, все ли правильно. Мы можем активировать навык, вызвав имя вызова, как показано на рисунке ниже.
Шаг 4. Изменение кода для GetFactIntent
Далее мы погрузимся в кодовую вкладку. При нажатии на вкладку кода вы получите онлайн-редактор с кодом по умолчанию.
Во-первых, мы хотим скопировать код для HelloWorldIntentHandler
и переименовать его в GetFactIntentHandler
.
После этого мы должны указать, какой тип намерения может обработать этот обработчик. Строка № 21 ищет намерение с именем GetFactIntent
.
Теперь, когда мы нашли намерение, давайте определим статический ответ: «Я расскажу факт!», speakOutput
мы присваиваем переменной speakOutput
.
Наконец, мы должны добавить GetFactIntentHandler
к другим обработчикам запросов. Мы можем просто сделать это, добавив его в функцию addRequestHandlers
. Не забудьте сохранить и построить намерение!
Теперь, когда навык был сохранен и построен, давайте кратко проверим ответ. Если мы просим умение рассказать факт, он должен ответить «Я расскажу факт!»
Если все правильно, вы можете перейти к следующему шагу.
Шаг 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. Вот как мы это делаем:
Фактический код можно найти здесь:
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(); } };
Мы готовы с изменениями кода. Сохраните код еще раз и затем нажмите кнопку развертывания.
Шаг 6: финальное тестирование навыков
В качестве последнего шага давайте проверим, получает ли навык случайные факты о кошках из API. Опять же, давайте перейдем на вкладку теста .
Начните навык, называя факт открытой кошки . Далее вы можете попросить рассказать факт . Если все идет хорошо, вы должны получить факт в качестве ответа.
Успех!
Шаг 7 (необязательно): тест на реальном устройстве Alexa
Чтобы протестировать свой собственный навык на устройстве с поддержкой Alexa, необходимо зарегистрировать устройство Alexa под тем же адресом электронной почты, что и учетная запись разработчика Amazon.
Более подробную информацию можно найти в документации Alexa :
Чтобы протестировать устройство с поддержкой Alexa (например, Amazon Echo), зарегистрируйте устройство с тем же адресом электронной почты, который использовался для регистрации учетной записи разработчика на портале разработчиков Amazon. Затем вы можете применить свой навык с помощью слова «пробуждение» и имени вашего вызова: «Alexa, open
«. Если ваше устройство настроено на использование учетной записи, отличной от вашей учетной записи разработчика, перезагрузите устройство, а затем повторно зарегистрируйте его в своей учетной записи разработчика.
Понимание основ
Это только начало построения навыков с Alexa. Возможны гораздо более сложные примеры, такие как передача параметров (опций) с намерениями. Кроме того, могут быть разработаны многие другие типы навыков, например, навыки управления устройствами «умного дома».
Если вы хотите узнать больше о разработке Alexa Skill, поищите эти ресурсы:
- Создайте навык от начала до конца — Amazon Alexa Docs
- Пример скилла Node.js от Алекса
- Руководство по дизайну голоса