Implementierung

De
Last updated 5 months ago

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:

Datenbankmodell der Einkaufslisten-Datenbank (MySQL)

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

Architekturskizze