Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alexa Intent Schema: Random input being identified as intents

I have two intents that use the same slot types. However, if the input is a random string, Alexa automatically identifies an intent in its JSON request even though it is not part of the utterances. For example, in the example below, if the user input was 'bla bla bla', GetAccountBalance is identified as the intent with no slot value even though it is not part of provided utterances.

What is the way to error-check for these cases and what is the best practice to avoid cases like this when developing the intent schema? Is there a way to create an intent that can handle all random inputs?

Example Schema:

{
  "intents": [
    {
      "intent": "GetAccountBalance",
      "slots": [
        {
          "name": "AccountType",
          "type": "ACCOUNT_TYPE"
        }
      ]
    },
    {
      "intent": "GetAccountNumber",
      "slots": [
        {
          "name": "AccountType",
          "type": "ACCOUNT_TYPE"
        }
      ]
    }
  ]
}

Utterances:

GetAccountBalance what is my account balance for {AccountType} Account
GetAccountBalance what is my balance for {AccountType} Account
GetAccountBalance what is the balance for my {AccountType} Account
GetAccountBalance what is {AccountType} account balance
GetAccountBalance what is my account balance
GetAccountBalance what is account balance
GetAccountBalance what is the account balance
GetAccountBalance what is account balance

GetAccountNumber what is my account number for {AccountType} Account
GetAccountNumber what is my number for {AccountType} Account
GetAccountNumber what is the number for my {AccountType} Account
GetAccountNumber what is {AccountType} account number
GetAccountNumber what is my account number
GetAccountNumber what is account number
GetAccountNumber what is the account number
GetAccountNumber what is account number
like image 781
skbrhmn Avatar asked Mar 21 '17 15:03

skbrhmn


People also ask

What are intents in Alexa?

Intents: An intent represents an action that fulfills a user's spoken request. Intents can optionally have arguments called slots. Intents are specified in a JSON structure called the intent schema. Sample utterances: A set of likely spoken phrases mapped to the intents.

What is intent slot annotation?

“Intent” describes the action that the skill is being asked to perform, such as PlayTune or ActivateAppliance. And “slot” describes the entities and classes of entities on which the action is to operate, such as “song,” “'Thriller,'” and “Michael Jackson” in the command “Play 'Thriller' by Michael Jackson.”

Are the specific phrases that people will use when making a request to Alexa?

Utterances are phrases the users will use when making a request to Alexa. Alexa identifies the user's intent from the given utterance and responds accordingly.

What is a prompt in Alexa?

Catch the latest on ambient intelligence, smart home, and AI. A prompt is when the device invites input from the user. This could be in the form of a question or a selection of options for the user to choose from.


3 Answers

There is one hack to resolve this problem:

If no any match found(random string) Amazon always take intent with highest no of utterances. So I created one intent 'DidNotUnderstand' and add as many random utterances as I can (Be moderate enough) in result if no any match found alexa will call 'DidNotUnderstand' intent.

Please refer first reply from below link: https://forums.developer.amazon.com/questions/4856/intent-triggering-without-utterance-match.html

like image 53
Nidhish Avatar answered Sep 29 '22 10:09

Nidhish


When developing an Alexa skill, Alexa will always pick an intent to fire even if the user speaks pure gibberish. As far as I'm aware, there isn't a way to set a default / catch-all intent.

In terms of error handling, the following passage from the docs is really important.

Note that a custom slot type is not the equivalent of an enumeration. Values outside the list are still returned if recognised by the spoken language understanding system. Although input to a custom slot type is weighted towards the values in the list, it is not constrained to just the items on the list. Your code still needs to include validation and error checking when using slot values.

The link above also has a few follow up links which dive further into the topic error handling.

like image 34
user3508122 Avatar answered Sep 29 '22 11:09

user3508122


As per the documentation:

The AMAZON.FallbackIntent (available in English (US) only) is triggered when the user's spoken input does not match any of the other intents in the skill. AMAZON.FallbackIntent is matched to an automatically-generated out-of-domain model.

Code snippet:

'AMAZON.FallbackIntent': function (intent, session, response) {
    response.ask("Optimus Prime didn't get that one....","");
}
like image 28
dd619 Avatar answered Sep 29 '22 10:09

dd619