Alexa Custom Skill Modul

Es wird ja auch kein LaunchRequest übermittelt, sondern ein IntentRequest für den Intent InformationSubjectResponse. Es wird der Slot „subject“ mit „öffne Hause“ übermittelt.

Ich denke, das Problem ist, dass Dein Invocation name aus zwei Wörtern besteht.

In der Alexa Doku steht:

Two-word invocation names are not allowed if one of the words is a definite article (“the”), indefinite article (“a”, “an”) or preposition (“for”, “to”, “of”). For example, “a bicycle”, “an espresso”, “to amuse”, “for fun”.

Ich schlage vor, dass Du den Invocation name änderst.

Manchmal ist es auch so, dass Alexa die Sample Utterances leicht anders interpretiert. Das musst Du dann ggf. in Deinem Code abfangen.

Ich habe eben Version 2.1 der Library veröffentlicht und die Dokumentation geändert. Es werden wird jetzt eine „Support Data“ Zeile im Debug des WebHooks gelogged, die zensierte Daten enthält. Entfernt werden ApplicationId und UserId. RequestId und SessionId reinige ich nicht, diese sind aus meiner Sicht unkritisch.

Lag wohl am Invocation Name wenn ich diesen in „mein haus“ ändere wird dies auch als Launch Request erkannt und ich bekomme eine andere Antwort.


{"version":"1.0","response":{"outputSpeech":{"type":"PlainText","text":"Ich kann Dir die Anzahl der Bibliotheken, Module, Instanzen, Skripte oder Variablen nennen. \u00dcber welche Art von Objekt m\u00f6chtest Du Informationen haben?"},"shouldEndSession":false},"sessionAttributes":{"session_controller_id":57877,"slots":[]}}

So soll es sein.

Jetzt kannst Du mit einem der genannte Begriffe antworten.
Oder du sagst gleich: „Alexa, frage mein Haus nach Informationen über Skripte“

Dann sollte Alexa etwas in der Art sagen: „Es sind 545 Skripte vorhanden.“

Hast Du auch ein Help Intent eingebaut?

Noch nicht, kommt aber noch.

Mit dem Invocation Name gibt es irgendwie noch Probleme, ich habe gerade mal „jarvis“ ausprobiert. Alexa öffne jarvis oder Alexa frage jarvis erkennt das Modul wieder nur als Intent und nicht als Launch Request


{"version":"1.0","session":{"new":true,"sessionId":"SessionId.123","application":{"applicationId":"amzn1.ask.skill.123"},"attributes":{},"user":{"userId":"amzn1.ask.account.ABC"}},"request":{"type":"IntentRequest","requestId":"EdwRequestId.06855fe4-e607-4266-a09c-46ebba2721d5","timestamp":"2017-02-19T14:02:00Z","locale":"de-DE","intent":{"name":"GetInformation","slots":{"subject":{"name":"subject","value":"frage"}}},"inDialog":false}}

Kommt noch ist jetzt :slight_smile:

ACHTUNG: Ich musste hierfür leider Änderungen einbauen, die Änderungen an den bisherigen Action Skripten erfordern.

Konkret musst Du den die function-Zeile wie folgt andern:

function ExecuteAction($name, $id, array $slots, $locale, $sessionControllerId)

Die Gültigkeitsprüfung der Intent Namen wurde so erweitert, dass Du neben Namen, die nur Groß- und Kleinbuchstaben enthalten dürfen, auch Namen von Built-in Intents verwenden kannst.

Die Anleitung in der Readme zur Demo wurde entsprechend erweitert.

Für diejenigen, die schon eingerichtet haben, das muss getan werden:

[ul]
[li]Intent Schema in der Amazon Developer Console erweitern, die Copy & Paste Datei ist aktualisiert.
[/li][li]Zwei neue Intent Instanzen anlegen (AMAZON.HelpIntent und AMAZON.CancelInten). Wie das geht steht in der Readme.
[/li][li]Das Action Script der GetInformation Instanz anpassen, die Copy & Paste Datei ist aktualisiert.
[/li][/ul]

