Alexa skill how to retrieve apl value - alexa

I'm sorry if it's a dumby question I'm new developing Alexa skill and using APL.
After triggered an intent, Alexa show a countdown timer to the user, it's possible after another intent is triggered to retrieve the value from the countdown or after the countdown is finished to trigger an intent or function?
Example: Alexa shows countdown 60 to 0, user trigger another intent, in that intent catch the value from countdown and Alexa return that the user took 10 seconds to respond.
Example #2: Alexa shows countdown 60 to 0, after reaching 0 seconds Alexa trigger another intent saying the user fail to respond in time.

Related

How can Alexa recognize Stop/Cancel intent whe in ElicitSlot mode

I have an alexa skill and I'm using Dialog Management for dynamically elicit slot.
For example I have one Intent that called OrderIntent with 3 slots: drink, coffeRoast, teaType.
When a user asks for a drink for example coffee, I'm using ELICITSLOT to stay in OrderIntent and asking the user for the coffee roast or tea type.
It works great.
The problem is that when I'm waiting for the second answer from user (tea type/ coffee roast)
Alexa doesn't recognize other intents like AMAZON.StopIntent or AMAZON.CancelIntent
So when Alexa waits for the tea type/ coffee roast and the user say "stop" I get in my code the value "stop" for "teatype" instead of invoking the AMAZON.StopIntent and stop the session.
Is there any solution for that in Alexa? to use the ELICITSLOT option and still recognize the other intents?
Thanks!

can we make Alexa utter a sentence after give amount of time like an alarm?

Normally we wake up alexa and give it a command and it responds. but
can i write an Azure function with a timer trigger that calls Alexa.Net api and make alexa utter a sentence after certain instance of time. ?
In this case i will not be awaking alexa instead i want her to remind me something every hour .
can we do that ?

How to make a long pause in Watson Assistant?

I'm using IBM Watson Assistant for creating a chatbot. I'm using the web interface with the intents, entities and dialog flow|tree (I don't know how it is called, I'm just calling it web interface).
I would like to have one node in the dialog which waits for say 100s and then sends another message to the user but only if the user did not send another message in-between. I can add pause in a node but only a pause of at most 10s is possible. Of course I could add multiple such pause in sequence in a node but that's not so good style. How can I solve this instead to wait 100s and only sending a message afterwards if the user did not send a message during this 100s?
Moreover, I have a pretty linear flow in my chatbot (one large branch in the dialog tree). If the conversation with the chatbot is longer than 10 minutes I would like to stop it and jump out of the branch. I could solve it by storing the current time when the conversation starts and then checking in each node if the time difference is larger than 10 minutes and if so, jumping out. But this is again not good style. How can I solve this more elegant?
Unfortunately Watson Assistant does not provide this feature. But we have a lot of ways to do that, cause Watson is one API and we have all the back-end to create custom code, for instance.
You can use the last request /message and create one setInterval, adding some condition if passed more than since the last request to /message as you would like to and send some message that you want.
if(inputTiming > 100000) {
response.output.text = 'Hey, are you there?';
return response
}
Timing Events with Javascript
With Latest Watson Assistant, you can do something like this -
{
"time": 5000,
"typing": true,
"response_type": "pause"
},

IntentRequest triggered by Response - without user-invocation

lets say i have a skill with 2 custom intents, 'FirstIntent' and 'SecondIntent'. SecondIntent also has a required slot, 'reqSlot'.
Now, i would like to sequence my intents. After my skill sent the FirstIntent-response, i would like Alexa to send a request with SecondIntent and a directive to elicit reqSlot, without the user to invoke it.
They say here, at the parameter 'updatedInted':
"Note that you cannot change intents when returning a Dialog directive, so the intent name and set of slots must match the intent sent to your skill."
Is this generally possilbe or did anyone figure out a workaround for this scenario?
Thanks :)
There are ways to handle this.
You can try:
When you send your first response it must set the shouldEndSession flag to false.
The end of your first response's output speech should lead the user into invoking the second response. For example: 'Say telephone number followed by your number'.
This way the user doesn't need to explicitly invoke your skill to get to the next intent.
It is not currently possible to cause Alexa to start speaking without a user first having spoken to it.
So for example, I cannot create a skill that will announce to my wife that "Ron is on his way home" whenever I leave work.
I can however, create a skill that my wife can ask "Is Ron on his way home", and it can respond with the answer.
Also, the new notifications allow a skill to post a notification, but this just causes the Alexa to light up its circular ring to indicate that a notification is waiting. A user must still ask Alexa to read it. In the example I cite above, that might be ok.
A lot of us would love for Alexa to be able to spontaneously start talking, but Amazon has not enabled that. Can you just imagine the opportunity for advertising abuse that functionality might enable? Nothing like sitting down watching TV and having Alexa start talking, "Hey, wouldn't some Wonder Popcorn taste great about now? We're having a sale..."

Creating a timer in Alexa Skill

I'm building an exercise skill for Alexa in Python 2.7.
I want Alexa to start a 10 second timer and say "Exercise". Once the 10 seconds is over Alexa should say "Stop".
I have tried doing this using the break SSML tag:
<speak>Exercise! <break time="10s"/> Stop </speak>
However this starts a timer/pause after "Exercise" has been said, I require the "Exercise" dictation to be inclusive of the 10 second timer.
Any ideas how I could implement this?
I think, you cannot run the lambda for more than the defined time limit.

Resources