многооборотный диалог подтверждения слотов в скиле алекса? - PullRequest
0 голосов
/ 08 июня 2018

Я написал этот код для подтверждения отдельного слота в lambda. Но это не работает. Только он будет называть слот имени, а не слот квалификации.

// Confirm slot: name
                if(intentObj.slots.name.name == "name") {
                    if (intentObj.slots.name.confirmationStatus !== 'CONFIRMED') {
                        if (intentObj.slots.name.confirmationStatus !== 'DENIED') {
                            // slot status: unconfirmed
                            const slotToConfirm = 'name';
                            const speechOutput = 'Your name is ' + intentObj.slots.name.value + ', is that right?';
                            //  const repromptSpeech = speechOutput;
                            this.emit(':confirmSlot', slotToConfirm, speechOutput);
                        } else {
                            // slot status: denied => ask again
                            const slotToElicit = 'name';
                            const speechOutput = 'What is your name?';
                            //const repromptSpeech = 'Please tell me what is your name';
                            const updatedIntent = 'DialogIntent';
                            this.emit(':elicitSlot', slotToElicit, speechOutput, updatedIntent);
                        }
                    }
                }

            // Confirm slot: qualification
            if(intentObj.slots.qualification.qualification == "qualification") {
                    if (intentObj.slots.qualification.confirmationStatus !== 'CONFIRMED') {
                        if (intentObj.slots.qualification.confirmationStatus !== 'DENIED') {
                            // slot status: unconfirmed
                            const slotToConfirm = 'qualification';
                            const speechOutput = 'Your qualification is ' + intentObj.slots.qualification.value + ', is that right?';
                            //  const repromptSpeech = speechOutput;
                            this.emit(':confirmSlot', slotToConfirm, speechOutput);
                        } else {
                            // slot status: denied => ask again
                            const slotToElicit = 'qualification';
                            const speechOutput = 'What is your qualification?';
                            //const repromptSpeech = 'Please tell me what is your qualification';
                            const updatedIntent = 'DialogIntent';
                            this.emit(':elicitSlot', slotToElicit, speechOutput, updatedIntent);
                        }
                    }
                }

Пожалуйста, поделитесь любой информацией о подтверждении слотов.

1 Ответ

0 голосов
/ 08 июня 2018

Оператор if вашего первого слота всегда будет выглядеть как истина.

if (intentObj.slots.name.name == "name") {...}

Это потому, что slots.slotName.name всегда будет слотомназвание.Это бесполезный оператор if.
Возможно, вы захотите проверить, установлен ли слот и не имеет ли значение null.Затем вы можете немного изменить свою логику.

if(intentObj.slots.name && intentObj.slots.name.value !== null) { 
    // check if confirmed or not
} else {
    // elicit slot "name"
}

Оператор if вашего второго слота всегда будет ложным.

if (intentObj.slots.qualification.qualification == "qualification") {

Это потому, что в массиве slots.slotName нет ключа qualification.Так что просто измените его так, чтобы он был похож на приведенный выше, проверяя, установлен ли слот qualification, а значение не равно нулю.

if(intentObj.slots.qualification && intentObj.slots.qualification.value !== null) { 
    // check if confirmed or not
} else {
    // elicit slot "qualification"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...