Development

Alexa mit Pfiff

Einen eigenen Alexa Skill kreieren – so geht’s!
Keine Kommentare

Nachdem Amazon im Smartphonemarkt nicht wirklich Fuß fassen konnte, hat der Alleshändler sprachbasierte Assistenten als neues Gefechtsfeld avisiert. Entwickler dürfen Alexa mit eigenen Skills ausstatten, die Fragen beantworten und Produkte verkaufen.

Gleich zu Beginn eine wichtige Abklärung: Alexa unterscheidet sich von Spracherkennungsprodukten wie Lernout & Hauspies legendärem Dragon dadurch, dass es grammatikbasiert arbeitet. Das bedeutet, dass das Produkt nicht beliebige Informationen aufnehmen kann. Entwickler legen stattdessen eine Liste von Ausdrücken an, die der Engine danach als Wissensbasis zur Bewertung eingehender Sprachinformationen dient.

Außer Frage steht, dass diese Vorgehensweise zu einer Einschränkung der Möglichkeiten führt und die Arbeit des Entwicklers erschwert. Auf der Habenseite steht allerdings, dass ein derartiges Spracherkennungssystem ob der reduzierten Anzahl von Möglichkeiten wesentlich genauer arbeiten kann und zudem mit weniger Rechenleistung auskommt. Ein Paradebeispiel für derartige Systeme liefert Microsoft mit dem Kinect-SDK – der Sensor der ersten Generation erreichte mit sauber aufgebauten Grammatiken auch auf sehr leistungsschwacher Hardware brauchbare Resultate.

Alexa Skills in voller Bandbreite möglich

Amazons Sprachassistent Alexa ist auf eine lernfähige Erweiterbarkeit ausgelegt. Das als Skill (Fertigkeit) bezeichnete Progrämmchen erlaubt es Entwicklern, mehr oder weniger beliebige Intelligenz in Richtung des Servers zu jagen. Hierzu benötigt man nicht einmal ein Alexa-Gerät – eine Workstation reicht für erste Tests völlig aus.

Die Arbeiten an Alexa-Skills beginnen prinzipiell im Backend, das unter der Login-Seite auf Benutzer wartet. Es ist empfehlenswert, sich mit einem Konto anzumelden, das auch für die Arbeit mit AWS freigeschaltet ist.

Klicken Sie im nächsten Schritt auf die Option Create Skill, um den Assistenten anzuwerfen. Im Feld Skill Name erhält die neue Funktion einen Namen, als Default Language wollen wir German (DE) auswählen. Zum Zeitpunkt der Drucklegung unterstützt Amazon die in Abbildung 1 gezeigten Orte.

Abb. 1: Alexa ist geografisch beschränkt

Abb. 1: Alexa ist geografisch beschränkt

Der Assistent fragt danach, welches Modell für die Entgegennahme der Daten verantwortlich ist. Wir entscheiden uns hier für Custom und klicken danach auf den Knopf Create Skill. Amazon setzt uns nach getaner Arbeit in der hauseigenen Web-IDE ab, in der Sie den eigentlichen Skill erzeugen (Abb. 2).

Abb. 2: Alexa-Skills entstehen im Browser

Abb. 2: Alexa-Skills entstehen im Browser

Das von Alexa bereitgestellte Projektskelett ist noch nicht betriebsbereit. Im Interesse der Übersichtlichkeit wollen wir im ersten Schritt dafür sorgen, dass es ausführbar ist. Dazu müssen wir die rechts im Fenster eingeblendeten Schritte abarbeiten. Die auf der linken Seite eingeblendeten Komponenten des Skills wollen wir momentan ignorieren.

Die erste Aufgabe ist das Festlegen des Invocation Name. Es handelt sich dabei um einen — idealerweise weltweit einzigartigen — Namen, über den der Benutzer Alexa darüber informiert, dass eine eingehende Anfrage für den von Ihnen entwickelten Skill vorgesehen ist. Amazon erlaubt dabei die Verwendung von mindestens zwei Worten – je länger, desto besser. Der Autor probiert in den folgenden Schritten software und support test. Klicken Sie nach der Eingabe des Wunschnamens auf den Save-Knopf, um eine Aktualisierung des Modells zu befehligen.

Intents, abseits von Android

Klicken Sie im nächsten Schritt abermals auf den Build Tab in der Seite der IDE, um zum Skill builder checklist zurückzukehren. Das erste To-do-Item erscheint nun mit einem Haken, weil die von ihm gestellten Anforderungen erfolgreich erledigt wurden.

Die zweite Aufgabe hört auf den Namen Intents, Samples and Slots – sie ist für das eigentliche „Fleisch“ unseres Skills verantwortlich. Die in der Einleitung erwähnte Grammatik besteht in der Alexa-Welt aus einer Gruppe von als Intents bezeichneten Ausdrücken. Ein Intent ist eine mehr oder weniger beliebige Handlung, die der Benutzer unter Verwendung unseres Alexa-Skills durchführen möchte. Im Fall eines Skills zu Zigarren wäre es beispielsweise die Anfrage, welche Hersteller eine Zigarre mit einem bestimmten Ringmaß anbieten. Alternativ dazu – ein Skill darf mehrere Tricks enthalten – könnte der Benutzer natürlich auch fragen, welches Format eine Zigarre vom Typ Robusto oder Short Corona aufweist.

Eine sorgfältige Betrachtung dieses Beispiels zeigt, dass ein Skill bzw. die in ihm enthaltenen Aufgaben parametrierbar sein müssen. Die dazu vorgesehene Vorgehensweise ist der Slot. Es handelt sich dabei um einen Parameter, die in der Intent-Deklaration vorkommt, dort aber beliebige Werte aufnehmen kann. Die Verwendung von Slots wird von Amazon durch die Bereitstellung einer Gruppe vordefinierter Felder erleichtert. Möchten Sie beispielsweise Zahlen oder Daten einlesen, finden Sie in dem Dokument eine Gruppe von bereitgestellten Slots. Amazon investiert erfahrungsgemäß immensen Aufwand in deren Tuning und erkennt die jeweiligen Informationen mit sehr hoher Genauigkeit. Kurz vor der Fertigstellung dieses Hefts begann Amazon zudem damit, einige Dutzend Stern-Slots bereitzustellen. Es handelt sich dabei um Parameter, die beispielsweise die Namen von Flughäfen, Fluglinien, Regierungsdistrikten, Künstlern oder Farben aufnehmen können. Deren Verwendung ist in der Praxis immer empfehlenswert – schon deshalb, weil sie so auf die (erheblichen) Ressourcen von Amazon zurückgreifen können und keine eigene Liste pflegen müssen.

Nach dem Anklicken des zweiten Eintrags in der To-do-Liste finden Sie sich im Intent-Fenster wieder. Neben der Erzeugung eines hauseigenen Intents können Sie durch Auswahl der Option Use an existing intent from Alexa’s built-in library einen von Amazon vorparametrierten Intent verwenden. Wundern Sie sich nicht, dass das Backend auch dann auf Englisch erscheint, wenn der resultierende Skill in deutscher oder einer anderen der in Abbildung 1 genannten Sprachen entsteht.

Da wir einen hauseigenen Intent erzeugen möchten, geben wir im ersten Schritt einen Intent-Namen ein. Es handelt sich dabei um einen nur für das Amazon-Backend relevanten String, wir entscheiden uns für den Wert suszigarrenname. Achten Sie darauf, dass die Verwendung von Sonderzeichen an dieser Stelle weder erlaubt noch erforderlich ist – der Benutzer wird diesen String nie zu Gesicht bekommen.

International PHP Conference

Entwickler – das verlorene Handbuch

by Stefan Priebsch (thePHP.cc)

My browser does what?

by Joel Lord (Red Hat OpenShift)

JavaScript Days 2019

Einführung in Node.js

mit Golo Roden (the native web)

Concepts of the modern Web

mit Sven Kölpin (OPEN KNOWLEDGE)


Nach dem Anklicken des Bestätigen-Knopfs finden wir uns im Intent-Editor wieder. Der neue Intent erscheint außerdem in der links eingeblendeten Übersichtsliste, wo Sie ihn später zur weiteren Bearbeitung laden können.

Von besonderer Bedeutung ist das Sample-Utterances-Fenster: es handelt sich um die Beispielausdrücke, das sind vorgegebene Phrasen, mit denen der Benutzer den jeweiligen Intent per Sprache aktiviert. In der Praxis ist es empfehlenswert, vor der Festlegung der Sample Utterances nach unten zu scrollen, um das Slots-Fenster zu aktivieren. Im ersten Schritt legen Sie dort die Slots fest. Dazu vergeben sie zuerst im Feld Name einen String, der den Slot im Alexa Skills Backend identifiziert. Im nächsten Schritt wählen Sie den Typ aus, der die auszuliefernden Informationen am besten beschreibt. Im Interesse der didaktischen Kompaktheit wollen wir uns anfangs nicht mit hauseigenen Slots aufhalten, weshalb wir das Fenster wie in Abbildung 3 gezeigt konfigurieren.

Abb. 3: Die für den Zigarrengrößen-Skill erforderlichen Slots sind am Platz

Abb. 3: Die für den Zigarrengrößen-Skill erforderlichen Slots sind am Platz

Beachten Sie, dass das Auswahlfenster erst dann aktiv wird, wenn Sie den eingegebenen Namen durch Anklicken des kleinen Piktogramms rechts vom Textfenster bestätigt haben. Im nächsten Schritt kehren wir zu den Sample Utterances zurück, wo wir anfangs den String Wie heisst eine Zigarre mit dem Umfang {susumfang} einpflegen. Die in geschwungenen Klammern befindlichen Strings beschreiben die weiter unten angelegten Slots. Das Amazon Backend hilft Ihnen auf unterstützten Browsern beim Anlegen der Slots. Sobald Sie die öffnende Klammer eingeben, erscheint ein Fenster, in dem Sie aus den weiter unten angelegten Slots wählen können. Bei Bedarf lässt sich in diesem Fenster auch ein weiterer Slot anlegen. Klicken Sie nach Eingabe des Strings auf das Plussymbol, um die Sample Utterance zu speichern.

Es ist in der Praxis so gut wie immer empfehlenswert, möglichst viele Utterances anzulegen – auf Grund der grammatikbasierten Spracherkennung kann Alexa die eingegebenen Wörter sonst nicht erkennen. Wir wollen uns an dieser Stelle aber mit einem einzelnen String zufriedengeben und klicken deshalb abermals auf Save Model. Da die Erzeugung des Voice-Modells rechenleistungsintensiv ist, führt das Alexa-Backend sie nur auf explizite Aufforderung hin durch. Klicken Sie in der To-do-Liste auf den dritten Schritt Build Model, um den Zusammenbau zu beginnen.

Endpunkte als Datensenke

An dieser Stelle ist unser Skill zum Entgegennehmen der Frage nach dem Zigarrenumfang bereit. Leider bringt dies nicht viel – zur Beantwortung müssen die Daten in Richtung des Amazon Backends wandern, das sie danach an das Endgerät sendet. Wer einen Custom Skill erzeugt, hat an dieser Stelle die Qual der Wahl. In der Theorie könnten Sie die Payload über einen Web Service bereitstellen, der die in den Dokumenten beschriebenen Kriterien erfüllen muss. Leider ist dies alles andere als einfach, da Amazon Nettigkeiten wie einen Zertifikatsvergleich und SSL verlangt.

Der bequemere Weg ist die Nutzung von in der AWS Runtime lebenden Lambdafunktionen. Wählen Sie hierzu im Endpoints-Fenster den Radio Button AWS LAMBDA ARN aus, um eine nach dem Schema amzn1.ask.skill.89817666-de4c-4491-aab4-f14df1940ad4 aufgebaute Skill-ID auf den Bildschirm zu holen.

