Nachdem ich nun einige Wochen schon ein Amazon Echo Dot habe, und richtig begeistert bin, habe ich mit einige Skripte zum Handling der Anfragen von Alexa Custom Skills geschrieben.
Um die Funktionalität besser zu kapseln und auch anderen IP-Symcon Usern zur Verfügung zu stellen, habe ich eine Bibliothek mit einigen IP-Symcon PHP Modulen erstellt.
Ok, bin etwas weiter. Sehe ich es richtig, dass man im Interaction Model den Custom Slot Type Information_Subjects noch anlegen muss? Und vermutlich hat dieser diese Werte:
bibliotheken
module
instanzen
skripte
variablen
Richtig?
Bei „Alexa, frage Demo“ erhalte ich jetzt allerdings folgendes Feedback:
{
"version": "1.0",
"response": {
"outputSpeech": {
"type": "PlainText",
"text": "Der angeforderte Skill konnte nicht ausgeführt werden weil der LaunchRequest Intent nicht konfiguriert ist."
},
"shouldEndSession": true
},
"sessionAttributes": {}
}
Ja gut, mit dem Custom Slot Type habe ich wohl richtig gelegen und dann habe ich noch beim WebHook unter „Diesen Inten ausführen, wenn der Skill ohne Kommando aufgerufen wird“ die Instanz „InformationSubjectResponse“ hinterlegt. Das scheint mir entsprechend deiner Beschreibung der richtige Eintrag. Ich erhalte dann aber auf „Frage Demo“ nur die Antwort „Ich weiß nicht, auf was du antwortest“. Wenn ich das Script richtig verstehe, dann müsste dort eigentlich „Ich kann Dir die Anzahl der Bibliotheken, Module, Instanzen, Skripte oder Variablen nennen.“ zurückgeliefert werden?
Das hat in der Tat in der Anleitung gefehlt. Es gibt im Git-Repository eine Textdatei, die die notwendigen Informationen enthält. Die Anleitung in der Readme habe ich korrigiert, jetzt ist das Anlegen des Slot Types enthalten.
Das konnte ich nicht nachvollziehen. Was meinst Du genau damit? Kannst Du bitte beschreiben, was Du genau tust?
Richtig, siehe meine erste Antwort. Die Anleitung ist korrigiert. Aber Du hast es schon richtig gemacht
Hier hatte leider auch noch etwas in der Anleitung gefehlt, was ich ergänzt habe. Du musst auf der Konfigurationsseite des WebHooks den LaunchRequest Intent konfigurieren und dort auf den GetInformation Intent verweisen. Alexa sendet an den WebHook diese LaunchRequest Anfragen, wenn dem Skill kein Kommando übergeben wurde. Wenn Du nur „Alexa, frage Demo“ sagst, wird kein Kommando übergeben. Wenn Du „Alexa, frage Demo nach Informationen“ fragst, matched das hingegen gegen die Sample Utterances und ruft mit einem IntentRequest direkt GetInformation auf. Der Intent wird hier dann denselben Satz ausgeben, da bei dieser Anfrage immer noch der „subject“ Slot leer ist und der Intent diese Information dann von Dir abfragt.
Nein, das ist der falsche Intent. Siehe meine anderen Antworten. Aber für alle neuen (Beta-)Tester sollte es jetzt passen, die Anleitung habe ich gefixed.
Vielen herzlichen Dank für das zur Verfügung stellen von deinem Ansatz.
Ich habe mir das nur erstmal grob angeschaut.
Meine ersten Anmerkungen bzw. Beobachtungen:
[ul]
[li]das Aktion Skript kannst Du ja eigentlich auch gleich komplett anlegen, statt erst eines anzulegen und dann den Nutzer den Inhalt erneut reinkopieren zu lassen[/li][li]im Aktion Skript fehlt das ?> am Schluss[/li][li]nach dem Einrichten kommt bei mir als Rückmeldung auf einen LaunchIntent als Antwort Ich weis nicht auf was Du antwortest[/li][/ul]
Im Debug steht
Session controller Not set
Aktion Forward to session controller
Forward to Session controller Session controller not set
Könnte ich tun, allerdings wird ein etwas einfacheres, aber dennoch funktionsfähiges Skript verwendet. Aus meiner Sicht macht es nicht so viel Sinn, jedes Mal das Demo Skript als Basis für ein neues Aktions-Skript zu verwenden.
Man könnte jedoch darüber nachdenken, einen eigenen Button zum Erstellen des Skriptes zu verwenden, um dem Benutzer die Arbeit abzunehmen. Im „manuellen Ansatz“ sehe ich jedoch den Vorteil, dass man die Zusammenhänge besser versteht.
Also
In „Standard PHP“ ist es Best Practice, das schließende ?> Tag nicht zu verwenden, da nach diesem Tag folgende Zeichen (evtl. Leerzeilen) unter Umständen als HTML Text ausgegeben werden. Am Ende einer Datei wird das PHP-Skript-HTML-Tag automatisch implizit geschlossen.
Ich gehe davon aus, dass es in IP-Symcon’s PHP auch so ist, jedenfalls hatte ich noch nie Probleme damit.
Das ist der Grund, wieso das so ist. Ist also Absicht
Ich vermute, dass Du den LaunchIntent auf den InformationSubjectResponse Intent und nicht auf den GetInformation Intent gesetzt hast.
Hallo patami,
Dein Howto ist wirklich super gelungen, es lässt sich ganz einfach Punkt für Punkt abarbeiten, dafür ein großes Lob und ein dickes Danke meinerseits !!!
Ich habe alle bis zum Ende fehlerfrei hinbekommen doch leider hänge ich am Ende.
Ich kann die Seite Amazon Alexa
leider nicht aufrufen, ich werde partu immer auf meinen Deutsche Seite / Account umgeleitet wo ich den Skill nicht auswählen kann ???
Nein habe ich nicht es ist die GetInformation Instanz gesetzt. Irgendeine Idee wie ich mit Debug dem Fehler näher auf die Schliche komme ich habe mir Deinen Quellcode noch nicht angeschaut.
Ich habe den Invocation name bei mir geändert vielleicht ist das ja die Ursache je nachdem was dein Code erwartet.