Weitere Daten stehen in der Ressourcendatei templates.yaml. Sie muss im selben Verzeichnis liegen wie das Python-Programm, das mit dem Skill kommuniziert. In dieser Datei legen Sie die Texte ab, die der Skill verwenden soll. Das erleichtert es, die Sprachausgaben anzupassen, um etwa den Gruß umzustellen oder andere Geräte einzutragen. Die Ressourcendatei für das Beispiel im Artikel sehen Sie in Listing 4.
Listing 4
gruss: Guude
fernseher: Fernseher ist {{status}}
licht: Licht ist {{status}}
dose: Steckdose ist {{status}}
Um den Python-Server zu starten, geben Sie auf der Shell das Kommando python echopi.py ein. Achten Sie darauf, dass Ngrok immer laufen muss, wenn Sie den Python-Server verwenden wollen, sonst lässt sich zwischen dem Echo-Skill und dem Programm keine Verbindung aufbauen.
Lassen Sie nun Ngrok und das Python-Programm einfach weiterlaufen. Schließen Sie auch die Terminals nicht, das würde die Programme beenden. Wir widmen uns nun der Erstellung eines Skills für Alexa.
Alexa-Skill einrichten
Für den nächsten Schritt muss das verwendete Echo-Gerät aktiviert sein – holen Sie das eventuell noch nach. Um danach einen Alexa-Skill zu erstellen, benötigen Sie einen Account bei Amazon Web Services (AWS), den Sie gegebenenfalls kostenlos über die AWS-Homepage [4] erstellen. Dazu benötigen Sie eine Kreditkarte sowie einen Mobilfunkanschluss.
Über den AWS-Account lässt sich nun ein neuer Alexa-Skill erstellen. Der einfachste Weg dorthin führt über die Liste Ihrer aktuellen Alexa-Skills [5]. Dort klicken Sie dann auf den Schalter Create Skill, um einen neuen Skill anzulegen (Abbildung 4).
Nun geben Sie dem Skill einen deskriptiven Namen und geben die gewünschte Sprache an (Abbildung 5). Ein Klick auf den Next-Schalter führt zum nächsten Schritt, wo Sie das Custom-Modell auswählen. Es bietet den höchsten Grad an Flexibilität. Mit einem Klick auf den Schalter Create skill schließen Sie den Assistenten ab. Nun sehen Sie die zu Ihrem Skill gehörende Homepage (Abbildung 6). Hier lassen sich noch weitere Parameter des Skills einstellen; das Video auf der Seite hilft beim Einstieg in die Feinheiten der Skill-Erstellung.
Um zu verstehen, wie sich ein Skill zusammensetzt, sehen wir uns erst einmal seine Komponenten genau an. Der komplettierte Skill beschreibt ein sogenanntes Interaction-Modell, das alle Verhaltensweisen und Bestandteile zusammenfasst. Das Modell selbst besteht wiederum aus einer Reihe von Komponenten.
Die Invocation (Einladung) fungiert als Name unseres Skills und dient als Schlüsselwort für das Aktivieren des Skills. Es gibt einige Regeln, die es bei der Namensvergabe einzuhalten gilt – die entsprechende Webseite erklärt sie ausführlich.
Ein Intent (Absicht) beschreibt eine Aktion, die Sie innerhalb des Skills ausführen möchten. Die einzelnen Intents benötigen mindestens ein definiertes Schlüsselwort (Sample Utterances) das die Aktion startet. Zu einem Intent lassen sich mehrere Sample Utterances hinterlegen – etwa die Varianten “jo”, “jepp” und “jawoll” für das einfache “ja”. Je mehr sinnvolle Utterances Sie zu einem Intent eintragen, um so lebendiger und betriebssicherer gerät der Skill.
Bei Slot Types handelt es sich um selbst definierte Datentypen, die innerhalb der Skills zum Einsatz kommen. Von der Idee her ähneln die Slot Types Aufzählungsdatentypen. Fragt man nach einer Automarke, könnte der Slot Type dazu Automarke heißen und Werte wie zum Beispiel BMW, Audi oder Ford enthalten.
Mit dem JSON Editor, einem einfachen Texteditor, bearbeiten Sie die einzelnen Komponenten des Skills. Das erfordert entsprechendes Know-how, bei komplexen Skills behält man jedoch leichter die Übersicht. Im Abschnitt Interfaces binden Sie Multimediainhalte direkt in ein Skill ein. Derzeit gibt es drei Interfaces: Audio Stream, Video Stream und Display Interface.
Über die Endpoints legen Sie fest, mit welchen Diensten im Internet der Skill kommunizieren soll. In unserem Fall fungiert der Raspberry Pi als Endpoint, den wir über den Ngrok-Dienst mit unserem Skill verbinden.
Der Beispiel-Skill soll drei Geräte steuern: den Fernseher, das Licht und eine Steckdose. Dazu legen Sie für jedes Gerät einen Intent an. Jeder Intent kennt die Kommandos, die das entsprechende Gerät benennen und den Status übermitteln. Als Schlüsselwort dient das Kommando “Haus”. Sie definieren es unter Invocation, danach klicken Sie auf den Schalter Save Model (Abbildung 7). Aus Erfahrung kann der Autor nur dazu raten, lieber einmal zu viel zu speichern, als sich später zu wundern, warum der Skill nicht so arbeitet wie er soll.
Slots und Intents
Um den Status der Geräte zu übermitteln, verwenden Sie einen Slot Type mit dem Namen GPIO. GPIO kann die Werte “an” und “aus” annehmen. Der Slot Type lässt sich schon jetzt anlegen. Klicken Sie dazu auf das Add hinter dem Eintrag Slot Types in der Seitenleiste. Dort wählen Sie dann einen Custom Slot Type und geben ihm den Namen GPIO (Abbildung 8). Auf der folgenden Seite weisen Sie dem Slot Type die Werte (Values) an und aus zu (Abbildung 9). Um die Werte zu speichern, müssen Sie hier Save Model im Kopf der Seite klicken.









