NEWS
[Gelöst] Echo Sprachausgabe prüfen und ggfs. wiederholen
-
Hallo,
manchmal kommt es ja vor, dass ein Echo Device eine Sprachausgabe, die per Speak oder ssml ausgelöst wurde, "verschluckt". Kann man diese Situation irgendwie erkennen? Wenn das möglich wäre, könnte man sich ja ein Script schreiben, dass dann einfach nochmal versucht, die Sprachausgabe zu machen.
Hat jemand einenTipp?
Danke und Gruß
Alexi -
@alexi
Das Problem habe ich hier auch.
Gefühlt passiert es häufiger, wenn der Adapter mehrere Wertänderungen (wie Sprachbefehle) innerhalb sehr kurzer Zeit verarbeiten muss - wie gesagt, gefühlt, einen Beweis habe ich (noch) nicht.
Bisher habe ich da auch noch nix umgesetzt, aber, wenn ich mich nicht irre, wird die History nicht aktualisiert, wenn der Echo nicht gesprochen hat.
Das kannste evtl. mal beobachten und vielleicht damit arbeiten. -
@padrino
Danke für deine Antwort. Daraufhin habe ich jetzt ein wenig rumprobiert und zumindest beim Verwenden von Speak wird die History bei erfolgter Sprachausgabe aktualisiert. Schade, dass das nicht auch bei ssml der Fall ist, denn ich nutze im Moment ausschließlich ssml.
Ich habe es jetzt auf die Schnelle auch nicht hinbekommen, einen Negativ-Test zu machen, d.h. bis jetzt ging beim Test jeder Speak Befehl durch (war ja klar) und die History wurde aktualisiert.
Ich werde jatzt mal ein Script auf Speak umstellen und die History entsprechend überwachen. Mal sehen, ob dabei was rauskommt. Danke nochmal für den Hinweis auf die History. -
@padrino
Danke nochmal für den Hinweis auf die History. Mit speak klappt das damit tatsächlich, hier ein kleines Beispielscript zum Testen:let echoDeviceRoot = 'alexa2.0.Echo-Devices.'; let echoSpeakStarted = []; let echoCheckTime = 6000; function echoSpeak(serialNumber, text) { setState(echoDeviceRoot+serialNumber+".Commands.speak", text); echoSpeakStarted[serialNumber] = true; setTimeout(function(serial, txt){ if(echoSpeakStarted[serial]) { echoSpeakStarted[serial]=false; setState(echoDeviceRoot+serial+".Commands.speak", txt); log ("Sprachausgabe von "+serial+" wurde wiederholt."); } else { log ("Sprachausgabe von "+serial+" war OK."); } }, echoCheckTime, serialNumber, text); } on('alexa2.0.History.json', function (json) { let jsonObj = JSON.parse(json.state.val); if (jsonObj.summary=="") { echoSpeakStarted[jsonObj.serialNumber] = false; log ("Sprachausgabe von "+jsonObj.serialNumber+" erfolgt. Keine Wiederholung nötig."); } }); echoSpeak('XYXYXYXYXYXYXYXY', 'Test!'); // Seriennummer des Echo Devices und Text, der gesprochen werden soll.
Das Erkennen, ob eine Sprachausgabe erfolgt ist, geht bestimmt auch noch etwas selektiver, aber so klappt es auf jeden Fall schon mal.
Wenn man die Funktion echoSpeak in mehreren Scripten verwenden möchte, könnte man die in ein global Script packen, dann müsste echoSpeakStarted aber als State implementiert werden.
-
@alexi sagte in [Gelöst] Echo Sprachausgabe prüfen und ggfs. wiederholen:
beim Verwenden von Speak wird die History bei erfolgter Sprachausgabe aktualisiert. Schade, dass das nicht auch bei ssml der Fall ist,
Hm, da fällt mir ein, evtl. sollten wir da mal @apollon77 fragen, ob das an Amazon liegt, oder ob vielleicht der Adapter etwas verpeilt.
-
@padrino der Adapter macht da nix bzw filtert nix. Scheinbar gilt das eine als hättest du „alexa sprich mir nach ....“ gesagt was ein Kommando ist und das ssml ist was anderes