Bibliothek für die mühelose Entwicklung von Alexa Skills mit AWS Lambda.
Installation | ? Wie es funktioniert | ? Verwendung | API-Referenz | ? So können Sie einen Beitrag leisten | ⚖️ Lizenz |
---|
Das Alexa Skill Kit ist als Node.js-Modul auf NPM verfügbar. Um es zu installieren, führen Sie den folgenden Befehl in einem vorhandenen Node.js-Projekt aus:
npm install alexa-skill-kit --save
Alexa Skill Kit ist eine Bibliothek, die die Entwicklung von Alexa Skills mit Node.js und AWS Lambda vereinfacht. Es ist kein spezifischer Bereitstellungsstil erforderlich, es kann mit manuell erstellten Lambda-Funktionen, der Bereitstellung über Claudia.js usw. arbeiten.
Da ich Claudia.js aufgrund seiner Einfachheit empfehle, wird es in allen folgenden Beispielen verwendet. Sie können es hier von NPM erhalten: npmjs.com/package/claudia.
Nachdem Sie das Alexa Skill Kit von NPM installiert haben, benötigen Sie es in Ihrem Code:
const alexaSkillKit = require ( 'alexa-skill-kit' )
oder mit import
*-Syntax:
import alexaSkillKit from 'alexa-skill-kit'
* import
wird in Node.js nicht unterstützt. Sie müssen eine zusätzliche Bibliothek wie Babel verwenden, damit es funktioniert.
Nachdem Sie es angefordert haben, müssen Sie lediglich Ereignis und Kontext von der Lambda-Funktion übergeben. Neben event
und function
müssen Sie als letzten Parameter eine Handler-Funktion übergeben.
Zum Beispiel:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
Das Alexa Skill Kit vereinfacht die Beantwortung von Alexa-Anfragen. Es gibt ein paar Dinge, die Sie tun können:
| Mit einem einfachen Text antworten | ? Mit einem Objekt antworten | ? Komplexere Antworten | ⏳ Asynchrone Antworten | | ----- | ----- | ----- | ----- | ----- |
Lesen Sie weiter und alle werden im Folgenden erklärt.
Wenn Sie möchten, dass Alexa mit einem einfachen Text antwortet, müssen Sie den Text lediglich in einer Handler-Funktion zurückgeben. Das Alexa Skill Kit umschließt den Text in ein gültiges Objekt.
Zum Beispiel:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
Ein Beispiel oben antwortet Alexa mit dem folgenden Objekt:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
Wie Sie sehen, wird die Sitzung standardmäßig geschlossen. Um die Sitzung geöffnet zu halten oder eine komplexere Anfrage zu beantworten, können Sie anstelle des Textes ein Objekt senden.
Wenn Sie die Sitzung geöffnet lassen möchten oder mehr als eine einfache Sprachausgabe zurückgeben möchten, können Sie ein Objekt senden, das vom Alexa Skill Kit nicht geändert wird.
Zum Beispiel:
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'
}
}
}
} )
}
Das manuelle Erstellen von Objekten ist schwierig und langweilig. Ich empfehle die Verwendung des Alexa Message Builder-Moduls, um das Erstellen komplexerer Antworten zu vereinfachen.
Alexa Message Builder ist auf NPM verfügbar und Sie können ihn mit dem folgenden Befehl zu Ihrem Projekt hinzufügen:
npm install alexa-message-builder --save
Danach benötigen Sie es einfach mit dem Alexa Skill Kit wie folgt:
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 ( )
} )
}
Das obige Beispiel entspricht dem Beispiel aus dem Abschnitt „Antworten mit einem Objekt“.
Warum ist Alexa Message Builder nicht Teil des Alexa Skill Kit?
Nun, ohne wirklichen Grund wurde Alexa Message Builder vor Alexa Skill Kit entwickelt und es handelt sich um separate Module für den Fall, dass jemand nur eines davon ohne das andere benötigt.
Das Alexa Skill Kit verwendet Versprechen, um asynchrone Antworten zu verarbeiten. Um asynchron antworten zu können, geben Sie einfach das Versprechen zurück und lösen es mit einem Text oder einem Objekt auf. Alexa Skill Kit wendet dann dieselben Regeln wie oben an.
Zum Beispiel:
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 antwortet mit dem Text:
`Here's an info from the server: ${ processedResult } `
Alexa Skill Kit ( function
) erhält folgende Attribute:
object
, erforderlich) – ein unverändertes Objekt, das von Amazon Alexa empfangen wurde. Wenn Ihre Lambda-Funktion ein Objekt empfängt, bei dem es sich nicht um eine gültige Amazon Alexa-Anfrage handelt, wird sie es nicht analysieren und Ihre Handler-Funktion wird nie aufgerufen.object
, erforderlich) – ein auf AWS Lambda empfangenes Kontextobjekt. Es wird empfohlen, es nicht zu ändern. Alexa Skill Kit verwendet jedoch nur die Funktionen context.succeed
und context.fail
, sodass Sie ein benutzerdefiniertes Objekt übergeben können, das diese beiden enthält Funktionen aus einem ursprünglichen Kontextobjekt.function
, erforderlich) – eine Funktion, die analysierte Ereignisse empfängt und eine Antwort zurückgibt, die an Amazon Alexa weitergeleitet wird.Die Handler-Funktion ist eine Funktion, die analysierte Ereignisse empfängt und eine Zeichenfolge, ein Objekt oder ein Versprechen zurückgeben kann, das bei Auflösung eine Zeichenfolge oder ein Objekt zurückgibt.
Wenn Sie nicht möchten, dass Alexa antwortet, geben Sie einfach null
zurück oder geben Sie gar nichts zurück.
Ein analysiertes Objekt ist ein Objekt, das die folgenden Eigenschaften enthält:
null
null
{}
).Der Hauptteil des Codes befindet sich im lib-Verzeichnis.
Die Tests befinden sich im Spec-Verzeichnis und sollten der Struktur der entsprechenden Quelldateien folgen. Alle Namen ausführbarer Testdateien sollten mit -spec
enden, damit sie automatisch von npm test
übernommen werden. Alle zusätzlichen Projektdateien, Hilfsklassen usw., die nicht direkt vom Testläufer ausgeführt werden dürfen, sollten nicht mit -spec
enden. Sie können das Verzeichnis spec/helpers verwenden, um Jasmine-Helfer zu speichern, die geladen werden, bevor ein Test ausgeführt wird.
Wir verwenden Jasmine für Unit- und Integrationstests. Sofern es keinen zwingenden Grund gibt, etwas anderes zu verwenden, verwenden Sie Jasmine bitte weiterhin für Tests. Die vorhandenen Tests befinden sich im Spec-Ordner. Hier sind einige nützliche Befehlsverknüpfungen:
Führen Sie alle Tests durch:
npm test
Führen Sie nur einige Tests durch:
npm test -- filter=prefix
Erhalten Sie detaillierte hierarchische Testnamenberichte:
npm test -- full
Wir verwenden ESLint aus Gründen der Syntaxkonsistenz und die Linting-Regeln sind in diesem Repository enthalten. Beim Ausführen von npm test
werden auch die Linting-Regeln überprüft. Bitte stellen Sie sicher, dass Ihr Code keine Linting-Fehler aufweist, bevor Sie eine Pull-Anfrage senden.
MIT – Siehe LIZENZ