Alexa Skill Erstellen (German | Deutsch)
by alexposcher in Circuits > Assistive Tech
2216 Views, 3 Favorites, 0 Comments
Alexa Skill Erstellen (German | Deutsch)
Was ist ein Alexa Skill?
Alexa ist ein Cloud-basierter Sprachservice, der auf Geräten wie Amazon Echo, Echo Dot, Echo Show oder Echo Spot verfügbar ist. Entwickler können Alexa Fähigkeiten hinzufügen, so genannte Skills, mit denen die Nutzer ihr Gerät auf ihre Bedürfnisse anpassen können. Es gibt zehntausende Skills im Alexa Skills Store zu entdecken, u. a. von Unternehmen wie Deutsche Bahn, Chefkoch oder dem ZDF und vielen weiteren innovativen Designern und Entwicklern. ~ Quelle: developer.amazon.com
In diesem Tutorial wird erklärt, wie man einen solchen Alexa Skill erstellt und programmiert.
Ziel:
Ziel ist es, einen Witze Skill, namens lustige Witze zu programmieren. Dieser Skill soll dem Benutzer Witze zufällig ausgewählte Witze erzählen.
Demo:
Um zu sehen, wie der Skill nachher Funktionieren soll, gibt es hier bereits eine Demo:
https://skills-store.amazon.de/deeplink/dp/B07ZKH9...
Dieser Skill kann gerne getestet werden.
Supplies
- Programmierkenntnisse
- Kenntnisse in Node.js
Erstellen Eines Amazon Developer Accounts
Erstelle Einen Neuen Skill
- Folge diesem Link: https://developer.amazon.com/alexa/console/ask
- Klicke auf den Create Skill Button auf der rechten Seite. Eine neue Seite öffnet sich anschließend.
- Gib den Namen deines Skills (in unserem Fall: Lustige Witze) im Skill name Feld ein.
- Stelle die Sprache bei Default language auf German (DE).
- Wir wollen einen Custom-Skill erstellen, also wählen wir beim Model Custom aus.
- Wähle bei Choose a method to host your skill's backend resources das zweite, also Alexa-Hosted (Node.js) aus.
- Nachdem Du alles ausgewählt hast, klicke oben rechts auf Create skill.
- Ein neues Fenster öffnet sich
Begrüße Den Benutzer
Das erste, was ein Benutzer mit einem Skill macht, ist ihn zu öffnen. Der Intent der den Skill öffnet ist bereits im Skill eingebaut, somit muss dieser Intent nicht extra hinzugefügt werden.
-
Öffne den Code Tab → Das Code Fenster mit der index.js Datei öffnet sich.
Jeder Intent Handlet hat zwei Funktionen:
- canHandle()
- handle()
Die canHandle() Funktion beinhaltet den Request, also die Anfrage, auf die der Handler antwortet.
Die handle() Funktion gibt dem Benutzer dann einen Antwort.
Wenn dein Skill eine Anfrage empfängt, so wird in der canHandle() Funktion nachgesehen, ob der Handler dieser Anfrage antworten kann.
-
In der handle() Funktion des LaunchRequestHandlers lösche den gesamten Code heraus und füge anschließend zu Beginn folgendes ein:
const speakOutput = 'Willkommen bei "Lustige Witze"! Frage einfach nach einem Witz.';
const repromtText = 'Möchtest du einen Witz hören?';
-
Nun müssen wir die Antwort noch an den Benutzer senden.
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(repromtText)
.getResponse();
- Klicke auf Save und anschließend auf Deploy
Der bereits generierte Code gibt Antworten in englischer Sprache. Damit der Alexa Skill später auch genehmigt wird, muss jede englische Antwort auf Deutsch umgeschrieben werden.
Bei folgenden Handlern muss der Wert der speakOutput Variable auf deutsch umgeschrieben werden:
-
HelpIntentHandler
const speakOutput = 'Dieser Skill erzählt dir die lustigsten Witze. Frage einfach nach einem Witz.';
const repromtText = 'Möchtest du einen Witz hören?';
return handlerInput.responseBuilder
.speak(speakOutput)
.reprompt(repromtText)
.getResponse();
-
CancelAndStopIntentHandler
const speakOutput = 'Bis bald!';
-
IntentReflectorHandler
const speakOutput = `Du hast ${intentName} ausgelöst.`;
-
ErrorHandler
const speakOutput = `Es tut mir leid, aber ich kann deine Frage zurzeit nicht verarbeiten.`;
Zum Schluss immer auf Save und anschließend auf Deploy klicken.
Begrüßung Testen
Immer nachdem Du eine Funktion zu deinem Skill hinzugefügt hast, solltest Du diese unbedingt testen, damit Du, falls ein Fehler auftritt ungefähr weißt, wo der Fehler liegen könnte.
- Klicke auf den Test Tab → ein neues Fenster öffnet sich.
- Aktiviere das Testen, indem du in der Select-Box Development auswählst.
- Schreibe oder spreche: "öffne lustige Witze." → der Skill sollte nun mit der Begrüßung antworten.
Intents Hinzufügen
Nun fügen wir Möglichkeiten hinzu, wie der Benutzer mit dem Skill interagieren kann. Intents ermöglichen es auf verschiedene Phrasen zu reagieren und anschließend einen bestimmten auszulösen, der die Anfrage dann verarbeitet.
- Klicke auf den Build Tab → das Build Fenster öffnet sich.
- Rechts in der Navigationsleiste steht bei Intents der HelloWorldIntent. Diesen löschen wir zu Beginn.
- Anschließend klicken wir auf den Add Button neben der Intents-Leiste.
Zuerst fügen wir bereits von Amazon vordefinierte Intents hinzu.
- Klicke dazu auf Use an existing intent from Alexa's built-in library
- Suche nach YesIntent und NoIntent und klicke bei beiden auf add
Nun fügen wir unseren eigenen Intent hinzu.
- Klicke dazu auf Create custom intent
- Gib dem Intent den Namen TellAJokeIntent
- Klicke auf Create custom intent
Jetzt fügen wir ein paar Beispielphrasen zu unserem Intent hinzu, also Phrasen, die der Benutzer sagen könnte. Gib dazu einfach die Phrasen ohne Punkt am Ende ein:
- Erzähle mir einen Witz
- Sag mir einen Witz
- Erzähle mir einen lustigen Witz
- Einen Witz bitte
- nach einem Witz
- mir einen Witz zu erzählen
Natürlich gibt es noch viele weitere Möglichkeiten, diesen Intent zu aktivieren, aber wir beschränken uns hier auf ein paar essentielle.
Nachdem Du alle Phrasen hinzugefügt hast klicke oben auf Save Model und anschließend auf Build Model. Nachdem der Build abgeschlossen ist, navigiere zurück zum Code Tab.
Witze Hinzufügen
Damit unser Skill Witze erzählen kann, benötigen wir ein paar Witze.
Erstelle dazu im lambda Ordner eine neue Datei mit dem Namen jokes.json
Füge folgendes in die jokes.json Datei ein:
[
"Was ist weiß und guckt durchs Schlüsselloch? Ein Spannbettlaken.",
"Welches Getränk trinken Firmenchefs? Leitungswasser.",
"Was essen Autos am liebsten? Parkplätzchen.",
"Was passiert wenn man Cola und Bier gleichzeitig trinkt? Man kollabiert.",
"Wie heißt ein Spanier ohne Auto? Carlos",
"Was sitzt auf einem Baum und winkt? Ein Huhu!",
"Was sagt ein Gen, wenn es ein anderes trifft? Halogen.",
"Was ist ein studierter Bauer? Ein Akademiker.",
"Ich bin so unentschlossen. Als japanischer Krieger wäre ich ein Nunja."
]
Natürlich kannst Du selbst noch mehr Witze hinzufügen, zum Testen jedoch sollte es schon funktionieren.
Klicke wieder auf Save und Deploy.
Intent Handler Hinzufügen
Die zuvor erstellen Intents benötigen nun einen Handler, der darauf reagiert, wann die Intents ausgelöst werden sollen. Der NoIntentHanlder beendet den Skill. Der YesIntentHandler, sowie der TellAJokeIntentHandler Antwortet mit einem Witz.
Lösche den gesamten HelloWorldIntentHandler aus der index.js Datei heraus und füge an der Stelle die neuen drei IntentHandler ein:
const TellAJokeIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'TellAJokeIntent';
},
handle(handlerInput) {
const jokes = JSON.parse(fs.readFileSync('./jokes.json'));
const speakOutput = jokes[Math.floor(Math.random() * jokes.length)];
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
const YesIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.YesIntent';
},
handle(handlerInput) {
const jokes = JSON.parse(fs.readFileSync('./jokes.json'));
const speakOutput = jokes[Math.floor(Math.random() * jokes.length)];
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
const NoIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.NoIntent';
},
handle(handlerInput) {
const speakOutput = 'Okay, vielleicht später einmal.';
return handlerInput.responseBuilder
.speak(speakOutput)
.getResponse();
}
};
Intent Handler Registrieren
Nun müssen nur noch die Intent Handler registriert werden. Scrolle dazu bis ans Ende der index.js Datei.
Ersetze dies:
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
HelloWorldIntentHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
SessionEndedRequestHandler,
IntentReflectorHandler, // make sure IntentReflectorHandler is last so it doesn't override your custom intent handlers
)
.addErrorHandlers(
ErrorHandler,
)
.lambda();
durch das:
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
TellAJokeIntentHandler,
YesIntentHandler,
NoIntentHandler,
HelpIntentHandler,
CancelAndStopIntentHandler,
SessionEndedRequestHandler,
IntentReflectorHandler, // make sure IntentReflectorHandler is last so it doesn't override your custom intent handlers
)
.addErrorHandlers(
ErrorHandler,
)
.lambda();
Anschließend klicke wieder auf Save und Deploy. Nachdem das Deployment abgeschlossen wurde, kannst Du deinen Skill wieder testen.
Skill Testen
- Klicke auf den Test Tab → ein neues Fenster öffnet sich.
- Schreibe oder spreche: "öffne lustige Witze." → der Skill sollte nun mit der Begrüßung antworten.
- Schreibe oder spreche: "Erzähle mir einen Witz." → der Skill sollte nun einen der Witze erzählen.
Wenn alles funktioniert, kannst du deinen Skill auch schon zertifizieren lassen.
Skill Vorschau Festlegen Und Zertifizieren Lassen
Fülle alle Textboxen mit deiner persönlichen Beschreibung des Skills aus.
Bei Example Phrases schreibe:
- Alexa, öffne lustige Witze.
- Erzähle mir einen Witz.
- Alexa, frage lustige Witze nach einem Witz.
Sobald du alle verpflichtenden Felder ausgefüllt hast und die Icons hochgeladen hast klicke auf Save and continue.
Wähle bei Privacy & Compliance, sowie bei Availability die zutreffenden Antworten aus.
Siehe dir vor der Zertifizierung die Submission Checklists an!
Nun musst du ein paar Tests durchlaufen. Dies kann eine Weile dauern.
Anschließend kannst du deinen Skill zur Zertifizierung absenden. Es wird ca. 1-2 Tage dauern, bis zu ein Feedback zu deinem Skill bekommst. Wenn du alles richtig gemacht hast, sollte dein Skill sofort veröffentlicht werden.
Wenn du den Skill jetzt schon ausprobieren möchtest, aber dein Skill noch nicht zertifiziert wurde, kannst du jederzeit diesen Skill verwenden: