1

I have an intent to request a bank account info by it's number. I tried with only one slot of AMAZON.Number but if the account number is ***012345, Alexa understand this as ***012337 (last two digits are wrong). So now I use five slots for this (numberA, numberB, numberC, numberD and numberE, all those are AMAZON.Number) and concat their values (and works great).

My json model:

{
    "name": "GetAccountInfo_Intent",
    "slots": [
        {
            "name": "question",
            "type": "TYPE_getRequest"
        },
        {
            "name": "owner",
            "type": "TYPE_owner"
        },
        {
            "name": "accountByNumber",
            "type": "TYPE_accountByNumber"
        },
        {
            "name": "numberA",
            "type": "AMAZON.NUMBER"
        },
        {
            "name": "numberB",
            "type": "AMAZON.NUMBER"
        },
        {
            "name": "numberC",
            "type": "AMAZON.NUMBER"
        },
        {
            "name": "numberD",
            "type": "AMAZON.NUMBER"
        },
        {
            "name": "numberE",
            "type": "AMAZON.NUMBER"
        }
    ],
    "samples": [            
        "{owner} {accountByNumber} {numberA} {numberB} {numberC} {numberD} {numberE}",
        "{accountByNumber} {owner} {numberA} {numberB} {numberC} {numberD} {numberE}",
        "{accountByNumber} {numberA} {numberB} {numberC} {numberD} {numberE}",
        "{question} {accountByNumber} {numberA} {numberB} {numberC} {numberD} {numberE}",
        "{question} {owner} {accountByNumber} {numberA} {numberB} {numberC} {numberD} {numberE}",
        "{question} {accountByNumber} {owner} {numberA} {numberB} {numberC} {numberD} {numberE}"
    ]
},

I want the conversation with Alexa be something like this:

Me: Get my account with number ***012345.

Alexa: Did you request info from account number ***012345?

Me: Yes.

Alexa: Did you want all info, just IBAN or just bank name?

Me: Just bank.

Alexa: Your account with the number ***012345 belongs to bank XPTO.

Me: Can you repeat?

Alexa: Your account with the number ***012345 belongs to bank XPTO.

So I already searched a lot about dialog management (like this manual and many others links). But how can I request confirmation for multiple slots as one like my case? All must be checked to confirmation? How can I solve this? There is some good example for my case?

My lambda code:

"GetAccountInfo_Intent": function () 
{  
    var intent = this;

    var number1Value = getSlotValue(intent.event.request.intent, "numberA");
    var number2Value = getSlotValue(intent.event.request.intent, "numberB");
    var number3Value = getSlotValue(intent.event.request.intent, "numberC");
    var number4Value = getSlotValue(intent.event.request.intent, "numberD");
    var number5Value = getSlotValue(intent.event.request.intent, "numberE");

    var value = number1Value;

    if(value == null)
        value = number2Value;
    else if(number2Value != null)
        value += number2Value;

    if(value == null)
        value = number3Value;
    else if(number3Value != null)
        value += number3Value;

    if(value == null)
        value = number4Value;
    else if(number4Value != null)
        value += number4Value;

    if(value == null)
        value = number5Value;
    else if(number5Value != null)
        value += number5Value;

    var updatedIntent = this.event.request.intent;
    if (this.event.request.dialogState === 'STARTED') 
    {
          this.response.speak("dialogState STARTED");
          this.emit(':delegate', updatedIntent);
    } 
    else if (this.event.request.dialogState != 'COMPLETED')
    {
        if(value == null)
            this.emit(':elicitSlot', "numberA", "What are the account number you pretend?", "You must provide a account number. What are the account number you pretend?");
        else
            this.emit(':delegate', updatedIntent);
    } 
    else 
    {
        if(this.event.request.intent.confirmationStatus == 'CONFIRMED'){
            this.response.speak("Your account number are " + value + ".");
            this.emit(':responseReady');
        }
        else{
            this.response.speak("Please repeat your account number again.");
            this.emit(':responseReady');
         }
    }
},

I also do not understand the logic that the examples show for the lambda function (like in my code). How can I make this.emit(':elicitSlot') for all the slots as one?

Testing this on Alexa Developer Console is terrible. I can't debug on this... It is always saying "There was a problem with the requested skill's response".

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.