Öffnen Sie im nächsten Schritt das unter der AWS-Konsolenseite bereitstehende AWS-Backend, in dem sie eine neue Lambdafunktion anlegen. Als Vorlage wollen wir uns diesmal für Author from scratch entscheiden. Im Test des Autors hört die Funktion auf den Namen SUSZigarre. Bei der Runtime ist Amazon im Großen und Ganzen flexibel – der Autor verwendet in den folgenden Schritten Node.js 8.10.

Im Feld Permissions entscheiden wir uns für die Execution Role „Create a new role with basic Lambda permissions“. Als Rollenname dient susrole, im Feld Policy Templates entscheiden wir uns für „Basic Lambda@Edge permissions (for CloudFront trigger)“. Achten Sie darauf, dass Alexa zum Zeitpunkt der Drucklegung nur mit Funktionen zusammenarbeitet, die in einem der folgenden vier Orte unterkommen:

  • Asia Pacific (Tokyo)
  • EU (Ireland)
  • US East (N. Virginia)
  • US West (Oregon)

Die Auswahl des korrekten Servers erfolgt anders als in Azure über eine kleine Combobox auf der rechten oberen Kante des Bildschirms. AWS fragt während der Erzeugung nicht nochmals nach. Nach dem Anklicken des Erzeugen-Buttons finden Sie sich im Designerfenster wieder, in dem Sie im ersten Schritt in der Rubrik Add Triggers einen neuen Auslöser vom Typ Alexa Skills Kit anlegen (Abb. 4).

Abb. 4: Die Einrichtung der Lambdatrigger erfolgt grafisch

Abb. 4: Die Einrichtung der Lambdatrigger erfolgt grafisch

Im daraufhin darunter erscheinenden Fenster Configure Triggers setzen wir Skill ID Verification auf Disable, um uns das Hantieren mit den Skill-Attributen zu ersparen. Beachten Sie, dass das Aktivieren dieser Option in der Praxis sehr empfehlenswert ist – unterbleibt es, könnten Drittanbieter Ihre Funktion missbrauchen. Das Amazon Backend ist an dieser Stelle etwas unübersichtlich – scrollen Sie ganz nach unten, um in der zum Trigger gehörenden Rubrik den Add-Knopf zu finden. Klicken Sie ihn an, um den neuen Auslöser zur Lambdafunktion hinzuzufügen.

Klicken Sie danach auf Save, um die diversen Änderungen zu speichern. Zur eigentlichen Bearbeitung des Lambdacodes müssen Sie danach das Lambdasymbol anklicken. Das Amazon Backend reagiert auch diesmal mit dem Einblenden eines Fensters unterhalb der Übersicht. Von Haus aus finden Sie dort allerdings nur folgenden Code, der für die Arbeit mit Alexa Skills eher schlecht als recht geeignet ist:

exports.handler = async (event) => {
  // TODO implement
  const response = {
    statusCode: 200,
    body: JSON.stringify('Hello from Lambda!'),
  };
  return response;
};

Im Interesse der didaktischen Vollständigkeit sei hier noch einmal auf ein Grundprinzip hingewiesen: eine Lambdafunktion ist ein in der Cloud lebendes Stück Code, das vom Backend beim Eingehen eines Triggerereignisses aktiviert wird. Es liefert danach ein Response-Objekt zurück, über das die Runtime den Aufrufer mit weiteren Informationen versorgt. Wer sich ein wenig mit Webapplikationen auskennt, weiß, was an dieser Stelle folgt – sowohl die Signatur des Aufrufs als auch die Signatur des zurückgegebenen Objekts benötigen Änderungen, um der Sprach-Runtime die zur Interaktion notwendigen Informationen zur Verfügung zu stellen. Für ein erstes und sehr einfaches Beispiel wollen wir folgende Struktur verwenden:

exports.handler = (event, context, callback) => {
  // TODO implement
  callback(null, 'Hello from Lambda');
};

