I have a use case where Alexa reads out a number of items (Tokyo, Paris, LA, Phoenix, Seattle, Washington, Ontario, Paris). While Alexa is reading out the cities, the user calls out a city. Alexa gives some information about the called city and continues reading out the rest of the cities.
Problem I am facing is that - if I use a “capture” block or “intent” block, Alexa stops reading and waits for the user input. Is there a way I can avoid Alexa stopping the conversation. Meaning - I don’t want Alexa to “wait” for a user input. But if input is given, it should process it.
I understand that capture block halts for an user input. But was assuming that an intent block is a “perpetual listener” and do the trick.
could you give us dialog sample you expect?
The skill is called “bingo City”.
- Load the question: “Where is Eiffel Tower?” (works ok)
- Let Alexa reads a city one at a time. No pause. (works ok)
- After a city is spoken, it is removed from array (works ok)
- Alexa continues to read the list of cities.
- at any point, the user can say "bingo ". Example: “bingo London”. The correct answer is “bingo Paris”, so if the the user says “bingo London”, Alexa should continue without stopping. This goes on until someone says “bingo Paris” or if the array is empty
- where I am facing a problem - If I use “Intent-Capture”. or if I use the “Intent-choice” , Alexa pauses for an input. I don’t want Alexa to pause. It should continue reading and continue to capture user input and if a user says "bingo ", it should check for the correct answer
Here is the screenshot of the conversation.
Hope I have explained it adequately.
Thanks! I think I kind of got it. However this is very difficult to explain. I am trying anyway.
- First, you may think Alexa speaks each city one by one, but actually, those are all buffered and speak all as a single response. For example, Alexa says “Paris” and user says “Bingo”, skill doesn’t know where users interupts. like at the time of “Paris”.
- If you put interaction/capture in the flow, Alexa always wait for users’ interaction. In your case, “Bingo city_name” should be sample utterance for that intent and if sample utterances matches for it, Alexa will try to capture what user say. It cannot be skipped. Alexa always capture first.
- Capture block is for capturing what user says IN the flow. you cannot use with intent block.
- Using Intent block, you can interrupt anytime, but still skill doesn’t know where users interupts.
Anyway, in your use case, the point is getting where user interupts. this might be tricky but you should use some kind of time-based logic, I think. I’ve not tried but something like this.
Alexa: Tokyo. (5s)
Alexa: Paris. (5s)
Alexa: LA. (5s)
User: Alexa, Bingo.
(Timer ends and calculate the difference from timer ends - timer starts. Then check if the difference is when Alexa speak Paris (about 10s). it is correct, get out from loop, otherwise continue incorrect)
Alexa: Wrong! will continue. Phoenix…(continue from based on the difference)
But for me, this is very complicated. I think Alexa is not good at this type of skill which requires the right timing to invoke…