Actions on Google Tutorial: Apps für Google Assistant selbst schreiben

Gepostet am: 22. Februar 2018

Voice Assistants wie Google Home und Amazons Alexa unterstützen uns zu Hause nicht mehr nur bei Standardaufgaben wie der Wetterabfrage oder dem Stellen eines Timers. Mit der Möglichkeit, eigene Apps, so genannte Actions on Google bzw. Skills, für die Plattformen zu schreiben, erschließen auch immer mehr Drittanbieter die Möglichkeiten, ihre Dienste über Sprachassistenten anzubieten.

Als innovatives IT-Projekthaus entwickeln und betreuen wir bereits für Kunden Lösungen für diese neuen Plattformen. In diesem Tutorial soll daher gezeigt werden, wie man für die Actions-on-Google-Plattform eine eigene Action umsetzt und welche Möglichkeiten bzw. Limitierungen es noch gibt.

Wir werden in diesem Beitrag eine Action on Google erstellen und deployen, die uns ein paar Witze erzählen kann.

Die App konnte im App Store nicht gefunden werden. 🙁
Google Assistant
Preis: Kostenlos

Unsere Action wird auf allen Assistant-fähigen Geräten verwendbar sein – sprich Google Home und Smartphone. Ob iPhone oder Android-Gerät ist dabei egal, denn der Assistant hat als App schon längst seinen Weg auf Apples mobile Plattform gefunden. Während wir bei den Home Geräten von Google aktuell nur die Möglichkeit der Sprach-Bedienung haben, können wir dem Nutzer auf dem Smartphone über die Assistant App auch auch visuelle Informationen liefern. Zum Beispiel mit den bekannten Cards oder auch Carousel Ansichten.

 

Was brauchen wir?

  • Google Account
  • Editor
  • Rudimentäre Javascript/Node.js-Kenntnisse
  • Terminal

Alles vorhanden? Wunderbar!

Wie funktionieren eigentlich Actions on Google?

 

Die Entwicklung unserer Action ist in 3 Teile gegliedert:

  • DialogFlow – verarbeitet die Benutzereingaben und führt unsere (noch zu definierenden) Aktionen aus
  • Actions on Google – Integration zwischen DialogFlow und dem Assistant. DialogFlow verfügbar allerdings auch über weitere Integrationen (u.a. Facebook Messenger und Telegram, siehe hier).
  • Cloud Functions for Firebase – hier wird die Logik unserer Assistant-Action abgebildet.

Die ersten beiden Teile sind komplett im Browser einstell- und konfigurierbar. Für unsere Function ist dann etwas Javascript notwendig.

Projekte erstellen

DialogFlow & Firebase Function

Wir fangen damit an, in der DialogFlow Console ein neues Projekt anzulegen.

Der Name spielt hierbei keine Rolle, wir wählen als Sprache die Deutsche Sprache aus und lassen den Rest so wie es ist. Das passt für unseren Fall.

Mit dem Erstellen des Projekts in DialogFlow wird uns auch automatisch ein Firebase-Projekt erstellt. 2 Fliegen mit einer Klappe geschlagen!

Actions on Google

Um nun noch an unser Actions-on-Google-Projekt zu kommen, werden wir  in DialogFlow im Bereich Integrations die Google Assistant Integration auswählen, lassen auch hier alle Einstellungen, wie sie sind, und drücken auf den Button Test. Dadurch wird im Hintergrund unser Projekt auch hier angelegt und wir können sogar direkt im Test-Simulator unsere Action testen. Wobei testen vielleicht etwas viel gesagt ist: Unsere Action antwortet uns zumindest. Zum Test-Simulator kommen wir aber später noch einmal zurück.

 ➡️ 

Vom Simulator aus gehen wir innerhalb unserer Action noch einmal in die Overview-Ansicht und stellen dort ein paar Sachen, zum Beispiel wie unsere Action aufgerufen wird oder wie sie heißt. Auch im Bereich der App-Informationen müssen wir noch einige Informationen hinterlegen, damit unsere Action auch auf dem Smartphone verfügbar ist (siehe Screenshot).

Die Eingaben sollten selbsterklärend sein. Für passende – zumindest von der Größe her – Bilder könnt ihr auf Lorem Pixel zugreifen.

Nachdem wir unsere Änderungen gespeichert und auf Test Draft geklickt haben, können wir unsere Action auch sofort auf dem Smartphone nutzen. Dort müssen wir lediglich darauf achten, dass wir den selben Google Account wie bei der Einrichtung verwenden. Ansonsten müssen wir die App für weitere Accounts freigeben (mit weiteren Google Accounts muss einmalig auf Test Draft geklickt werden, damit die Action auch auf dem Smartphone für diesen User verfügbar ist).

Wir haben nun unsere erste nutzbare Action erstellt, die auf den Welcome-Intent entsprechend reagiert. Allerdings ist das ja noch etwas langweilig.

Der eigentliche Spaß

Wie eingangs erwähnt wollen wir erreichen, dass uns unsere Assistant Action Witze erzählt. Bisher sagt sie uns aber lediglich Hallo und teilt uns dann mit, dass sie irgendetwas nicht verstanden hat.

Intents

Zurück in DialogFlow widmen wir uns nun den Intents. Wie in der App-Entwicklung ist ein Intent verantwortlich für das Mapping zwischen der Benutzer-Eingaben und der Aktion, die daraufhin ausgeführt werden soll. Klingt kompliziert?

Jedes DialogFlow-Projekt kommt von Haus aus mit 2 Intents daher, einem Willkommen-Intent und einem Fallback-Intent. Der Willkommen-Intent wird aufgerufen, sobald die Action gestartet wurde (nach Mit Witze Test sprechen z.B). Der Fallback-Intent reagiert, wenn Benutzereingaben nicht gematcht werden können und DialogFlow nicht weiß, was es damit anfangen soll. Durch die definierten Antworten wird (im Moment) festgelegt, wie unsere Action dem Nutzer antwortet.

Wir werden, was die Intents angeht, hier erstmal einen Cut machen und uns etwas dem Code widmen. Denn wir wollen erreichen, dass unsere Firebase Function für die Antworten zuständig ist.

Firebase Function

Ich habe die Firebase Function, die wir benötigen, hier schon mal hinterlegt. Der Code ist mit seinen knapp 40 Zeilen sehr überschaubar. Was wir damit erledigen werden:

  • Der Benutzer startet die Action und wird in den welcomeIntent geführt, in dem ein Witz ausgegeben wird und der Benutzer wählen kann, ob er einen weiteren hören möchte oder nicht.
  • Wenn der Benutzer dies bejaht, wird ein weiterer ausgegeben (usw.).
  • Wenn der Benutzer keinen weiteren Witz hören will, wird mit einem .tell die Unterhaltung beendet.

Um die Firebase Function nun von Github in euer Firebase-Projekt zu deployen, sind folgende Schritte notwendig:

  • git clone git@github.com:inovex/Sample-Assistant-Action.git
  • Firebase CLI installieren  npm install -g firebase-tools
  • cd Sample-Assistant-Action
  • firebase login
  • firebase init
    • Den Punkt Functions mit der Leertaste auswählen, mit Enter bestätigen
    • Das entsprechende Projekt auswählen
    • Als Sprache Javascript auswählen
    • functions/package.json nicht überschreiben
    • functions/index.js nicht überschreiben
    • npm-Abhängigkeiten installieren
  • Anschließend wird die Function mit einem einfachen firebase deploy --only functions deployt.

Eurer Firebase Projekt, das ihr in der Firebase-Konsole auswählt, sollte nun im Bereich Functions wie folgt aussehen:

Die URL der Function kopieren wir uns schon mal.

Fulfillment

Was wir nun nämlich machen werden, ist DialogFlow mit unserer Firebase Function zu verheiraten. Das ist relativ simpel und kann mit wenigen Klicks in der DialogFlow Console erledigt werden.

Im Menüreiter Fulfillment aktivieren wir den Webhook, tragen unsere URL ein und speichern das Ganze.

Dadurch teilen wir DialogFlow mit, dass wir in der Lage sind, eingehende Requests über einen Web-Service abzufrühstücken.

Welcome Intent

Im Welcome Intent gibt es nun einen neuen Bereich – nämlich Fulfillment. Hier müssen wir die Option Use Webhook aktivieren. Die 2. Option bleibt unangetastet.

Bleiben wir beim Welcome Intent. Hier muss sichergestellt werden, dass im Bereich Action  input.welcome eingetragen ist. Damit weiß DialogFlow, welchen Intent es in unserem Code aufrufen soll ( actionMap.set('input.welcome', welcomeIntent)).

Nun sind auch die Antworten, die in diesem Intent definiert sind, nicht mehr wichtig, da wir die Antworten ab sofort aus unserem Code heraus geben.

Das Ganze können wir nun auch schon im Actions Simulator oder auf dem Smartphone/Google Home ausprobieren. Allerdings fehlt hier noch etwas…