Klicken Sie nach getaner Arbeit abermals auf den Save-Knopf in der oberen rechten Bildschirmkante. In der Kopfzeile der AWS-Konsole finden Sie die Option ARN (Amazon Resource Name), die einen längeren, an einen URL erinnernden String enthält. Klicken Sie auf das Piktogramm mit den beiden ineinander geschlossenen Rechtecken, um den ARN in die Zwischenablage ihrer Workstation zu kopieren. Kehren Sie im nächsten Schritt in das Endpoints-Fenster der Alexa Developer Console zurück, und speichern Sie den soeben in die Zwischenablage übernommenen ARN in das Feld Default Endpoint. Scrollen Sie dann nach oben und klicken Sie auf die Option Save Endpoints, um die Optionen zu speichern. In manchen Fällen schläft das Alexa Backend während der Konfiguration der Lambdafunktion ein. Drücken Sie in diesem Fall F5 und loggen Sie sich abermals ein, um das Einpflegen des ARN in das Alexa Backend abzuschließen.

Ein erster Test

Klicken Sie in der Alexa Developer Console auf die Rubrik TEST, um den im Browser enthaltenen Testmodus zu aktivieren. Firefox fragt an dieser Stelle nach der Berechtigung, um den Mikrofonzugriff freizugeben (Abb. 5).

Abb. 5: Das Testen von Alexa Skills setzt Mikrofonzugriffsberechtigungen voraus

Abb. 5: Das Testen von Alexa Skills setzt Mikrofonzugriffsberechtigungen voraus

Klicken Sie im nächsten Schritt auf die Combobox neben „Test is disabled for this skill“, und entscheiden Sie sich für die Option „Development“. Ab diesem Zeitpunkt erlaubt Ihnen das Backend das Einpflegen von Informationen. Abbildung 6 zeigt das Textfeld, in dem Sie durch Anklicken des Mikrofonpiktogramms auch die Spracheingabe freischalten können.

Abb. 6: Das Alexa-Backend nimmt auch Tastatureingaben entgegen

Abb. 6: Das Alexa-Backend nimmt auch Tastatureingaben entgegen

Im nächsten Schritt können wir zwei Befehle in Richtung Backend schicken. Da der Autor dem Mikrofon seiner Workstation nur teilweise vertraut, sendet er im ersten Schritt durch Eingabe und anschließendem Drücken von Enter den String software und support test. Alexa reagiert darauf mit einem Fehler. Im nächsten Schritt senden wir den String software und support test, wie heißt eine zigarre mit dem umfang 20, der nur mit einem Blinkgeräusch quittiert wird.

Anatomie der Rückgabe

Die Fehlermeldung im Backend weist uns unter anderem darauf hin, dass der Alexa Service mit der Antwort unserer Lambdafunktion nichts anzufangen weiß. Zur Lösung dieses Problems wechseln wir in das Lambda-Backend, wo wir den Code der Funktion abermals anpassen und ihn nun durch die in Listing 1 zu sehende Version ersetzen.

exports.handler = (event, context, callback) => {
  var responseJson =  {
  version: "1.0",
  response: {
    outputSpeech:
     {
       type: "PlainText",
       text: "Lasset uns rauchen, denn es macht mehr Spaß als Fauchen!",
     },
    shouldEndSession: true
    },
    sessionAttributes: {}
  };
  callback(null,responseJson);
};

Wir arbeiten aus Platzgründen mit dem im Backend befindlichen Codeeditor. Auch wenn Amazon ihm in den letzten Jahren einige Features spendiert hat, kann sein Programmierkomfort in keiner Weise mit einer dedizierten IDE mithalten. Wer ernsthaft Alexa-Skills programmiert, sollte sich spätestens jetzt ansehen, wie er seine Wunsch-IDE mit dem Backend verbindet.

Der wichtigste Unterschied zum vorhergehenden Beispiel ist, dass wir nun ein Objekt vom Typ OutputSpeech zurückliefern. Neben dem Typ PlainText, der eine gewöhnliche sprachliche Antwort anliefert, müssen wir auch eigentlichen Text bereitstellen, den die Engine zu sprechen hat. Er kommt im Feld text unter. Speichern Sie den neuen Code im Lambda-Backend und kehren Sie in die Alexa Developer Console zurück. Nach Eingabe des Strings Software und Support test begrüßt uns unser Alexa-Skill mit einer neuen, sehr spaßigen Formulierung.

Auswertung von Parametern

