Search code examples
alexa-skills-kitalexa-slot

How to handle out of domain utterances in Amazon Alexa


I had different intents in the skill, I am using php as service. Everything is working fine, but if the user ask utterances that are not configured in any of the intents, it must go to the else part.

Eg code is as follows:-

if($EchoReqObj->request->type=="LaunchRequest"){
  $text = "Testing launch";
  $array = array("version"=>"1.0","response"=>array("outputSpeech"=>array("type"=>"PlainText","text"=>$text),"shouldEndSession"=>false));
  echo json_encode($array);
 }
else if(getting the intent name){//Do something.}
else{

  $text = "In else part";
  $array = array("version"=>"1.0","response"=>array("outputSpeech"=>array("type"=>"PlainText","text"=>$text),"shouldEndSession"=>false),"sessionAttributes"=>array("lastSpeech"=>$text));
  echo json_encode($array);
}

This is the else I wrote but it is not getting executed.


Solution

  • Alexa always tries to maps to the closest intent no matter what the user input is. You won't get an IntentRequest without an intent. So if you have five intents, Alexa will try to match all user utterances to one of these five skill's intents.

    Your else part executes when Alexa triggers an intent which haven't handled. From your example code a SessionEndedRequest might go into your else part. But if you are trying to handle out-of-domain utterances you have to use AMAZON.Fallback intent and handle it in your backend.

    AMAZON.FallbackIntent

    If you want to handle out-of-domain requests, or gibberish, or unexpected utterances, or when a user says something that doesn’t map to any intents in your skill you have to use predefined AMAZON.FallbackIntent. This intent uses an out-of-domain model generated based on your interaction model and provides a fallback for user utterances that do not match any of your skill's intents.

    More on AMAZON.FallbackIntent here