Another Joke Intent

Wir benötigen einen 2. Intent. Im Code haben wir diesen zwar bereits definiert, in DialogFlow fehlt er aber noch. Wir wollen auf ein Ja, Nein, Nö, Jo als Benutzeingabe reagieren.

Yes No Entity

Bevor wir den 2. Intent anlegen, werden wir eine Entity anlegen. Eine Entity repräsentiert verschiedene Benutzereingaben. Wir können im Intent auch vordefinierte Entities nutzen – allerdings gibt es bei Google Assistant, anders als bei Alexa, keine vordefinierte Yes/No Entity; die müssen wir uns selbst anlegen.

Wir legen also im Bereich Entities folgende Entity an:

Was wir hiermit definieren, ist ein Mapping zwischen möglichen Benutzereingaben (ja, jo, ja bitte, gerne, klar) und einer Value (yes bzw. no).

Wir speichern das Ganze und legen nun unseren 2. Intent an.

Intent

Unser Intent wird folgendermaßen aussehen:

Wir haben im User says Bereich 2 Eingaben definiert, ja und nein. DialogFlow hat automatisch erkannt, dass es sich hierbei um eine Entity handeln könnte. Dem entsprechend müssen wir auch keine weiteren Aliase mehr angeben.

Als Action, die ausgeführt werden soll, wird, wie im Code schon vorgesehen input.anotherjoke eingetragen. Denn wir wollen ja entsprechend aufgerufen werden. Wir geben zudem an, dass wir unbedingt die Yes/No Entity brauchen und haben auch ein Prompt definiert, falls eine unvorhergesehene Eingabe erfolgt. DialogFlow wird also beim User nachfragen (Ja oder nein?) Damit ist sichergestellt, dass wir immer mit der jeweiligen Antwort aufgerufen werden.

Zu guter Letzt sagen wir auch für diesen Intent, dass wir einen Webhook verwenden wollen.

Ergebnis

Et voilà! Das Ganze sollte nun so aussehen:

Fazit und Einschätzung

Nachdem wir bei inovex nun bereits einige Projekte im Assistant- und Alexa Umfeld umgesetzt haben, kann ich ohne schlechtes Gewissen sagen: es macht Spaß! Die ersten Hürden mögen etwas schwierig sein (Stichwort OAuth Account Linking, wenn man für seine Action einen Login benötigt), aber hat man erstmal verstanden, wie alles zusammenspielt, kann man damit durchaus Freude haben.

Eine Meinung, die wir auch in unserem Podcast geteilt haben, ist zwar, dass das ganze noch in den Kinderschuhen steckt, wir aber jetzt schon, durch die Erfahrungen mit der Entwicklung, die Apps über die Jahre erlebt haben, eine grobe Vorstellung haben können, wohin uns das ganze führen wird. Was jetzt vielleicht noch als Brauchen wir das wirklich? abgetan wird, könnte schon bald Pflicht sein.

Um dem Ganzen noch etwas Seitenhieb-Charakter zu verleihen: Ich persönlich finde, dass es wesentlich einfacher ist, eine Google-Assistant-Action zu erstellen, als einen Alexa Skill. Das liegt hauptsächlich daran, dass sich Google sehr viel Mühe damit gegeben hat, wie das Ganze konfiguriert, erstellt und eingerichtet wird. Auch der Test-Simulator ist sehr brauchbar und bietet die Möglichkeit, sowohl einen Test auf einem „Smartphone“ als auch auf einem „Home-Gerät“ zu simulieren. Überdies lohnt es sich, den Trainingsbereich in DialogFlow mal anzusehen. Hier erscheinen User-Eingaben, die nicht gematcht werden konnten. Mit einfachen Klicks kann man die Eingaben aber auf Wunsch mappen und so sein Modell verbessern.

Was die Entdeckungsmöglichkeit neuer Actions angeht, so sollte Google allerdings noch etwas nachbessern. Bislang ist es relativ kompliziert neue Actions zu entdecken, auch wenn mittlerweile vom Assistant vereinzelt Actions auch vorgeschlagen werden. Sucht man zum Beispiel nach Rezepten, so kann es vorkommen, dass Google einem vorschlägt, doch mal die Action von Anbieter xyz auszuprobieren.

Join us!

Überzeugt? Du möchtest selbst Actions on Google und Alexa Skills für den Produktveinsatz entwickeln und dabei in einem engagierten und inspirierenden Umfeld arbeiten? Dann bewirb dich bei uns als Software-Entwickler/in!

2018-02-22T09:57:41+00:00