Einleitung
Ein Alexa Flash Briefing Skill dient zum schnellen Informationsaustausch von Neuigkeiten, Zusammenfassungen oder sonstigen Inhalten über Sprache mittels Amazon Alexa. Anders als die üblichen Alexa Skills wird dieser nicht separat gestartet, sondern in die, ab Werk vorhandene, tägliche Zusammenfassung von Alexa integriert. Für die Flash Briefing Skills muss im Idealfall nicht mal Code geschrieben werden. Wenn z. B. ein bestehender RSS-Feed bereits ein Alexa-freundliches Format hat (keine HTML Tags in Titeln, Beschreibung etc.), dauert die Einrichtung des Skills sogar nur wenige Minuten. Was macht man aber, wenn man noch Einfluss auf den Inhalt nehmen will? Oder gar Inhalte (Texte, Audio etc.) vorhanden sind, aber es gar keinen RSS-Feed gibt? Hier kommt eine leichtgewichtige Kombination aus AWS API Gateway und AWS Lambda ins Spiel. Im Folgenden beschreibe ich anhand unseres codecentric-Blogs und des bereits vorhandenen RSS-Feeds beispielhaft, wie das funktionieren kann.
Voraussetzungen
Um das Beispiel in diesem Beitrag nachzuvollziehen, benötigt man Folgendes:
- AWS -Kenntnisse
- Einen AWS Account und entsprechende Berechtigungen für AWS Lambda und den AWS API Gateway
- Terraform-Kenntnisse
- Einen Amazon Alexa Developer Account
Der Plan
Alles, was wir für einen Flash Briefing Skill benötigen, ist ein öffentlich zugänglicher HTTPS-Endpunkt, der ein definiertes XML- oder JSON-Format (in UTF-8-Kodierung) liefert (siehe API Feed Reference ). Den Rest übernimmt Alexa. Um den HTTPS-Endpunkt wird sich unser API Gateway kümmern. Für das Response-Format bevorzugen wir in diesem Beispiel JSON. Der HTTP Request wird von unserer Lambda-Funktion verarbeitet. Der tatsächliche Inhalt kommt von unserem codecentric-Blog-RSS-Feed. Dieser hat schon das korrekte Atom-XML-Format, allerdings verstecken sich in der Beschreibung häufig HTML- oder XML-Tags, die wunderbar auf einer Webseite und in einem Feed-Reader aussehen, aber Alexa leider gar nicht gefallen. Also muss ein kleiner Wrapper (die Lambda-Funktion) den Inhalt einlesen und ein HTML/XML-freies JSON ausliefern. Das Schöne ist, dass wir mittels Lambda und des API Gateways nicht auf RSS Wrappen limitiert sind. Man könnte einfach Informationen und Neuigkeiten aus einem CMS oder aus sonstigen Quellen liefern oder mit dem RSS-Feed kombinieren.
Die Architektur
Startet man die tägliche Zusammenfassung, so geht Alexa die aktivierten Skills in der Reihenfolge, in der sie hinzugefügt worden sind, durch. Sobald wir mit dem codecentric-Blog an der Reihe sind, wird über unseren API-Gateway-Endpunkt die Lambda-Funktion aufgerufen. Diese holt sich die Informationen vom codecentric-RSS-Feed ab, parst das XML-Dokument, entfernt HTML- und XML-Tags aus der Beschreibung und wandelt den Feed in JSON um. Im Erfolgsfall sendet die Funktion eine Antwort an das API Gateway, die dann an Alexa durchgereicht wird.
Die Ausführung
Der Code
Für die oben genannte Architektur gibt es zwei Repositories auf GitHub. Eines, um die Infrastruktur auf AWS mit Terraform einzurichten und eines für den Quelltext der Lambda-Funktion.
Der Alexa Skill
Flash Briefing Skills sind von allen Alexa Skills wahrscheinlich am einfachsten zu erstellen und zu konfigurieren. Nach der Anmeldung auf der Developer-Konsole unter https://developer.amazon.com klickt man auf “Alexa” -> “Alexa Skills Kit” und wählt im folgenden “Flash Briefing” aus.
Danach folgt noch eine Seite Konfiguration. Unter “Preamble” gibt man einen einleitenden Satz vor, den Alexa spricht, wenn der Skill an der Reihe ist. Wie sich das anhört, kann man hier auch gleich testen. Unter “Feed” tragen wir unseren API-Gateway-Endpunkt ein. Den URL dazu finden wir in der AWS Console im API Gateway Service unter der entsprechenden Stage (z. B. dev).
Die weiteren Pflichtfelder sind selbsterklärend. Noch ein schickes Logo dazu, und fertig ist der Skill. Im Anschluss müssen wir den Skill für Tests aktivieren (siehe Abbildung unten). Danach ist der Skill erstmal nur für Entwickler freigeschaltet. Er kann in der Alexa-App (entweder Web oder mobil) unter “Ihre Skills” -> ”Entwicklerskills” eingesehen und aktiviert werden. Unter “Einstellungen” -> “Tägliche Zusammenfassung” können wir nun unseren Skill in die Zusammenfassung einreihen. Jetzt kann man ihn testen, z. B. mit “Alexa, starte meine tägliche Zusammenfassung”.
Das Format
Hier ein Beispiel für eine JSON Response:
1Content-Type: application/json 2... 3{ 4 "uid": "urn:uuid:3AE32FAE-A619-479B-8071-2631744DCF17", 5 "updateDate": "2018-02-14T22:34:51.0Z", 6 "titleText": "Continuous Integration mit Drone auf Amazon Web Services", 7 "mainText": "Drone ist ein Continuous Delivery System basierend auf Docker.", 8 "redirectionUrl": "https://blog.codecentric.de/en/2018/02/continuous-integration-drone-aws/" 9}
Der “titleText” wird in der Alexa App (oder bei einem Echo Show auf dem Display) angezeigt, während der “mainText” von Alexa beim Aufruf vorgelesen wird. Über “redirectionUrl” kann der Benutzer in der App auf weiterführende Informationen mittels Browser gelangen (in unserem Fall führt der URL zu dem Artikel auf dem codecentric-Blog).
Restriktionen
- Der Response-Type muss im Response-Header Content-Type geliefert werden (also z. B. application/json).
- Man soll zwischen einem und fünf Feed-Items liefern und dabei das neueste zuerst.
- Feed-Items sind auf 4500 Zeichen limitiert.
- Die Feed-Items dürfen in den Attributen nur Text enthalten (kein HTML, XML, SSML…).
- Antwortzeit des Servers sollte eine Sekunde nicht überschreiten.
Gotchas
Unbedingt das definierte JSON-Format einhalten, insbesondere das Datumsformat beachten. Ansonsten wird der Inhalt nicht gesprochen. Man erfährt leider auch nicht, was genau schiefgelaufen ist. Alexa erwähnt nur, dass der Inhalt derzeit nicht verfügbar ist. Die API-Referenz sollte man sich daher etwas genauer anschauen.
Wenn das Abfragen des Feed-URL des Flash Briefing Skills länger als eine Sekunde braucht, bricht Alexa ab. Manchmal ist Alexa etwas großzügiger, manchmal aber auch sehr streng. Besser, man schafft es, die Antwort in deutlich unter einer Sekunde auszuliefern. Unter Umständen kann sich hier ein einfacher Cache lohnen.
Fazit
Mit AWS Lambda und dem AWS API Gateway lassen sich auf wunderbar einfache Art und Weise Alexa Flash Briefing Skills erstellen. Diese können beliebige Text- und Audio-Inhalte liefern, zumindest solange sie die Restriktionen von Amazon erfüllen. Leider kann in einem Flash Briefing Skill (noch?) keine Speech Synthesis Markup Language (SSML) verwendet werden, was sich bei längeren Texten als großer Nachteil herausstellt. Der Benutzer verliert schnell das Interesse, wenn Alexa zu lange ohne Modulation ihrer Stimme vor sich hin monologisiert.
Weitere Beiträge
von Daniel Hill
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Daniel Hill
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.