IPC 2017 - Alexa Skills für Amazon Echo mit PHP entwickeln
-
Upload
ralf-eggert -
Category
Technology
-
view
105 -
download
2
Transcript of IPC 2017 - Alexa Skills für Amazon Echo mit PHP entwickeln
Alexa Skills für Amazon EchoAlexa Skills für Amazon Echomit PHP entwickelnmit PHP entwickeln
Ralf EggertRalf EggertCEO Travello GmbH, ZF Trainer, Autor, Coach,CEO Travello GmbH, ZF Trainer, Autor, Coach,
PHP Entwickler & Alexa Skill EntwicklerPHP Entwickler & Alexa Skill Entwickler
Drei Fragen!Drei Fragen!
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 44 von von 6060
AgendaAgenda
Amazon Alexa Grundlagen
Skill vorbereiten
Warum PHP?
Skill Code implementieren
Meine Erkenntnisse
Amazon Alexa GrundlagenAmazon Alexa Grundlagen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 66 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 77 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Voice Command
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 88 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Voice Command
Voice Request
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 99 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Voice Command
Voice Request
JSON Request
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1010 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Voice Command
Voice Request
JSON Request
JSON Response
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1111 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Text Response
Voice Command
Voice Request
JSON Request
JSON Response
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1212 von von 6060
Wie funktioniert ein Alexa Request?Wie funktioniert ein Alexa Request?
AWSLambdaFunction
Alexa Voice Service
Text Response
Voice Response
Card Response
Voice Command
Voice Request
JSON Request
JSON Response
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1313 von von 6060
Alternativer RequestAlternativer Request
HTTPSEndpoint
Server
Alexa Voice Service
Text Response
Voice Response
Card Response
Voice Command
Voice Request
JSON Request
JSON Response
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1414 von von 6060
Alexa Voice Service (AVS)Alexa Voice Service (AVS)
Alexa Voice Service
AutomaticSpeech
Recognition(ASR)
NaturalLanguage
Understanding(NLU)
TextTo
Speech(TTS)
VoiceCommandMapping
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1515 von von 6060
Alexa Skills Kit (ASK)Alexa Skills Kit (ASK)
Alexa Skills Kit
Interaction-Model /Skill Builder
Configuration
Publishing /Privacy
TestService Simulator
Beta Test
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1616 von von 6060
ASK ÜberblickASK Überblick
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1717 von von 6060
Alexa Skill BuilderAlexa Skill Builder
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1818 von von 6060
AWS Lambda FunctionsAWS Lambda Functions
Warum PHP?Warum PHP?
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2020 von von 6060
Mögliche LösungsansätzeMögliche Lösungsansätze
PHP für AWS kompilieren
Unterstützte Runtime Engine für AWS einsetzen
Eigenen HTTPS Endpoint Server einsetzen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2121 von von 6060
Unterstützte Runtime Engine?Unterstützte Runtime Engine?
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2222 von von 6060
PHP für AWS Lambda kompilieren?PHP für AWS Lambda kompilieren?
https://goo.gl/N9VVvb
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2323 von von 6060
Eigener HTTPS Endpoint Server?Eigener HTTPS Endpoint Server?
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2424 von von 6060
Lösung gefundenLösung gefunden
PHP für AWS kompilieren
Unterstützte Runtime Engine für AWS einsetzen
Eigenen HTTPS Endpoint Server einsetzen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2525 von von 6060
Nachteile eigener HTTPS EndpointNachteile eigener HTTPS Endpoint
Einige Tools arbeiten nur mit Lambda (API, CLI)
Eigene Library für Alexa aufbauen
Server Administration
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2626 von von 6060
Vorteile eigener HTTPS EndpointVorteile eigener HTTPS Endpoint
Jede gewünschte Software einsetzbar
Vollständige Kontrolle über die Serverumgebung
Keine Datenschutzbedenken (weiche Bedenken)
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2727 von von 6060
Open-source PHP LibraryOpen-source PHP Library
https://github.com/travello-gmbh/
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2828 von von 6060
Mein aktueller Tech StackMein aktueller Tech Stack
Skill vorbereitenSkill vorbereiten
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3030 von von 6060
DemoDemo
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3131 von von 6060
Beispieldialoge erstellenBeispieldialoge erstellen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3232 von von 6060
Beispieldialog IBeispieldialog I
Alexa, starte Mein Zoo!
Willkommen in deinem Zoo.
Nenne mir ein Tier aus meinem Zoo!
Ein Elefant lebt in deinem Zoo.
Danke Alexa.
Bitte!
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3333 von von 6060
Beispieldialog IIBeispieldialog II
Alexa, starte Mein Zoo!
Willkommen in deinem Zoo.
Wie viele Tiere leben in meinem Zoo?
In deinem Zoo leben 42 Tiere!
Danke Alexa.
Bitte!
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3434 von von 6060
Flussdiagramme erstellenFlussdiagramme erstellen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3535 von von 6060
FlussdiagrammFlussdiagramm
Willkommen indeinem Zoo.
Starte Mein Zoo
Nenne mir ein Tieraus meinem Zoo!
In deinem Zooleben 42 Tiere!
»nenne« »anzahl«
»nenne« »anzahl«
Bitte!
»danke« »danke«
»danke«
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3636 von von 6060
Alexa Skills Kit konfigurierenAlexa Skills Kit konfigurieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3737 von von 6060
Eigene Slot Types erstellenEigene Slot Types erstellen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3838 von von 6060
Eigene Intents erstellenEigene Intents erstellen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3939 von von 6060
HTTPS Endpoint konfigurierenHTTPS Endpoint konfigurieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4040 von von 6060
SSL Zertifikat konfigurierenSSL Zertifikat konfigurieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4141 von von 6060
HTTPS Endpoint testenHTTPS Endpoint testen
Skill Code implementierenSkill Code implementieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4343 von von 6060
Beispielanwendung installierenBeispielanwendung installieren
$ git clone https://github.com/travello-gmbh/example-zoo-skill
$ cd example-zoo-skill
$ composer install
$ sudo chmod -R 777 data/cache/
// Virtual Host für http://example-zoo-skill einrichte
// mit dem Pfad example-zoo-skill/html/ als Doc Root
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4444 von von 6060
Beispielanwendung testenBeispielanwendung testen
/data/postman/collection.json
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4545 von von 6060
Textdatei aktualisierenTextdatei aktualisieren
return [ 'launchTitle' => 'Willkommen', 'launchMessage' => 'Willkommen in deinem Zoo', 'repromptMessage' => 'Noch ein Tier oder abbrechen?', 'helpTitle' => 'Hilfe', 'helpMessage' => 'Frage, welches Tier in deinem Zoo ' . 'ist und wie viele Tiere es sind.', 'cancelTitle' => 'Danke', 'cancelMessage' => 'Danke und bis bald!', 'stopTitle' => 'Danke', 'stopMessage' => 'Danke und bis bald!', 'animalTitle' => 'Ein Tier', 'animalMessage' => '%1$s lebt in deinem Zoo!', 'countTitle' => 'Tierzählung', 'countMessage' => 'In deinem Zoo leben %1$s Tiere!',];
/data/texts/zoo.common.texts.de-DE.php
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4646 von von 6060
Intent Klasse erstellenIntent Klasse erstellen
<?phpnamespace Zoo\Intent;
use TravelloAlexaLibrary\Intent\AbstractIntent;use TravelloAlexaLibrary\Response\AlexaResponse;use TravelloAlexaLibrary\Response\Card\Standard;use TravelloAlexaLibrary\Response\OutputSpeech\SSML;
class AnimalIntent extends AbstractIntent{ const NAME = 'AnimalIntent';
public function handle(string $smallImageUrl, string $largeImageUrl): AlexaResponse { $zooTitle = $this->getTextHelper()->getAnimalTitle(); $zooMessage = $this->getTextHelper()->getAnimalMessage('Ein Elefant');
$this->getAlexaResponse()->setOutputSpeech(new SSML($zooMessage)); $this->getAlexaResponse()->setCard( new Standard($zooTitle, $zooMessage, $smallImageUrl, $largeImageUrl) );
return $this->getAlexaResponse(); }} /module/Zoo/src/Intent/AnimalIntent.php
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4747 von von 6060
Skill Configuration ISkill Configuration I
<?phpnamespace Zoo;
use TravelloAlexaLibrary\Application\AlexaApplication;use TravelloAlexaLibrary\TextHelper\TextHelper;
class ConfigProvider{ const NAME = 'zoo-skill';
public function getSkills(): array { return [ self::NAME => [ 'applicationId' => 'amzn1.ask.skill.place-your-skill-id-here', 'applicationClass' => AlexaApplication::class, 'textHelperClass' => TextHelper::class, 'sessionDefaults' => [], 'smallImageUrl' => 'https://www.travello.audio/cards/zoo-480x480.png', 'largeImageUrl' => 'https://www.travello.audio/cards/zoo-800x800.png', /** ... */ ] ]; }}
/module/Zoo/src/ConfigProvider.php
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4848 von von 6060
Skill Configuration IISkill Configuration II
namespace Zoo;
use TravelloAlexaZf\Intent\AbstractIntentFactory;use Zoo\Intent\AnimalIntent;
class ConfigProvider{ public function getSkills(): array { return [ self::NAME => [ /** ... */ 'intents' => [ 'aliases' => [ AnimalIntent::NAME => AnimalIntent::class ], 'factories' => [ AnimalIntent::class => AbstractIntentFactory::class ], ], 'texts' => [ 'de-DE' => include PROJECT_ROOT . '/data/texts/zoo.common.texts.de-DE.php', 'en-US' => include PROJECT_ROOT . '/data/texts/zoo.common.texts.en-US.php', ], ] ]; }} /module/Zoo/src/ConfigProvider.php
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4949 von von 6060
Zoo Anwendung testenZoo Anwendung testen
/data/postman/collection.json
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5050 von von 6060
Weitere FeaturesWeitere Features
Session Attribute step2→
Slot-Type Tierarten step4→
https://github.com/travello-gmbh/example-zoo-skill
Zweiter Intent step3→
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5151 von von 6060
In Kürze in der Library 3.0In Kürze in der Library 3.0
https://github.com/travello-gmbh/amazon-alexa-skill-library
Codegenerierung für Skills
Codegenerierung für Intents
Meine ErkenntnisseMeine Erkenntnisse
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5353 von von 6060
Früher ErfolgFrüher Erfolg
6 Monate Top 10 Aktivierte Skills
75.000 Kunden bisher
64 Kundenbewertungen bisher
2.500.000 »Utterances« bisher
Meist genutzter Skill (DE) in 05/2017
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5454 von von 6060
Größte HerausforderungenGrößte Herausforderungen
Slot Type für deutsche Vorname
Signaturvalidierung
Kategorie Slot Type Intents→
Chance ersten Skill abzuschießenZweiter Server für Tests
Komplexeres VUI / CUI
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5555 von von 6060
ZertifizierungsprozessZertifizierungsprozess
7 Tage für Feedback (02/2017)
Signaturvalidierung Problem
16 Stunden bis Live (07/2017)Invocation Name Problem
0 Probleme»Abbrechen« Intent Problem
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5656 von von 6060
Zahlen zur EntwicklungZahlen zur Entwicklung
10 Arbeitstage zusammen
80% für Infrastruktur Code
15 Arbeitstage zusammen
90% für Skill Code
20% für Skill Code
10% für Infrastruktur Code
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5757 von von 6060
Wichtigste ErkenntnisseWichtigste Erkenntnisse
Mit einfachem Skill beginnen
Gründlich testen
Solide Code Basis schreiben
Mehr als einen Skill erstellen
Durchdachte VUI erstellen
Slot-Types nicht blind vertrauen
Spaß haben!
Letzte NachrichtenLetzte Nachrichten
Fragen?Fragen?
Danke!Danke!Mail: [email protected]: [email protected]: www.travello.audioWeb: www.travello.audio