skip to Main Content

Seit meinem letzten Tutorial hat sich einiges getan bei Amazon’s Alexa Developer Platform. Das Interface wurde überarbeitet und statt des alten Systems, wo intents händisch erstellt werden mussten, gibt es nun einen Skill Builder.

Deshalb möchte ich euch hier ein kleines Update meines alten Alexa PHP Tutorials geben.

Eure Skill Übersicht

Wir starten auch gleich los. Ich setze einfach mal voraus, dass ihr einen Alexa Developer account habt und springe deshalb gleich mal in das neue Dashboard. Über den Menü-Punkt „Deine Alexa Konsolen“ (oben rechts) > Skills kommt ihr auf eure Skill Übersicht.

Zu eurer Alexa Skill Übersicht

Meine Alexa Skill Übersicht
Meine Alexa Skill Übersicht

Skill Erstellen

Über den Punkt „Create Skill“ können wir unseren ersten eigenen Amazon Alexa Skill erstellen. Nachdem ihr den Button angeklickt habt müsst ihr im ersten schritt einen Skill-Namen vergeben. In meinem Beispiel Daniel.

Danach müssen wir das Model für den Skill auswählen. Wir wollen ja erstmal klein anfangen und nicht direkt einen Smart Home oder Video Skill bauen. Deshalb wählen wir hier Custom aus.

Alexa Skill erstellen
Alexa Skill erstellen
Model für euren Skill
Model für euren Skill

Skill Einstellungen

Skill Dashboard

Das wars auch schon: Nun gelangt ihr in das Dashboard eures Skills. In der oberen Leiste findet ihr folgende Punkte:

  • Daniel => Name eures Skills
  • Build => Hier erstellen wir die Befehle
  • Test => Damit können wir später die Funktionen überprüfen
  • Launch => Wenn ihr euren Skill im Amazon Store veröffentlichen wollt
  • Measure => Nutzungsverhalten etc.

Unter Build findet sich in der linken Seitenleiste das wichtigste – nämlich die Skill Aufrufe und Einstellungen.

Dashboard
Dashboard

Invocation Name

In der rechten Leiste findet ihr eine gute Checkliste, mit Dingen, die zu erledigen sind. Hier starten wir auch und klicken auf „1. Invocation Name„. Der Invocation Name ist der „Start-Ausdruck“ damit Alexa euren Skill anspricht z.b. über „Alexa, frage INVOCATION NAME“. Ich setze hier als Beispiel daniel ein – wichtig: hier ist keine Großschreibung erlaubt.

Invocation Namen setzen
Invocation Namen setzen

Ersten Intent Erstellen

Nachdem wir den Invocation Namen gesetzt haben können wir unseren ersten Skill Intent erstellen. Ein Intent ist ein Befehl, der auf eurem Server ausgeführt wird, wenn eines der zugeordneten Utterances erkannt worden. Klingt kompliziert ist es aber nicht.

Hier ein Beispiel:

  • Intent = hallo
  • Utterances
    • hi
    • hallo
    • moin

Wenn ihr jetzt euren Skill fragt „hi„, wird auf euerem Server der Intent „hallo“ ausgeführt. Was dann von diesem Intent zurückkommt, hängt an eurer Programmierung.

Ersten Intent erstellen
Ersten Intent erstellen

Skill Utterances und Slots

Ok also wir haben nun einen Intent erstellt mit „hallo“. Jetzt erstellen wir 3 utterances wie oben bereits beschrieben: hallo, hi und moin.

Zudem möchte ich, dass ein Slot (oder auch variable) mit an meinen Server übergeben wird. Dazu füge ich einen Slot „name“ mit dem Slot-Typen „AMAZON.DE_FIRST_NAME“ hinzu. Diesen muss ich natürlich dann den Utterances mit Hilfe einer geschweiften Klammer hinzufügen.

Jetzt ist unser erster Intent fertig.

Utterances hinzufügen
Utterances hinzufügen
Slots erstellen
Slots erstellen
Slots den Utterances zuweisen
Slots den Utterances zuweisen
Utterances Übersicht
Utterances Übersicht

Endpoint festlegen

Nun können wir einen Endpoint festlegen. Der Endpoint ist das Ziel wohin eure Skill Anfragen geschickt werden sollen. In meinem Fall ist dies https://alexa.welaunch.io. Wichtig ist, dass der Endpoint über eine verschlüsselte Verbindung (https) verfügt.

HTTPs auswählen, Adresse eintragen und „My development endpoint has a certificate from a trusted certificate authority“ auswählen. Dann zurück in das Interaction Model und auf „Build Klicken“.

Endpoint festlegen
Endpoint festlegen
Skill Building
Skill Building

Der PHP-Part

Jetzt können wir endlich zum PHP Thema kommen. Eigentlich ändert sich hier nicht viel im Vergleich zu meinem alten Tutorial, aber ich erklär es trotzdem nochmal kurz. Als logger benutze ich Monolog, damit ich überprüfen kann warum manche Anfragen nicht beantwortet wurden. Zudem sieht man welche intents oder utterances gefragt werden, aber nicht von eurem Skill unterstützt werden. Zum Beispiel wenn ich „tachchen“ sage – dieser Utterance fehlt.

Composer Datei für Monolog:

{
    "name": "db-dzine/alexaphp",
    "description": "PHP Class for Alexa",
    "type": "library",
    "authors": [
        {
            "name": "Daniel Barenkamp",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "monolog/monolog": "1.x-dev",
    }
}

Danach in eurem Order composer install ausführen. Nun eine index.php erstellen und autoload und MonoLog einbinden.

<?php // Load Monolog Vendor require_once __DIR__ . '/vendor/autoload.php'; // Autoload files using Composer autoload use Monolog\Logger; use Monolog\Handler\StreamHandler; // Save Requests on debug log define('DEBUG', true); define('DEBUG_FILE', __DIR__ . '/logs/log.log'); $logger = new Logger('Alexa'); $logger->pushHandler( new StreamHandler( DEBUG_FILE, Logger::INFO ) );

Um requests von eurem Skill zu catchen:

// Get Alexa Request
$jsonRequest = file_get_contents('php://input');

// Decode the Request
$data        = json_decode($jsonRequest, true);

// Abort when Empty
if( empty($data) || (!isset($data) ) ) {
	die('Bad Request');
}

Folgende Variablen können aus dem data array ausgelesen werden. Hier sind natürlich noch mehr drin, aber das sind die Wichtigesten:

$intent = !empty($data['request']['intent']['name']) ? $data['request']['intent']['name'] : 'default';
$intentData = !empty($data['request']['intent']['slots']) ? $data['request']['intent']['slots'] : 'default';
$sessionId =  !empty($data['session']['sessionId']) ? $data['session']['sessionId'] : 'default'; 

$logger->info( var_export($data, true));
$logger->info( $intentData );
$logger->info( $sessionId);

Nun können wir über die $intent variable herausfinden welcher Intent angesprochen wurde. Über ein switch statement gebe ich im falle des „hallo“-Intents ein nettes Hallo zurück. Und falls ein Name mit übergeben wurde, gebe ich diesen auch mit zurück. Das ganze als JSON encoded string an Alexa zurückgeben.

switch ($intent) {

	// Hallo Intent für Utterances hi, hallo, moin
	case 'hallo':
		// Hallo Intentdata abfragen
		$name = !empty($intentData['name']['value']) ? $intentData['name']['value'] : '';

		// save $name in data file - here also mysql can be used
		// later you can use session id to get data like name
		if(!empty($name)) {
			$dataToSave = array($sessionId => array(
				'name' => $name
			));
			$fp = fopen('data.json', 'w');
			fwrite($fp, json_encode($dataToSave));
			fclose($fp);
		}

		$responseArray = [ 'version' => '1.0',
		    'response' => [
		          'outputSpeech' => [
		                'type' => 'PlainText',
		                'text' => 'Hallo ' . $name,
		                'ssml' => null
		          ],
		          'shouldEndSession' => false
		    ]
		];
		break;

	// Default
	default:
		$responseArray = [ 'version' => '1.0',
		    'response' => [
		          'outputSpeech' => [
		                'type' => 'PlainText',
		                'text' => 'Ich bin die Default Rückgabe! Intent: ' . $intent,
		                'ssml' => null
		          ],
		          'shouldEndSession' => true
		    ]
		];
		break;
}

header ( 'Content-Type: application/json' );
echo json_encode ( $responseArray );
die();

Skill testen

Testen können wir unseren Skill mit einem „Frage daniel hallo klaus“. Klingt blöd, aber über frage daniel wird der Skill gestartet (invocation name) und hallo (intent) wird ausgeführt.

Ihr könnt auch über eure Alexa App auf dem Smartphone den Skill testen.

Alexa Skill Testing
Alexa Skill Testing

Daniel Barenkamp

Founder and Creator of WeLaunch (formerly DB-Dzine).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

×Close search
Suche