Auch wenn das Zurückgeben gültiger Ergebnisse und die damit einhergehende Generierung von Sprachausgabe zu durchaus interessanten Ergebnissen führt, nutzen wir derzeit nur einen kleinen Teil der Möglichkeiten von Alexa. Ursprünglich hatten wir ja vor, einen Zigarrenskill zu realisieren. Dazu müssen wir die Funktion im Backend im ersten Schritt dazu befähigen, zwischen einer allgemeinen und einer auf einen Intent zurückzuführenden Aktivierung zu unterscheiden.

Im Interesse der Bequemlichkeit wollen wir die neue Version unseres Backends mit einer Funktion beginnen, die die von Alexa geforderte Struktur erzeugt, parametrisiert und zurückgeliefert. Platzieren Sie den Code dieser Funktion im Alexa-Lambda-Backend einfach über der eigentlichen Exportdeklaration (Listing 2).

function buildResponse(response) {
  return {
    version: '1.0',
    response: {
      outputSpeech: {
        type: 'PlainText',
        text: response,
      },
      shouldEndSession: true,
    },
    sessionAttributes: {},
  };
}

Im nächsten Schritt folgt der an sich bekannte Request Handler. Das Verarbeiten von Standardereignissen erfolgt auf die bekannte Art und Weise. Neu ist nur, dass wir uns nun auch einige Selektionen erlauben, um die angelieferten Daten aufzubrechen (Listing 3).

exports.handler = (event, context, callback) => {
  try {
    if (event.request.type === 'LaunchRequest') {
      callback(null, buildResponse('SUS-Zigarrenskill einsatzbereit!'));
    }
    else if (event.request.type === 'IntentRequest') {
      callback(null, buildResponse('Zigarrenrequest erkannt!'));

    }
    else {
      callback(null, buildResponse('SUS-Zigarrenskill hat unbekanntes Kommando erhalten!'));

    }
  } catch (e)
  {
    callback(null, buildResponse("Ein Fehler ist aufgetreten"));
  }
};

Neu sind im vorliegenden Code der Ereignistyp IntentRequest und das Standardergebnis. Ein IntentRequest ist dabei – Nomen est Omen – ein Request, der dann entsteht, wenn die Alexa Runtime auf einen vom Benutzer ausgelösten Intent reagiert. Speichern Sie die neue Version des Codes wie gewohnt im Lambda-Backend, und wechseln Sie danach in die Alexa-Entwicklerkonsole. Die Aktivierung des Ziels erfolgt abermals durch Eingeben von software und support test. Für das eigentliche Abfeuern des Intents benötigen wir nun aber einen nach dem Schema Alexa frage software und support test nach wie heißt eine zigarre mit dem umfang 20 aufgebauten String.

Alexa zeigt sich an dieser Stelle überraschend streng: Wer sich nicht an die in den Dokumenten beschriebene Anfragesyntax hält, wird mit der wenig aussagekräftigen Fehlermeldung <Audio only response> abgespeist. Zur Auswertung der eigentlichen Parameterdaten müssen wir das eingehende Event-Objekt in seine Einzelteile zerlegen. Dabei kommt der am Anfang des Artikels festgelegte Name des Slots zum Einsatz. Er beschreibt nun ein Objekt innerhalb von event.request.intent:

  else if (event.request.type === 'IntentRequest') {
var intent = event.request.intent;
var val = intent.slots.susumfang.value;
  callback(null, buildResponse('Zigarrenrequest erkannt! Sie suchen nach einer ' + val));
  }

Speichern Sie den Code wie gewohnt, und führen Sie einen weiteren Testlauf durch. Beachten Sie, dass bei textueller Eingabe Zahlen als Worte eingegeben werden müssen. Wer statt Alexa frage software und support test nach wie heisst eine zigarre mit dem umfang 20 das Folgende eingibt: Alexa frage software und support test nach wie heisst eine zigarre mit dem umfang zwanzig, wird mit einer leeren val-Variable belohnt.

Und jetzt grafisch

