Knapp zwei Monate nach meinem letzten Post (Gadget Review: Amazon Echo Dot) bin ich endlich dazu gekommen was eigenes für Alexa zu programmieren.

Als erstes habe ich mich versucht an einem Datenbank-Abfrage-Skill. Alexa sollte auf Anfrage einen Wert aus einer Datenbank vorlesen, die die Anzahl von Appstarts protokolliert. Da hier eine interne Datenbank abgefragt wird, sollte dies kein öffentlicher Skill werden. Wer sich aber dafür interessiert wie es funktioniert, dem sei dieser Artikel ans Herz gelegt -> Chat bots and how to build one on Alexa

In der Zwischenzeit habe ich jedoch drei weitere Skills geschrieben, die sich derzeit im Certification Prozess bei Amazon befinden und danach auch hoffentlich öffentlich verfügbar sind. Anstoß dafür war der Workshop "Hello Alexa - Cologne" von Amazon. Im wesentlichen sind alle Skills im Rahmen dieses 2-Tage Workshops bzw. kurz danach entstanden, daher sind sie nicht sehr komplex, bieten aber einen einfachen Einstieg in die Alexa-Programmierung. Die gewonnen Erkenntnisse möchte ich hier gerne weitergeben.

Prinzipiell sollte man am Anfang mit einem der vorgegebenen Templates beginnen. Dazu eignet sich als erstes der Fact-Skill (Github). Ich habe dieses Template so abgewandelt, dass Alexa zufällige Fakten zu Schallplatten ausgibt.

