У меня есть метод, размещенный на Alexa (node.js)
пользователь: поговорить с тестовым ботом
алекса: добро пожаловать! вы можете обновить название или заказать еду. Что ты хочешь делать?
пользователь: заказ еды
алекса: можно заказать бургер, суп и коктейль. Что ты хочешь иметь?
пользователь: бургер
Алекса: Какой бургер вы бы предпочли: вегетарианский, индейский, с говядиной или классический бургер?
пользователь: veggie
алекса: ваш заказ на вегетарианский бургер размещен.
но всякий раз, когда пользователь говорит menutype (гамбургер), alexa отвечает как «Возникла проблема с ответом на запрошенный навык»
это мой код
const StartedInProgressOrderFoodIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
&& handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.addDelegateDirective()
.getResponse();
}
};
const BurgerGivenOrderFoodIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
&& handlerInput.requestEnvelope.request.intent.slots.menu.value
&& handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Burger'
&& !handlerInput.requestEnvelope.request.intent.slots.burgerType.value
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak('Which burger would you like Veggie, Turkey, Beef, or Classic burger?')
.reprompt('Would you like a Veggie, Turkey, Beef, or Classic burger?')
.addElicitSlotDirective('burgerType')
.getResponse();
}
};
const SoupGivenOrderFoodIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
&& handlerInput.requestEnvelope.request.intent.slots.menu.value
&& handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Soup'
&& !handlerInput.requestEnvelope.request.intent.slots.soupType.value
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak("Which would you like tomato, manchow, onion, or corn soup?")
.reprompt("Would you like a tomato, manchow, onion, or corn soup?")
.addElicitSlotDirective('soupType')
.getResponse();
}
};
const ShakeGivenOrderFoodIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
&& handlerInput.requestEnvelope.request.intent.slots.menu.value
&& handlerInput.requestEnvelope.request.intent.slots.menu.value === 'Shake'
&& !handlerInput.requestEnvelope.request.intent.slots.shakeType.value
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak("Which would you like banana, chocolate, vanilla, milk, strawberry, or mango shake?")
.reprompt("Would you like a banana, chocolate, vanilla, milk, strawberry, or mango shake?")
.addElicitSlotDirective('shakeType')
.getResponse();
}
};
const CompletedOrderFoodIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === "IntentRequest"
&& handlerInput.requestEnvelope.request.intent.name === "OrderFoodIntent"
&& handlerInput.requestEnvelope.request.dialogState === "COMPLETED";
},
handle(handlerInput){
const menu = handlerInput.requestEnvelope.request.intent.slots.menu.value;
let type;
if (menu === 'Burger') {
type = handlerInput.requestEnvelope.request.intent.slots.burgerType.value;
} else if (menu === 'Soup') {
type = handlerInput.requestEnvelope.request.intent.slots.soupType.value;
} else if (menu === 'Shake') {
type = handlerInput.requestEnvelope.request.intent.slots.shakeType.value;
}
const speechText = `Your order for ${type} ${menu} has been placed.`;
return handlerInput.responseBuilder
.speak(speechText)
.getResponse();
}
};
Ответ статуса ввода JSON
"status": {
"code": "ER_SUCCESS_MATCH"
},
Выходной ответ JSON
{
"body": {
"version": "1.0",
"response": {
"directives": [
{
"type": "Dialog.Delegate"
}
],
"type": "_DEFAULT_RESPONSE"
},
"sessionAttributes": {},
"userAgent": "ask-node/2.7.0 Node/v10.19.0"
}
}