Auch hier kann das Modul (wieder) nichts dafür.

Im Request sieht man das:

„request“:{„type“:"IntentRequest […]

Es kommt also von Amazon schon ein IntentRequest an. Daran kann ich nichts ändern.

Eventuell bessert sich die Situation, wenn Du weitere Intents und Sample Utterances anlegst.

Super :D, bist ja mega fix. Kannst Du auch noch einen AMAZON.RepeatIntent einbauen? :wink:

Klar. Ich muss mir aber zur Realisierung noch Gedanken machen, man möchte ja auch verhindern, dass ggf. Schaltvorgänge doppelt ausgeführt werden.

Hy!

Das ganze hört sich ja sehr gut an, Ich werde heute Abend oder Morgen mal testen aber wenn ich das richtig verstanden habe lege ich mir ein/mehrere Skills an mit verschiedene Wörte auf die Alexa hört: schalte/fahre/… an.
Dann lege ich mir verschiedene Instanzen an gebe im feld Name des Intents das gewünsche Skill namen ein schalte/fahre…
unter Aktion wähle ich dann Benutzerdefiniertes Skript ausführen, unter Benutzerdefiniertes Skript trage ich dann das Skript ein das ausgeführt werden soll!
Wenn ich dann sage zb.

Alexa/Skill schalte/Skript Licht an also „Alexa schalte Licht an“ dann sollte das ganze funktionieren oder?
Alexa/Skill fahre/Skript Rollo runter also Alexa fahre Rollo runter dann sollte das ganze funktionieren oder?

Mfg
Maxx

PS: Wenn das ganze so funktioniert bin ich voll begeistert!

Mal eine Frage in die Runde… bei einem Freund funktioniert das Modul so gar nicht. Er hat IPS 4.1 auf einem Raspi.
Beim Zugriff auf den WebHook kommt ein HTTP 500 Fehler.
Nach diversen Tests kann ich aber keine Fehler finden, auch nicht das Linux-typische Problem mit Windows Line Breaks.

Hat das jemand erfolgreich auf einem Linux IPS Server probiert?

Jein.

Aktuell kann ich nur Custom Skills anbieten, diese benötigen immer ein Invocation Wort.

Z.B:

  • Alexa, schalte das Licht im Schlafzimmer ein über Haus
  • Alexa, frage Haus wie war es draußen ist

Das Signalwort weglassen kann man nur bei Home Automation Skills, aber hier habe ich noch ein technisches Problem.

Zu den Begrifflichkeiten… Der Skill ist mit genau einem Invocation Wort verbunden. Über die Sample Utterances definierst Du Beispielsätze und verbindest diese mit einem Intent. Z.B.

  • Alexa, schalte das Licht im Schlafzimmer ein über Haus => TurnOnLight
  • Alexa, frage Haus wie war es draußen ist => GetTemperature

Für jeden Intent legst Du dann eine Intent Instanz an.

Mein IPS läuft auf einem Raspberry 3 mit Jessie. Ich habe da keine Probleme.

Als invocations Wort könnte man ja „sofort“ nehmen oder?

Danke. Wir haben den Grund gefunden: IPS 4.1 vom 26.11.16. Update gemacht, läuft.

Das sollte funktionieren. Probier es halt mal aus. Es könnte halt sein, dass „sofort“ als „Füllwort“ erkannt wird.

Sobald Smart Home Skills funktionieren, wird es eh „natürlicher“ vom Satzbau her.

Imho glaube nicht das das sauber funktioniert

Schau mal in der Doku

Ich nutzte so was wie
Alexa sage Haus Butler schalte das Licht im Arbeitszimmer aus

Ist zwar länger als in einem Smart Home Skill dafür bekomme ich bei einem Custom Skill aber auch die Rückmeldung
Das Licht wurde im Arbeitszimmer ausgeschaltet

Da gebe ich Dir recht. Dennoch: Jeder der das hier bei mir ausprobiert sagt: Das ist schon blöde mit dem Invocation Word.