Vorgehensweise:

  1. Wenn noch nicht geschehen, im Amazon Developer Portal registrieren.
  2. Einen Account bei Amazon AWS anlegen. Hier wird leider eine Kreditkarte vorausgesetzt, da Amazon mit diesem Service Rechenzeit und Cloud-Speicher verkauft. Alle Alexa-Abfragen fallen aber unter das kostenlose Kontingent - dies wurde uns auch auf dem Workshop nochmals versichert, sodass keine Kosten entstehen sollten.
  3. Nach erfolgreicher Registrierung im AWS Portal nach "Lambda" suchen, dies ist die Computing-Platform von Amazon, die Eventgesteuert Programmcode ausführen kann. Ein Event ist in diesem Fall eine Anfrage von Alexa. Anschließend auf "Create a lambda function" klicken und dann unter den Blueprints im Filter-Feld nach "factskill" suchen und dieses Template auswählen.
  4. In das gestrichelte Viereck vor dem Lambda-Symbol klicken und im Popup Menü "Alexa Skills Kit" auswählen.
  5. Der neuen Funktion einen Namen geben. Darunter sieht man bereits den Template-Code des Fact-Skills. Dieser kann später nach den eigenen Wünschen modifiziert werden
  6. Alles andere zunächst so lassen wie es ist, außer den Abschnitt "Role". Hier einmal "create a custom role" auswählen und im öffnenden Tab unten rechts mit "allow" bestätigen.
  7. Unter role im vorigen lambda-function Tab dann unter "choose an existing role" die neu erstellte Rolle "lambda_basic_execution" auswählen.
  8. Mit "next" unten bestätigen und in auf der nächsten Seite "create function" auswählen.
  9. Die Fact-Skill Logik wurde nun bereits erfolgreich erstellt. Nun ist es wichtig sich die ARN Nummer zu kopieren und zwischenzuspeichern. Diese steht in der Funktionsseite oben rechts und sieht ähnlich aus wie ARN - arn:aws:lambda:eu-west-1:10239480305:function:test
  10. Außerdem muss direkt über der ARN und rechts neben dem Kontonamen die Region auf EU Ireland umgestellt werden, sonst funktioniert es nicht! Im nächsten schritt geht es in der Amazon Developer Console weiter. Hier wird jetzt der Skill registriert und das Sprach-Interface definiert.
  11. Wechsele nun zur Amazon Developer Console aus Schritt 1. Hier in der Menüleiste auf "ALEXA" klicken und dann unter Alexa Skills Kit auf "Get started".
  12. Oben rechts "Add a new skill" auswählen.
  13. Im Formular: Skill Type auf Custom Interaction Model belassen; Language auf "German" umstellen; Skill-Name ausdenken. Invocation Name, also der Aufruf mit dem der neue Skill gestartet wird, sollte möglichst der gleiche wie der Skill-Name sein, da dies sonst verwirrend für Nutzer ist. Allgemein empfiehlt es sich, dass der Name aus mindestens 2 Wörtern besteht, da dies einfacher für Alexa zu interpretieren ist. Audio-Player bleibt ebenfalls auf No. Mit "next" gehts weiter.
  14. Im Abschnitt Interaction Model beginnt der spannende Teil. Hier wird festgelegt, wie Alexa die Spracheingaben verarbeitet und auf welche Wörter sie hört. Kopiere hier das folgende JSON-Schema rein:
    {
    "intents": [
    {
      "intent": "GetNewFactIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    },
    {
      "intent": "AMAZON.StopIntent"
    },
    {
      "intent": "AMAZON.CancelIntent"
    }
    ]
    }

Die Intents sind die Auslöser für Funktionen, die in der Skill-Logik (bei uns auf AWS in der lambda-Funktion lagernd) hinterlegt sind. Da wir nur willkürlich Fakten ausgeben wollen brauchen wir nur einen Intent, den "GetNewFactIntent". Die anderen drei Intents mit "AMAZON." Prefix sind Standard-Intents die eigentlich jeder Skill haben sollte, um Nutzern die Möglichkeit zu geben die Ausführung abzubrechen oder Hilfe zu bekommen.

  1. Weiter gehts bei den sample utterances (Beispieläußerungen). Dies sind Phrasen, die Nutzer sagen können, um mit dem Skill zu interagieren. In unserem Fall könnte hier drin stehen:
    GetNewFactIntent einen Fakt
    GetNewFactIntent gib mir informationen
    GetNewFactIntent erzähl mir einen Fakt
    GetNewFactIntent erzähl mir was
    GetNewFactIntent erzähl mir wissenswertes

    Je mehr Beispiele dort aufgelistet sind, die Nutzer sagen könnten, desto besser versteht Alexa einen.

  2. Mit "Next" kommt man zum nächsten Schritt "Configuration". Hier muss AWS Lambda ARN ausgewählt werden, sowie ein häkchen bei "Europe" gesetzt werden. In das Textfeld muss dann die ARN-Nummer aus Schritt 9 hineinkopiert werden, damit der Skill mit seiner Funktion auf dem AWS-Server verknüpft wird.
  3. Account-Linking bleibt auf nein. Mit Next geht es bereits zum Testing. Mit dem Voice Simulator kann Alexas Stimme getestet werden, um zu prüfen wie sie bestimmte Wörter ausspricht. Unter dem Punkt Service-Simulator kann jedoch der tatsächliche Skill getestet werden. Hier kann man eine der vorher definierten uterrances ausprobieren und den den Textfeldern sehen was der Alexa Voice Service übermittelt. Unter der antwort "Service Response" kann man sich mit "abspielen" auch die gesprochene Ausgabe anhören. Soweit sollte nun bereits alles funktionieren. Für die private Nutzung des Skills muss man nichts weiter tun. Den Skill in dieser Form sollte man auch nicht publishen, da er nur Demo-Inhalt enthält. Daher können die nächsten Schritte im Developer Portal einfach übersprungen werden!

Nun kann man den Skill für sich abwandeln und mit eigenen Fakten über ein beliebiges Thema füttern. Diese Fakten trägt man einfach in der AWS Lambda funktion ein. Ich habe beispielsweise die Weltraumfakten ersetzt durch Fakten zu Schallplatten:

const languageStrings = {

    'de-DE': {
        translation: {
            FACTS: [
                '1887, vor 125 Jahren, meldete der Deutsche Emil Berliner das Patent für das Grammophon an.',
                'Die Spieldauer einer Langspielplatte (LP) liegt bei 20-30 Minuten.',
                'Erst 1948 erschien die erste Vinyl-Schallplatte.',
                'Es gibt einen hörbaren Unterschied zwischen farbigem und schwarzem Vinyl.',
                'Während CDs von innen nach außen gelesen werden, verhält es sich bei Schallplatten genau anders herum.',
                'Die Plattennadeln wurden meistens aus Diamant oder Saphir hergestellt.',
                '1984 wurden in Deutschland 71,1 Millionen Schallplatten verkauft. 2002 waren es nur noch 0,5 Millionen. ',
                'Die meistverkaufteste LP ist "Thriller" von Michael Jackson mit 108 Millionen verkauften Exemplaren.',
                'Schellack, das aus den Ausscheidungen von Läusen gewonnen wird, wurde früher als Grundmaterial verwendet.',
                'Das Material der ersten "Grammophonplatten" war Zink. Es folgten Platten aus Kupfer, Zelluloid und Hartgummi.',
            ],
            SKILL_NAME: 'Schallplattenwissen auf Deutsch',
            GET_FACT_MESSAGE: 'Hier sind deine Fakten: ',
            HELP_MESSAGE: 'Du kannst sagen, „Nenne mir einen Fakt über Schallplatten“, oder du kannst „Beenden“ sagen... Wie kann ich dir helfen?',
            HELP_REPROMPT: 'Wie kann ich dir helfen?',
            STOP_MESSAGE: 'Auf Wiedersehen!',
        },
    },
};

Solange man nicht plant den Skill auch auf englisch zu veröffentlichen, so kann man die beiden anderen language-strings einfach löschen. Anschließend speichert man die Änderungen et voilá der Skill ist einsatzbereit und spuckt nun die neuen Fakten aus.

Zum testen des Skills kann man nun die Test-Seite des Skills im Developer Portal nutzen. Allerdings nur mit Texteingabe. Wer den skill richtig mit Alexa Sprach Ein und Ausgabe testen möchte und kein Echo oder Echo-Dot besitzt hat mehrere Möglichkeiten. Als Web-Tool bietet sich Echosim an. Hier einfach mit dem Amazon Account einloggen und schon ist der eigene Skill testbereit. Ansonsten gibt es für macOS, iOS oder Android User die Möglichkeit die App "Reverb" herunterzuladen. Wer jedoch ein Echo besitzt der kann Alexa einfach direkt ansprechen - der Skill ist automatisch für den eigenen Account aktiviert.

Tipp: Wer bis Ende März noch einen Skill raushaut, kann einen Alexa Hoodie ergattern ;-) Dabei ist es egal wie komplex dieser skill ist, es reicht also auch der abgewandelte Fact-Skill... Weitere Infos: alexa-developer-skill-promotion

Wer mit etwas fortgeschritteneren Skills weitermachen möchte, dem empfehle ich das Alexa Skill Building Cookbook von Rob McCauley!