Vor kurzem bin ich eine typische „Read the Fucking Manual Falle“ hereingefallen. Als Alexa-Skill-Entwickler kümmere ich mich regelmäßig um meine Skills und erweitere diese. Für die Programmierung nutze ich MS Visual Studio Code als IDE. Meinen lokal geschrieben Code lade ich über das ASK CLI direkt per Kommandozeile hoch. Das geht so am schnellsten und einfachsten. Bei meinem letzten Update habe ich noch schnell mal eben das Node.JS Package für das ASK CLI schnell erneuert mit dem Befehl npm i ask-cli
. Dumm war nur, dass ich nicht die Anleitung genau gelesen habe, sondern nur die neue Versionsnummer gesehen habe und darauf gehofft habe, dass ein einfaches Update keinen größeren Schaden verursacht.
Natürlich kam es dann doch anders als erwartet. Ich sag nur, „never change a running system!“ Seit dem 4. Mai 2020 gibt es die neue ASK CLI Version 2. Dies wurde groß im Amazon Alexa Blog angekündigt! Den Blogpost habe ich auch damals schon gelesen, nur was ein wenig bei mir unterging, war der Umstand, dass Amazon grundlegende Funktionen entweder entfernt hat oder mit ganz anderen Befehlen belegt hat.
Das ganze beißt sich jetzt auch mit dem Kapitel 6.4 in meinem Alexa Skills programmieren Buch, was ja dieses Jahr im April erschienen ist. Daher fühle ich mich nun besonders verpflichtet, zumindest hier über meinen Blog ein Update zu veröffentlichen. Grundsätzlich hat sich nicht viel an dem geändert, was ich damals in meinem Buch veröffentlicht habe. Die Anleitung zur Installation und die Hauptbefehle bleiben gleich. Es haben sich aber eben auch ein paar CLI Befehle geändert, die wahrscheinlich einige Entwickler in den Wahnsinn treiben werden.
Was ist der Vorteil von ASK CLI V2 gegenüber ASK CLI V1?
Neben den Umstand, dass die alte Version nicht mehr weiterentwickelt wird, gibt es eben auch ein paar weitere Vorteile der zweiten Version gegenüber der ersten. So können nun auch Alexa Hosted Skills, das sind Skills, deren Programmcode direkt online in der Skill Console geschrieben wird, nun auch lokal entwickelt werden. Dann sollen bestimmte Entwicklungsabläufe leichter automatisierbar sein. Für mich als einfacher Entwickler ist das weniger spannend, aber in den USA gibt es mittlerweile auch Tool-Anbieter mit denen man Skills in einer eigene grafischen Oberfläche erstellen kann, diese Tool-Anbieter dürften diese Neuerungen sehr spannend finden.
Was hat sich jetzt geändert im ASK CLI?
Der alte Befehlask init
, mit dem man sich in sein Entwicklerkonto angemeldet hat wurde durch ask configure
ersetzt. Hierbei ist mir die grundlegende Änderung von ASK CLI V2 zu V1 aufgefallen. In der neuen Version bedeutet ask init
, dass man einen neuen oder ein bestehendes Alexa-Fähigkeiten-Projekt einrichten möchte. Der Befehl hilft dabei eine ask-resources.json-Datei zu erstellen, um die Bereitstellung des Skills zu unterstützen. Er legt die gebräuchlichsten Attribute fest und schlägt sinnvolle Standardeinstellungen für die Verwendung von AWS-Lambda als Endpoint vor.
Da sind wir auch schon bei der nächsten Hürde. Wenn Du also schon einen bestehenden Alexa Skill per ASK CLI V2 hochladen möchtest, musst Du diesen an die neue Verzeichnisstruktur anpassen, andernfalls wirst Du scheitern! Genau dieser Fall trat auch bei mir ein. Zum Glück war mein Englisch so gut, dass ich etwas mit der Amazon Dokumentation über die Migration von ASK CLI V1 zu V2 anfangen konnte, aber nicht jeder Programmierer kann gut Englisch, oder schreckt zumindest davor zurück.
Wenn Du also ein schon bestehenden Alexa Skill, der zuvor mit ASK CLI V1 hochgeladen wurde, jetzt mit ASK CLI V2 hochladen möchtest, musst Du die Verzeichnisstruktur Deines Skills anpassen.
Zum Glück hat Amazon daran gedacht und dafür einen extra ASK CLI V2 Befehl eingeführt. Mit dem CLI Befehl ask util upgrade-project
wird die alte Verzeichnisstruktur vom ASK CLI V1 an die neue Verzeichnisstruktur von ASK CLI V2 angepasst.
Alexa Skill Verzeichnisstruktur als und neu im Überblick
[row] [column size=’1/3′]Projekt Komponente
Projekt Konfiguration
Skill package
Skill-code
Skill Hosting Infrastruktur
[/column] [column size=’1/3′]v1.x
.ask/config
skill.json
models/xx-YY.json
isps/
…
lambda/
N/A
[/column] [column size=’1/3′]v2.x
ask-resources.json
skill-package/skill.json
skill-package/interactionModels/xx-YY.json
skill-package/isps/
…
lambda/
infrastructure/
[/column] [/row]Der Upgrade Befehl erstellt auch einen versteckten Ordner namens ./legacy, der eine Kopie des v1-Skillprojekts vor dem Upgrade enthält. Wenn das Upgrade nicht erfolgreich ist, kann man den Inhalt des Ordners ./legacy nutzen, um den vorherigen Zustand des Skillprojekts wiederherzustellen.
Nutze stets die Windows Shell mit Administratorrechten
Das ist ein sehr wichtiger Hinweis, den je nachdem wie man sich in seine Windows-Shell oder Kommandozeilenprogramm eingeloggt hat, können die Berechtigungen zum Erstellen von neuen Verzeichnissen variieren. Ich empfehle Windows Nutzern die Upgrade-Prozedur für den Skill stets in der Windows Shell mit Administratorrechten (Windows-Taste + x -Taste und dann a-Taste drücken) durchzuführen.
Alexa Skill klonen wird ein wenig komplizierter
Ein weitere wichtiger Befehl für mich ist komplett verschwunden im ASK CLI V2. Der Befehl ask clone
hat früher bestehende Skills aus der Alexa Developer Console und der AWS Lambda heruntergeladen auf die eigene Festplatte. Jetzt kommt man nur noch an seinen AWS Skill Code, wenn man diesen direkt auf der AWS Lamda Webseite als Zip-Datei exportiert.
Wenn du also eine bestehenden Alexa Skill, der selbst gehostet ist herunterladen möchtest, musst du also zunächst das Skill Projekt mit ask init anlegen und dann den Code auf der AWS Lambda Webseite herunterladen und in dein neu erstelltes Projektverzeichnis kopieren.
Generell alle Lambda Kommandos sind aus dem ASK CLI V2 verschwunden, was ich sehr schade finde. Denn oft muss man ja nur ein wenig am Code verändern und nicht den kompletten Skill hochladen.
ask clone gibt es nicht mehr!
In der neuen Version muss man immer den Befehl ask deploy
nutzen um den Skill. Code zu erneuern, auch wenn man nur einen kleinen Bug im Code beseitigt hat. Das ASK CLI V2 erstellt darauf eine Zip-Datei des Codes und lädt alle veränderten Dateien komplett hoch. Zum Glück prüft das neu ASK CLI, ob sich auch das Sprachmodell verändert hat und ignoriert dieses, falls keinen Änderungen vorhanden sind.
Natürlich sind das nicht alle Befehle, die Du mit der ASK CLI nutzen kannst. Ich habe hier nur die für mich wichtigsten Änderungen dokumentiert. Für den kompletten Überblick zum ASK CLI empfehle ich Dir diesen Link: https://developer.amazon.com/de-DE/docs/alexa/smapi/ask-cli-command-reference.html (Englisch) Was Du auch noch beachten solltest, wenn Du Dir die Amazon Referenzseite zum ASK CLI anschaust. Es gibt es oben einen blauen Button, wo Du zwischen der Referenz der alten und neuen Version wechseln kannst. Das habe ich erst viel zu spät gemerkt.
ask diff gibt es nicht mehr!
Mit dem Befehl ask diff
konnte man herausfinden, welche Version die aktuelle war, die lokale oder die cloud version. Diese Prüfung findet jetzt immer beim Upload mit ask deploy
automatisch statt.
Fazit
Mit der alten Version konnte ich schneller debuggen, weil ich mal eben nur die AWS Lambda Funktion mit den Befehl ask deploy -t lambda
erneuen konnte. Jetzt muss ich warten bis das ASK CLI meinen Code als Zip-Datei komprimiert hat und der gesamte Skill wird deployed. Das dauert deutlich länger als vorher. Ich war auch am Anfang total wütend, weil ich unachtsam das Update gemacht hatte ohne mir über die Konsequenzen im Klaren zu sein. Wer aus Versehen ein update, wie ich gemacht hat und überhaupt nicht mit der V2 weiter arbeiten möchte, muss das ASK CLI V2 komplett deinstallieren mit dem Kommando npm uninstall ask-cli
und dann die alte Version mit den Befehl npm install ask-cli@1.7.23
installieren.