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