Библиотека для простого развития навыков Alexa с помощью AWS Lambda.
Установка | ? Как это работает | ? Использование | Справочник по API | ? Как внести свой вклад | ⚖️ Лицензия |
---|
Alexa Skill Kit доступен в виде модуля Node.js в NPM. Чтобы установить его, выполните следующую команду в существующем проекте Node.js:
npm install alexa-skill-kit --save
Alexa Skill Kit — это библиотека, которая упрощает разработку Alexa Skills с помощью Node.js и AWS Lambda. Он не требует какого-либо определенного стиля развертывания, он может работать с созданными вручную функциями Lambda, развертыванием через Claudia.js и т. д.
Поскольку я рекомендую Claudia.js из-за его простоты, все следующие примеры будут использовать его. Вы можете получить его из NPM здесь: npmjs.com/package/claudia.
После установки Alexa Skill Kit из NPM включите его в свой код:
const alexaSkillKit = require ( 'alexa-skill-kit' )
или с синтаксисом import
*:
import alexaSkillKit from 'alexa-skill-kit'
* Синтаксис import
не поддерживается в Node.js, вам нужно использовать дополнительную библиотеку, например Babel, чтобы она работала.
После этого вам просто нужно передать событие и контекст из функции Lambda, кроме event
и function
, вам нужно передать функцию-обработчик в качестве последнего параметра.
Например:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
Alexa Skill Kit упрощает ответ на запросы Alexa. Есть несколько вещей, которые вы можете сделать:
| Ответ простым текстом | ? Ответить объектом | ? Более сложные ответы | ⏳ Асинхронные ответы | | ----- | ----- | ----- | ----- | ----- |
Продолжайте читать, и все они будут объяснены ниже.
Если вы хотите, чтобы Alexa ответила простым текстом, вам просто нужно вернуть текст в функции-обработчике. Alexa Skill Kit обернет текст в действительный объект.
Например:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
В приведенном выше примере Alexa ответит следующим объектом:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
Как видите, сессия будет закрыта по умолчанию. Чтобы сохранить сессию открытой или ответить более сложным запросом, вы можете отправить объект вместо текста.
Если вы хотите сохранить сеанс открытым или хотите вернуть нечто большее, чем просто выходную речь, вы можете отправить объект, и Alexa Skill Kit не будет его модифицировать.
Например:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return {
version : '1.0' ,
response : {
shouldEndSession : false ,
outputSpeech : {
type : 'PlainText' ,
text : 'Hello'
} ,
card : {
type : 'Simple' ,
title : 'Simple Card' ,
content : 'An example for a simple card reply'
}
}
}
} )
}
Строить объекты вручную сложно и скучно. Я рекомендую использовать модуль Alexa Message Builder, чтобы упростить создание более сложных ответов.
Alexa Message Builder доступен в NPM, и вы можете добавить его в свой проект с помощью следующей команды:
npm install alexa-message-builder --save
После этого просто запросите его с помощью Alexa Skill Kit следующим образом:
const alexaSkillKit = require ( 'alexa-skill-kit' )
const AlexaMessageBuilder = require ( 'alexa-message-builder' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return new AlexaMessageBuilder ( )
. addText ( 'Hello' )
. addSimpleCard ( 'Simple Card' , 'An example for a simple card reply' )
. keepSession ( )
. get ( )
} )
}
Пример выше аналогичен примеру из раздела «Ответ с помощью объекта».
Почему Alexa Message Builder не входит в состав Alexa Skill Kit?
Что ж, без особой причины Alexa Message Builder был разработан до Alexa Skill Kit, и это отдельные модули на случай, если кому-то понадобится только один из них без другого.
Alexa Skill Kit использует обещания для обработки асинхронных ответов. Чтобы иметь возможность отвечать асинхронно, просто верните обещание и разрешите его текстом или объектом, и Alexa Skill Kit применит те же правила, что и выше.
Например:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return fetchSomethingFromTheServer ( )
. then ( result => doSomethingWithTheResult ( result ) )
. then ( processedResult => {
return `Here's an info from the server: ${ processedResult } `
} )
} )
}
Alexa Skill Kit ответит текстом:
`Here's an info from the server: ${ processedResult } `
Alexa Skill Kit ( function
) получает следующие атрибуты:
object
, обязательный) — немодифицированный объект, полученный от Amazon Alexa. Если ваша функция Lambda получает объект, который не является допустимым запросом Amazon Alexa, она не будет анализировать его, и ваша функция-обработчик никогда не будет вызвана.object
, требуется) — объект контекста, полученный на AWS Lambda, рекомендуется не изменять его, но Alexa Skill Kit будет использовать только функции context.succeed
и context.fail
, поэтому вы можете передать пользовательский объект, содержащий эти два функции из и исходного объекта контекста.function
, требуется) — функция, которая получает проанализированное событие и возвращает ответ, который будет передан в Amazon Alexa.Функция-обработчик — это функция, которая получает проанализированное событие и может возвращать строку, объект или обещание, которое вернет строку или объект после его разрешения.
Если вы не хотите, чтобы Алекса отвечала, просто верните null
или не возвращайте вообще.
Разбираемый объект — это объект, который содержит следующие свойства:
null
null
{}
)Основная часть кода находится в каталоге lib.
Тесты находятся в каталоге spec и должны соответствовать структуре соответствующих исходных файлов. Имена всех исполняемых тестовых файлов должны заканчиваться на -spec
, чтобы npm test
автоматически их подбирал. Любые дополнительные файлы проекта, вспомогательные классы и т. д., которые не должны выполняться напрямую программой запуска тестов, не должны заканчиваться на -spec
. Вы можете использовать каталог spec/helpers для хранения помощников Jasmine, которые будут загружены перед выполнением любого теста.
Мы используем Jasmine для модульных и интеграционных тестов. Если нет веской причины использовать что-то другое, продолжайте использовать Jasmine для тестов. Существующие тесты находятся в папке spec. Вот несколько полезных сочетаний команд:
Запустите все тесты:
npm test
Запустите только некоторые тесты:
npm test -- filter=prefix
Получите подробные иерархические отчеты по названиям тестов:
npm test -- full
Мы используем ESLint для обеспечения согласованности синтаксиса, а правила проверки включены в этот репозиторий. Запуск npm test
также проверит правила проверки. Прежде чем отправлять запрос на извлечение, убедитесь, что в вашем коде нет ошибок линтинга.
MIT – см. ЛИЦЕНЗИЮ