Alexa-App mit AVS programmieren

24. April 2018

"Alexa, stell bitte meinen Wecker auf 7:30 Uhr!".

Sprachassistenten sind in kurzer Zeit für viele Nutzer zu einer Alltagserscheinung geworden. Sofern sie uns richtig verstehen, wählen sie die Musik aus, sagen uns, wie das Wetter wird und vieles mehr. Glücklicherweise stellt beispielsweise Amazon seinen Sprachassistenten als Open Source zur Verfügung, so dass man als Android-Entwickler viele Möglichkeiten zur individuellen Programmierung hat.

Alexa mobil – immer an deiner Seite

Ich persönlich habe einen Amazon Echo Dot zuhause, wollte aber auch unterwegs die Funktionalität meiner personalisierten Alexa nutzen können. Entsprechend habe ich mich daran gemacht, eine eigene App zu entwickeln. Es gibt zwar schon fertige Versionen zum Download – aber für uns als App-Agentur ist es sehr interessant, hinter die Fassade zu schauen, um in Zukunft Schnittstellen zu Sprachassistenten in unsere Apps integrieren zu können, wenn der Kunde das wünscht. Mehr noch, wenn man nicht nur den von Amazon auf Amazon Developer bereitgestellten Amazon Voice Service (AVS) nutzen will, sondern darauf aufbauend neue Alexa Skills, die man nach eigenen Vorstellungen programmiert hat, mit seiner App verbinden will, lohnt sich der Zugriff auf den eigens optimierten Quellcode allemal. So kann man sich seine passgenau programmierte Alexa erstellen, die nicht nur mobil auf dem Smartphone, sondern wenn man will auch im Auto oder anderweitig verfügbar ist.

Libraries zusammenfassen und updaten

Als Ausgangspunkt diente mir ein Github-Projekt von Will Blaschko.
https://github.com/willblaschko/AlexaAndroid

Der von ihm geschriebene Code ist super hilfreich, denn Amazon stellt bisher noch keinen Quellcode zur Verfügung, um den AVS in eine Android- oder iOS-App zu integrieren. Um seinen Code meinen Zwecken anzupassen, musste ich zunächst drei einzelnen Module zusammenfassen und daraufhin die Dependencies updaten. Das war mit die größte Herausforderung. Die wichtigsten Learnings werde ich daher kurz erläutern. Für diejenigen, die das nicht interessiert, und die lieber gleich auf meinem Projekt aufbauen möchten, geht es hier weiter.

Mein Ziel war es, das Projekt insgesamt möglichst einfach zu halten, um es für weitere Entwickler leicht zugänglich zu machen. Ursprünglich enthielt es drei Module, die ich zu einer Library zusammengefasst habe. Die Schwierigkeit hierbei war, dass die drei Module teilweise die gleichen Dependencies in unterschiedlichen Versionen enthielten. Um dies zu lösen, wurden die Dependencies allesamt in einer build.gradle festgehalten und die restlichen Dependencies dann nach längerer Suche in den einzelnen Modulen lokal gelöscht.

Ein besonderes Rätsel war, warum sich der Login-Screen sich nicht in der WebView aufrufen lies. In Will Blaschko’s Android App im Play Store funktionierte alles - aber nicht auf seinem GitHub-Projekt. Erst längeres Debugging seiner Webview ergab, dass der Link zum Login völlig veraltet und das Projekt anscheinend seit langem nicht upgedatet worden war. {:affesiehtnichts:} Nach geändertem Link funktionierte der Login einwandfrei, sowohl in einer WebView, als auch über einen externen Browser.

Login-Screen erstellen

Um die App schlank zu halten, übernahm ich aus Will Blaschkos Projekt nur die Push-to-Talk-Funktionalität, da sie mir nach wie vor am nützlichsten erscheint. Zusätzlich integrierte ich die neue WorkFlowActivity, indem ich sie im Manifest eingefügt habe. Mit der WorkFlowActivity erlaubt Amazon es, einen eigenen Login-Screen zu bauen, so dass man auch ohne Echo Dot tatsächlich Zugriff auf seine eigene Alexa hat. Der Login öffnet sich dann wahlweise per Webview oder im Browser des Smartphones.


<activity
    android:name="com.amazon.identity.auth.device.workflow.Workflowactivity"
    android:allowTaskReparenting="true"
    android:launchMode="singleTask"
    android:theme="@android:style/Theme.NoDisplay">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data 
            android:host="${applicationID}"
            android:scheme="amzn" />
    </intent-filter>
</activity>

Schritt-für-Schritt-Tutorial

Eine detaillierte Anleitung, wie ihr mit Android-Studio eure portable Alexa-App schreibt, einen eigenen Login-Screen baut oder auch gleich die von mir aktualisierten Libraries nutzt, findet ihr in meinem GitHub-Account als Best Practice.

Eine App – viele Möglichkeiten

Mit dem AVS lassen sich vor allem die Grundfunktionen des Handys steuern: Timer stellen, To-Dos und Einkaufslisten sind damit dank Sprachsteuerung einfach und unkompliziert ausführbar. Aber das ist erst der Anfang! Mit einer Erweiterung durch das Alexa Skills Kit gelingt es zum Beispiel auch, Alexa dazu zu bringen, einem je nach Wetter die passende Kleidung zu empfehlen, sie bestimmte Informationen auswendig lernen zu lassen und vieles mehr. Die Grenzen setzt (fast) nur die eigene Fantasie. Mit genug Kreativität lässt sich der Funktionsumfang der mobilen Alexa also deutlich erweitern.

Also, Alexa: "Setz die Entwicklung eines Alexa-Skills auf meine To-Do Liste!"

Grafik von Amazon Developer: https://developer.amazon.com/de/alexa-voice-service/dev-kits