Sprachsteuerung und Chatbots sind in aller Munde. Neben Siri, Google Now und Cortana ist inzwischen auch Amazon Alexa in Deutschland verfügbar und erfreut sich steigender Beliebtheit. Die Entwicklung dafür ist kein Hexenwerk – dieser Artikel gibt eine kurze Einführung für die Umsetzung. Dazu benötigen wir:

  • Amazon Alexa
    Wir verwenden im Büro ein Amazon Alexa Dot – die kleine Variante bietet ausreichend Möglichkeiten und lässt sich für einen besseren Klang einfach mit einer Bluetooth-Box verbinden. Weitere Informationen sind auf Amazon zu finden.
  • Alexa Skills Kit
    Das Alexa Skills Kit bietet die Spracherkennung. Auf Basis von Beispielsätzen lernt Alexa die Absichtserkennung und liefert diese Absicht mit vielen weiteren Optionen an ein beliebiges REST-Interface.
  • Node-RED
    Als Serveranwendung verwenden wir Node-RED. Damit lässt sich auf einfache und schnelle Art und Weise die Annahme von HTTP-Requests realisieren, über bestimmte Funktionen können einfach und schnell API-Calls gesendet und das Ergebnis als einfache HTTPS-Response zurückgemeldet werden.
  • IBM Bluemix
    Für Hosting mit einfachem Deployment verwenden wir IBM Bluemix. Die PaaS-Lösung bietet einfaches Hosting von Node-RED-Anwendungen und skaliert bei Bedarf einfach mit den Anforderungen mit. Bluemix kann auch 30 Tage kostenlos getestet werden, natürlich ist aber auch jede andere Hosting-Möglichkeit eine Alternative.

Intent-Konfiguration und Sprachsteuerung für Alexa

Nach Installation des Alexa Dots kann mit dem selben Account direkt ein Amazon Developer Account eröffnet werden. Mit der Erstellung eines neuen Skills und der Benennung ist die Einrichtung abgeschlossen. Wichtig ist dabei der Punkt “Invocation Name”, da auf diesen Namen der zukünftige Skill aktiviert wird. Für die Spracherkennung geht es direkt weiter zum “Interaction Model”:

Im Interaction Model werden alle möglichen Absichten für das Skill definiert und die Spracherkennung trainiert. Dazu folgt Amazon ähnlich wie IBM Conversation dem Modell von Intents: Zu jeder Skillabsicht werden mehrere Beispielsätze formuliert. Um eine breite Abdeckung verschiedener Anfragen zu verstehen, sind mindestens fünf Samples pro Intent zu empfehlen. Dabei muss der Satz am Ende nicht exakt matchen: Alexa trainiert seine Spracherkennung laufend fort so dass Abwandlungen und Mischungen der einzelnen Beispiele sehr exakt erkannt werden und Alexa die eigentliche Absicht des Nutzers damit sehr gut erkennt. Das Anlernen des Systems erfolgt über den Button “Build Model”.

Im Bereich “Configuration” wird anschließend noch eine API-URL eingetragen. An diese URL sendet Alexa während der Ausführung ein POST-Request, schickt relevante Informationen zum Nutzer mit und wartet anschließend auf eine Antwort. In unserem Fall senden wir den POST-Request ganz einfach an ein Node-RED-Backend bei IBM.

Node-RED-Backend für Alexa-Skills

Links oben startet das NodeRED-Script mit einem HTTPS-POST-Request auf /alexaCalling. Im Anschluss wird die Funktion “get intent name” aufgerufen. Zwei einfache Zeilen geben aus dem komplexen Alexa-Request-Object die für das Beispiel einzig relevante Information zurück: Den Intent-Namen:

msg.payload = msg.payload.request.intent.name;
return msg;

Anschließend erfolgt ein Switch mit drei Alternativen: Für “Messages” und “Substitutions” werden API-Calls ausgeführt. Die Informationen von mehreren Objekten werden dabei in einer einfachen loop-Funktion zusammengeführt und als String weitergereicht:

var tmp = "";
tmp = "Der API-Aufruf hat folgende Informationen geliefert:\n";
for (var data in msg.payload) {
tmp += msg.payload[data].subject + "\n";
}
msg.payload = tmp;
return msg;

Im dritten Fall der Switch-Weiche erfolgt eine Weiterleitung zu IBM Conversation: Hier kann eine individuelle Spracherkennung mit weiteren Entitäten erfolgen. Auch hier wird das Ergebnis im String “payload” des msg-Objektes verarbeitet. In jedem Fall erfolgt im vorletzten Knoten “prepare Alexa-answer” die Vorbereitung für den Alexa-Output, der im letzten Knoten zurückgegeben wird:

msg.payload = {
"version": "1.0",
"sessionAttributes": {
"supportedHoriscopePeriods": {
"daily": true,
"weekly": false,
"monthly": false
}
},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": msg.payload
},
"shouldEndSession": true
}
}
return msg;

Mit anschließenden Klick auf “Deploy” wird das Backend auf Basis von NodeRED per Continuous Integration ausgerollt und ist sofort verfügbar. Ein kurzer Test ist im “Service Simulator” möglich.

Ist der Test im Alexa Service Simulator abgeschlossen, kann der neue Skill direkt mit dem mit dem Account verbundenen Alexa Dot getestet werden.

Fazit

Der Beitrag zeigt: Die Entwicklung eines einfachen Skills für Amazon Alexa ist keine große Kunst. Mit NodeRED ist sehr schnell ein mächtiges Backend gezimmert, das zudem viele verschiedene Komponenten bereits bereithält – insbesondere im Bereich der Hausautomatisierung ist hier sehr viel vorab verfügbar, gleichzeitig können durch vorkonfigurierte Komponenten die angebundenen APIs auch einfach als Chatbots z.B. für Slack vergeben werden.

Für komplexere und sichere Systeme sind nichtsdestotrotz Erfahrung und umfangreiches Wissen notwendig. Für Fragen und Diskussionen stehen wir gerne zur Verfügung.

Über den Autor