Community Tip - Visit the PTCooler (the community lounge) to get to know your fellow community members and check out some of Dale's Friday Humor posts! X
Hello frends,
Is it possible to change or create voice commands from javascript?
For example: is it possible to change Voice Response based on called function result?
Thanks for any response.
Tomas
Solved! Go to Solution.
If your use case is to change the voice response, you could maybe tackle it by not using voice response, but using text-to-speech in your JS function. For example, if your command is "Show Voltage", and you want the response to be "Reading is X Volts" (where X is some data read from the device), you could try something like this:
* Define the voice command to run viewCtrl.showVoltage()
* Leave the Voice Response field in the Application Event blank
* In your code, have something like this:
$scope.showVoltage = function() {
// assume the IoT data is bound to the "voltage" app param
// show the Voltage label
$scope.setWidgetProp("voltage", "visible", true);
// set the label
$scope.setWidgetProp("voltage", "text", $scope.app.params["voltage"] + "V");
// say the result
$scope.app.speech.synthesizeSpeech({'text': 'Reading is ' + $scope.app.params["voltage"] + " volts"});
}
Hi @TomasCharvat ,
I do not know an option how to change or to create definition of voice response at runtime. Possibly somebody could post further details.
I want only to mentioned that one time the voice response was defined - you can change later at runtime that what it does. Means the same command will perform different functions depending on runtime setting
So let say the voice command will call a function define in the Home.js - let say test function.
In this case you could change the behavior of the test function e.g. using select case (switch case) which check some parameter
or using eval function use different function definitions
let functionName= 'setShadeStrWaterWaveLev'
let strShaderWaterWaveLev =eval("$scope."+functionName.trim() + "("+newscale1+","+wlevel+",false,LEVEL_ZERO);") ;
If your use case is to change the voice response, you could maybe tackle it by not using voice response, but using text-to-speech in your JS function. For example, if your command is "Show Voltage", and you want the response to be "Reading is X Volts" (where X is some data read from the device), you could try something like this:
* Define the voice command to run viewCtrl.showVoltage()
* Leave the Voice Response field in the Application Event blank
* In your code, have something like this:
$scope.showVoltage = function() {
// assume the IoT data is bound to the "voltage" app param
// show the Voltage label
$scope.setWidgetProp("voltage", "visible", true);
// set the label
$scope.setWidgetProp("voltage", "text", $scope.app.params["voltage"] + "V");
// say the result
$scope.app.speech.synthesizeSpeech({'text': 'Reading is ' + $scope.app.params["voltage"] + " volts"});
}
yes, that's the real solution. In the question was asked about voice response - but what I meant in my answer (my mistake) -> was the voice command definition (the text what we need to say to start the command) thanks for clarification.