{"id":551,"date":"2018-05-17T13:45:05","date_gmt":"2018-05-17T11:45:05","guid":{"rendered":"https:\/\/www.welaunch.io\/de\/?p=551"},"modified":"2020-09-21T11:08:20","modified_gmt":"2020-09-21T09:08:20","slug":"schaffe-ein-alexa-skill-mit-php-tutorial","status":"publish","type":"post","link":"https:\/\/www.welaunch.io\/de\/2018\/05\/schaffe-ein-alexa-skill-mit-php-tutorial\/","title":{"rendered":"Erstellen einer Alexa-Kompetenz mit PHP – Tutorial"},"content":{"rendered":"

Seit meinem letzten Tutorial haben sich einige Dinge bei Amazon’s Alexa-Entwicklerplattform ge\u00e4ndert. Die Schnittstelle wurde \u00fcberarbeitet, und statt des alten Systems, bei dem Absichten manuell erstellt werden mussten, gibt es jetzt einen Skill Builder.<\/strong>Deshalb m\u00f6chte ich Ihnen Halloer ein kleines Update meiner alten Alexa-PHP-Tutorials geben.Der Skill-\u00dcberblick<\/strong>Wir werden auch bald abreisen. Ich gehe einfach davon aus, dass Sie ein Alexa Developer-Konto haben und springe daher direkt in das neue Dashboard. \u00dcber den Men\u00fcpunkt “Ihre Alexa-Konsolen” (oben rechts) > Skills gelangen Sie zu Ihrer Skill-\u00dcbersicht.To your Alexa Skill OverviewCreate a Skill<\/strong>Unter “Fertigkeit erstellen” k\u00f6nnen wir unsere erste eigene Amazon Alexa-Fertigkeit erstellen. Nachdem Sie auf die Schaltfl\u00e4che geklickt haben, m\u00fcssen Sie im ersten Schritt einen Kompetenznamen vergeben. In meinem Beispiel, Daniel.Dann m\u00fcssen wir das Modell f\u00fcr die Fertigkeit ausw\u00e4hlen. Wir wollen klein anfangen und nicht direkt ein Smart Home oder eine Videokompetenz aufbauen. Deshalb w\u00e4hlen wir Halloer Custom.<\/p>\n

Skill-Einstellungen<\/h2>\n

Dashboard f\u00fcr Fertigkeiten<\/h3>\n

Das war’s: Jetzt steigen Sie in das Armaturenbrett Ihres K\u00f6nnens. In der oberen Leiste finden Sie die folgenden Punkte:<\/p>\n

    \n
  • Daniel => Name Ihrer Kompetenz<\/li>\n
  • Build => Hier erstellen wir die Befehle<\/li>\n
  • Test => Damit wir die Funktionen sp\u00e4ter \u00fcberpr\u00fcfen k\u00f6nnen<\/li>\n
  • Launch => Wenn Sie Ihre F\u00e4Hallogkeiten im Amazon Store ver\u00f6ffentlichen m\u00f6chten<\/li>\n
  • Messen => Nutzungsverhalten etc.<\/li>\n<\/ul>\n

    Unter Build in der linken Sidebar ist die wichtigste – die Skill-Aufrufe und Einstellungen.<\/p>\n

    Name der Anrufung<\/h3>\n

    In der rechten Leiste finden Sie eine gute Checkliste mit Dingen, die zu tun sind. Here we also start and click on “1st Name der Anrufung”. Der Name der Anrufung ist der “Startausdruck” f\u00fcr Alexa, um Ihre F\u00e4Hallogkeit anzusprechen e.g. \u00fcber “Alexa, fragen Sie INVOCATION NAME”. Ich nehme Daniel als Beispiel – wichtig: Halloer ist keine Gro\u00dfschreibung erlaubt.<\/p>\n

    Erstellen einer Absicht<\/h3>\n

    Nachdem wir den Namen der Anrufung festgelegt haben, k\u00f6nnen wir unsere erste F\u00e4Hallogkeitsabsicht erstellen. Ein Intent ist ein Befehl, der auf Ihrem Server ausgef\u00fchrt wird, wenn eine der zugeh\u00f6rigen Uterusse erkannt wird. Es klingt nicht kompliziert.Hier ist ein Beispiel:<\/p>\n

      \n
    • Absicht=Hallo<\/li>\n
    • Utterances\n
        \n
      • Hallo<\/li>\n
      • Hallo<\/li>\n
      • moin<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n

        If you now ask your skill “Hallo”, the intent “Hallo” will be executed on your server. What then comes back from tHallos intent depends on your programming.<\/p>\n

        Fertigkeits-\u00dcberschreitungen & Slots<\/h3>\n

        Ok so we have now created an intent with “Hallo”. Now we create 3 utterances as described above: Hallo, Hallo and moin.Ich m\u00f6chte auch, dass ein Slot (oder eine Variable) auf meinen Server \u00fcbertragen wird. Ich f\u00fcge einen Slot-“Namen” mit dem Slot-Typ “AMAZON” hinzu.DE_FIRST_NAME”. Nat\u00fcrlich muss ich diese mit Hilfe einer Klammer zu den Utteranzen hinzuf\u00fcgen.Jetzt ist unsere erste Absicht fertig.<\/p>\n

        Einen Endpunkt festlegen<\/h3>\n

        Jetzt k\u00f6nnen wir einen Endpunkt setzen. Der Endpunkt ist das Ziel, an das Ihre Qualifikationsanforderungen gesendet werden sollen. In my case tHallos is https:\/\/alexa.welaunch.io. Es ist wichtig, dass der Endpunkt \u00fcber eine verschl\u00fcsselte Verbindung (https) verf\u00fcgt.W\u00e4hlen Sie HTTPs, geben Sie die Adresse ein und w\u00e4hlen Sie “Mein Entwicklungsen Endpunkt hat ein Zertifikat von einer vertrauensw\u00fcrdigen Zertifizierungsstelle”. Gehen Sie dann zur\u00fcck zum Interaktionsmodell und klicken Sie auf “Build Click”.<\/strong><\/p>\n

        Der PHP-Teil<\/h2>\n

        Nun k\u00f6nnen wir endlich zum Thema PHP kommen. Eigentlich \u00e4ndert sich hier nicht viel im Vergleich zu meinem alten Tutorial, aber ich werde es noch einmal kurz erkl\u00e4ren. Als Logger benutze ich den Monolog, um zu pr\u00fcfen, warum einige Fragen nicht beantwortet wurden. You can also see wHalloch intents or utterances are asked, but not supported by your skill. For example, when I say “Halloderido” – tHallos uterance is missing.Komponisten-Datei f\u00fcr Monolog:<\/p>\n

        {    \"Name\": \"db-dzine\/alexaphp\",    \"Beschreibung\": \"PHP-Klasse f\u00fcr Alexa\",    \"tippen\": \"Bibliothek\",    \"Autoren\": ,    \"Mindest-Stabilit\u00e4t\": \"Entwicklung\",    \"erfordern\": {        \"Monolog\/Monolog\": \"1.x-dev\",    }}<\/pre>\n

        After that runcomposer install<\/code> in your folder. Dann k\u00f6nnen Sie einen Index erstellen.php und load autload & monolog:<\/p>\n

        pushHandler( new StreamHandler( DEBUG_FILE, Logger::INFO ) );<\/pre>\n

        Um requests von eurem Skill zu catchen:<\/p>\n

        \/\/ Get Alexa Request$jsonRequest=file_get_contents('php:\/\/input');\/\/ Decode the Request$data       =json_decode($jsonRequest, true);\/\/ Abort when Emptyif( empty($data) || (!isset($data) ) ) {die('Bad Request');}<\/pre>\n

        The following variables can be read from the data array. There’s more in here, of course, but these are the most important:<\/p>\n

        $intent=!empty($data) ? $data : 'default';$intentData=!empty($data) ? $data : 'default';$sessionId= !empty($data) ? $data : 'default'; $logger->info( var_export($data, true));$logger->info( $intentData );$logger->info( $sessionId);<\/pre>\n

        Now we can use the $intent variable to find out wHalloch intent was addressed. I return a nice Hallo via a switch statement in case of the “Hallo”-intent. And if a name was passed with it, I will also return it. Return the whole as JSON encoded string to Alexa.<\/p>\n

        switch ($intent) {\/\/ Hallo Intent f\u00fcr Utterances Hallo, hallo, moincase 'hallo':\/\/ Hallo Intentdata abfragen$name=!empty($intentData) ? $intentData : '';\/\/ save $name in data file - here also mysql can be used\/\/ later you can use session id to get data like nameif(!empty($name)) {$dataToSave=array($sessionId => array('name' => $name));$fp=fopen('data.json', 'w');fwrite($fp, json_encode($dataToSave));fclose($fp);}$responseArray=,          'shouldEndSession' => false    ]];break;\/\/ Defaultdefault:$responseArray=,          'shouldEndSession' => true    ]];break;}header ( 'Content-Type: application\/json' );echo json_encode ( $responseArray );die();<\/pre>\n

        Skill testing<\/h2>\n

        We can test our skill with a “Question daniel Hallo klaus”. Sounds stupid, but ask daniel to start the skill (invocation name) and Hallo (intent) is executed.You can also use your Alexa app on your smartphone to test the skill.<\/p>\n","protected":false},"excerpt":{"rendered":"

        Seit meinem letzten Tutorial haben sich einige Dinge bei Amazon’s Alexa-Entwicklerplattform ge\u00e4ndert. Die Schnittstelle wurde \u00fcberarbeitet, und statt des alten Systems, bei dem Absichten manuell erstellt werden mussten, gibt es jetzt einen Skill Builder.Deshalb m\u00f6chte ich Ihnen Halloer ein kleines Update meiner alten Alexa-PHP-Tutorials geben.Der Skill-\u00dcberblickWir werden auch bald abreisen. Ich gehe einfach davon aus,…<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[18,1,5],"tags":[],"class_list":["post-551","post","type-post","status-publish","format-standard","hentry","category-alexa","category-general","category-php"],"_links":{"self":[{"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/posts\/551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/comments?post=551"}],"version-history":[{"count":9,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"predecessor-version":[{"id":6012,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/posts\/551\/revisions\/6012"}],"wp:attachment":[{"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.welaunch.io\/de\/wp-json\/wp\/v2\/tags?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}