SETUP: I have a custom skill created for Alexa using alexa-sdk and aws-sdk as part of my node_modules package I deploy to Lambda, together with one index.js file. Everything is javascript/node.js. Skill is created in developer.amazon as a (US) skill.
INTERACTION: The skill is invoked with: open product catalog. Skill opens successfully. The skills has different states (handler) it can be in, which determine which intents are handled:
alexa.registerHandlers(newSessionHandler, startGameHandlers, askQuestionHandlers);
states are switched as so: this.handler.state = states.ASKMODE;
and every state handles certain intents, for example:
'TellMeMoreAboutIntent': function () { helper.moreAbout(this); },
The way the skill works is the user starts in STARMODE, opens the catalog and goes to ASKMODE and from there can browse different products in the catalog. Every product has a description and sometime sub-products (nodes - children). If Alexa doesn't understand the user she should go to DidNotUnderStandIntent. My interaction model is set up in such a way to prefer this intent over others.
ERROR: All of my tests in the amazon developer console - service simulator are returned with the appropriate response. However when moving over to my physical Amazon Echo device the skill will only work if everything is said/understood by Alexa PERFECTLY. But in certain scenarios, for example if the user has just moved to ASKMODE and then uses the utterance again, then Alexa on the console will use the DidNotUnderStandIntent but on the Echo the device simply says:
"There was a problem communicating with the requested application" and exits. There are no logs on the Cloud following this interaction so it's impossible to debug.
Furthermore what I noticed is that when I went back to my interaction model my sample utterances and my Intent schema had been moved around ON IT'S OWN, following this. In my sample utterances I have resorted to having many DidNotUnderStandIntent, since I noticed when Alexa doesn't understand a user she will try to "infer" what he meant and go to another Intent, but what I want is to simply handle is with a DidNotUnderStandIntent and re-prompt the user.