IPC 2017 - Alexa Skills für Amazon Echo mit PHP entwickeln

Preview:

Citation preview

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: ralf@travello.audioMail: ralf@travello.audioWeb: www.travello.audioWeb: www.travello.audio

Recommended