Implementierung
Last updated
Last updated
Entwicklung des Amazon Alexa Skills mit JavaScript über AWS Lamda
Die Entwicklung des AlexaSkills fand auf Grundlage von JavaScript innerhalb von AWS Lambda statt. Beim Aufruf von Alexa mittels Spracheingabe wurde das entsprechende Skript also in der Cloud ausgefüht. Im Code sind mehrere sogenannte Intents hinterlegt, welche per passendem Sprachbefehl aufgerufen werden können. Beim Aufruf können auch bestimmte Informationen (in diesem Fall Produkte) per Variable übergeben werden. Folgende Intents wurden für unseren Prototypen angelegt:
Intent
Beschreibung
Beispielsatz zum Aufruf
command
GeneratorIntent
Startet den Skill und sorgt dafür, dass Alexa Anweisungen zur Einkaufsliste entgegen nimmt
"Alexa, starte Shop Note"
AddIntent
Alexa wurde um Hinzufügen eines Produktes gebeten und fragt nach einer Bestätigung der Aktion."
"Füge [Produkt] zur Liste hinzu." , "[Produkt] hinzufügen"
add
RemoveIntent
Alexa wurde gebeten, ein Produkt von der Liste zu entfernen und bittet um Bestätigung.
"[Produkt] entfernen!", "Alexa, ich habe [Produkt] eingekauft.
remove
ListIntent
Alexa wurde gebeten, die Einkaufsliste auszugeben.
"Einkaufsliste ausgeben", "Liste abfragen"
list
EinkaufslisteLeerenIntent
Alexa wurde gebeten, die Einkaufsliste zu löschen und fragt nach Bestätigung.
"Liste leeren", "Alexa, ich war einkaufen"
reset
CancelIntent
Beendet die Eingabe von Daten
"Beenden!"
Der Aufruf eines Intent wird weiterverarbeitet, indem eine dynamische URL erzeugt wird, die per GET-Request aufgerufen wird. Als command wird das jeweils zum Befehl gehörende Kommando ausgewählt, als Parameter product wird das genannte Produkt verwendet, welches von Alexa per Spracherkennung eingesetzt wird. Die Bestätigung erfolgt jeweils per Ja oder Nein.
Nach dem GET-Request wartet der Intent auf Antwort vom Webserver und kann diese weiter verarbeiten. In der Regel wird ein Teil der Antwort ausgelesen, bzw. bei Erfolgsmeldung eine Bestätigung der Aktion ausgegeben.
Entwicklung des Backend (Apache und MySQL) Vorgabe aus dem Projekt war, dass die Einkaufsliste, sowie die gesamte Serverlogik in einer MySQL Datenbank gespeichert wird. Wir mussten also einen Weg finden, Alexa mit MySQL zu integrieren.
Wir haben bei Hetzner Online einen Linux-Server gemietet, der mit Ubuntu 18.0.4 betrieben wird und haben dort eine Kopie der MySQL-Datenbank aus dem Projekt angelegt. Zusätzlich wurde ein Apache Webserver eingerichtet, der per http auf Port 80 betrieben wird. Auf dem Server abgelegter PHP-Code übernimmt die Ausführung der Verarbeitungslogik, kann also Daten aus der Datenbank abfragen und Daten in die Datenbank schreiben.
Die Datenbank besteht aus folgenden Tabellen:
Aufrufe am Apache Webserver werden per GET-Request durchgeführt, welcher drei Parameter über die URL empfängt:
user
command
product
Ein beispielhafter Request sieht wie folgt aus: http://alexa.itdhosting.de/einkaufslistengenerator.php?user=fabio&command=add&product=salami
Bei Aufruf dieser URL würde mit dem User "fabio" das Produkt "salami" zum Warenkorb hinzugefügt werden. Folgende Commands werden vom Webserver erkannt:
add - Fügt ein neues Product der Liste hinzu.
remove - Entfernt ein Produkt von der Liste
list - gibt die vollständige Liste aus
reset - leert die Liste vollständig.
Beim Aufruf der URL wartet Alexa auf einen Callback vom Server. Die Anfrage wird erst abgeschlossen, wenn der Webserver eine response verschickt. Im Falle der Aktionen add, remove und reset wird lediglich nach Abschluss der serverseitigen Verarbeitung eine Erfolgsmeldung versendet, im Falle von list besteht die Response aus einer Liste aller Produktbezeichnungen.
Architektur des Backend