alexa技能中的多轮对话插槽确认?

multi-turn dialog slots confirmation in alexa skill?

我在 lambda.But 中编写了用于确认个人插槽的代码,这不是 work.Only 它会调用名称插槽而不是资格插槽。

// 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);
                        }
                    }
                }

请分享有关插槽确认的任何信息。

您的第一个插槽的 if 声明将始终为真。

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

这是因为 slots.slotName.name 将始终是广告位的名称。这是一个无用的 if 语句。
您可能想检查插槽是否已设置且值不为空。然后你可以稍微改变一下你的逻辑。

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"
}