Auch wenn Alexa gerne als still spionierendes System dargestellt wird – der Gutteil der Alexa-Installationen verfügt über zumindest rudimentäre Möglichkeiten zur Ausgabe von Bildinformationen. Als nächste Aufgabe wollen wir unser kleines Programm deshalb um Informationen erweitern, die bei Verfügbarkeit eines Bildschirms dem Benutzer Zusatzinformationen liefern. Aus technischer Sicht ist diese Aufgabe einfach. Öffnen Sie die Funktion buildResponse, und erweitern Sie das Objekt response um ein zusätzliches Feld (Listing 4).

function buildResponse(response) {
  return {
    version: '1.0',
    response: {
      outputSpeech: {
        type: 'PlainText',
        text: response,
      },
      card: {
      type: "Simple",
      title: "SUS",
      content: response
      },
      shouldEndSession: true,
    },
    sessionAttributes: {},
  };
}

Während die in outputSpeech enthaltenen Informationen für die Sprachausgabe verantwortlich sind, kümmert sich das neu angelegte Feld card um Grafisches. Wenn Sie das Programm im vorliegenden Zustand abermals ausführen, sehen Sie das in Abbildung 7 gezeigte Resultat.

Abb. 7: Alexa kann nun auch Grafik!

Abb. 7: Alexa kann nun auch Grafik!

Zum Erzeugen eines verkaufsfertigen Skills müssen Sie an dieser Stelle noch etwas Logik implementieren, die angelieferten numerischen Werten verschiedener Zigarren Daten zuweist –eine Aufgabe, die wir aus Gesundheits- und Jugendschutzgründen nicht angehen wollen. Über vollständige Implementierungen würde sich der Autor aber sehr freuen.

Alexa in Bewegung

Amazon entwickelt die Alexa-Plattform permanent weiter: Es vergeht kaum eine Woche, in der nicht ein Newsletter mit diversen Neuerungen an die Entwicklergemeinde gesendet wird. Um Ihnen die Übersichtlichkeit zu bewahren, möchten wir hier einige besonders interessante neue Funktionen vorstellen. Schon hier sei angemerkt, dass einige dieser Features in der Betaphase sind. Das bedeutet, dass sie – wie beispielsweise die A/B-Test-Funktion – schon einmal ohne Vorwarnung verschwinden können.

Lustiges Feature Nummer eins sind Alexa-gehostete Skills. Es handelt sich dabei um einen Skill, dessen Komponenten komplett in der Developer Console leben. Der in diesem Artikel notwendige Tanz zwischen den verschiedenen Amazon-Portalen entfällt bei dieser Art der Programmierung ersatzlos. Der Nachteil dieser Vorgehensweise ist, dass sie an die von Amazon bereitgestellten Ressourcen gebunden sind und deshalb auf Flexibilität verzichten müssen.

Interessante Funktion Numero zwei sind komplexe Interaktionsmodelle. Dahinter versteckt sich der Gedanke, dass der Benutzer mit Alexa in einen Dialog treten muss. So könnten beispielsweise die Werte von Slots überprüft werden, um katastrophale Fehlerkennungen (Stichwort: kaufe 20 oder 200 Zigarren) zu vermeiden. Die Anzahl der neuen Alexa-Funktionen ist erschlagend, der Platz beschränkt. Zu guter Letzt sei aber noch auf die Alexa Presentation Language (APL) hingewiesen. Es handelt sich dabei um eine Beschreibungssprache, in der Sie die weiter oben angesprochenen Karten auf eine umfangreichere und vor allem Data-Binding-fähige Art und Weise beschreiben. Der Lohn dieser Mühen ist wesentlich reduzierter Wartungsaufwand – ein Tradeoff, der sich in den meisten Fällen lohnt.

Fazit

Auch wenn Alexa in konservativen Teilen der USA nur leidlich populär ist: der kommerzielle Erfolg des Produkts kennt kaum Grenzen. Unser hier gezeigter Zigarrenskill könnte einem Anbieter von Rauchwaren immense Zusatzumsätze bringen – denn nach der Beantwortung der Frage böte sich z. B. die Möglichkeit an, Produkte zu verkaufen.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -