Überspringen zu Hauptinhalt

In unserem Beginner Tutorial zur Entwicklung eines Alexa Skills haben wir euch gezeigt wie man einen Basic-Skill konfiguriert und per PHP die Anfragen (Intents) verarbeitet.

Nun sind wir davon ausgegangen, dass es lediglich einen Intent „hallo“ gibt und nicht mehr. Jetzt möchten wir aber noch einen Intent für Tschüß und einen Default erstellen falls der Sprachbefehl nicht korrekt erkannt wurde.

Intents erstellen

Zuerst müssen wir unserem Intent Schema den fehlenden Befehl für Tschüß hinzufügen. Also ab ins Interaction Model und „tschuss“-Intent ergänzen:

{
  "intents": [
    {
      "intent": "AMAZON.ResumeIntent"
    },
    {
      "intent": "AMAZON.PauseIntent"
    },
    {
      "intent": "hallo"
    },
    {
      "intent": "tschuss"
    }
  ]
}

Wir wollen, dass der Intent „tschuss“ getriggert wird, wenn die folgenden Sprachbefehle erkannt werden: Tschüss, Bye und Cya. Also die Utterances ergänzen:

hallo hi
hallo hallo
hallo moin
tschuss tschüß
tschuss tschüss
tschuss bye
tschuss cya
zweiten Intent erstellen
zweiten Intent erstellen
Utterances ergänzen
Utterances ergänzen

Intents per PHP abfangen

Damit ausgelesen werden kann welcher Intent gerade per Sprachbefehl angefordert wurde, müssen wir den PHP input auslesen. Folgendes Skript holt sich den Intent Namen:

// 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');
}

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

Falls also der Intent nicht erkannt wurde, wird ein default Intent gesetzt (sollte nicht vorkommen, aber man kann ja nie wissen.

Als nächsten geben wir etwas abhängig vom Request aus:

switch ($intent) {

	// Hallo Intent für Utterances hi, hallo, moin
	case 'hallo':
		$responseArray = [ 'version' => '1.0',
		    'response' => [
		          'outputSpeech' => [
		                'type' => 'PlainText',
		                'text' => 'Hallo zurück!',
		                'ssml' => null
		          ],
		          'shouldEndSession' => true
		    ]
		];
		break;

	// Hallo Intent für Utterances hi, hallo, moin
	case 'tschuss':

		$responseArray = [ 'version' => '1.0',
		    'response' => [
                  'outputSpeech' => [
                        'type' => 'SSML',
                        'text' => 'Und Bye Bye ...',
                        'ssml' => 'Und Bye Bye ...'
                  ],
		          'shouldEndSession' => true
		    ]
		];
		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();

Zum Debug geben wir im Default immer den Intent mit aus.

Daniel Barenkamp

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

Dieser Beitrag hat 3 Kommentare
  1. Hallo,
    erstmal, Danke für dein tolles Tutorial.
    Dies hat mir endlich geholfen mein Projekt mit PHP und Alexa auf die Reihe zu bringen.
    Da der Text ja als Plaintext übergeben wird, stehe ich noch vor dem Problem, dass die Ausgabe etwas wie in einer Schlange heruntergepredigt wirkt.
    Kann ich im Plaintext auch Pausen einbauen? Hast du so etwas schon umgesetzt?

    Lg
    Fatmax

Schreibe einen Kommentar

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

×Suche schließen
Suche