Как получить пользовательские значения слотов намерений, используя handlerInput в ASK-SDK v2
Я создаю базовый навык калькулятора, используя ASK-SDK v2. Я не уверен, как получить значения слота, предоставленные пользователем, в лямбда-код с новой версией. Я смог заставить его работать со старой версией.
Диалог Пользователь: Открыть подсчет Алекса: Вы можете попросить меня сложить, вычесть, умножить и разделить Пользователь: Добавить два и три Алекса: сумма 2 и 3 равна 5
Ниже моя IntentSchema
{
"interactionModel": {
"languageModel": {
"invocationName": "calculate",
"intents": [
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": []
},
{
"name": "AddIntent",
"slots": [
{
"name": "numA",
"type": "AMAZON.NUMBER"
},
{
"name": "numB",
"type": "AMAZON.NUMBER"
}
],
"samples": [
"Sum of {numA} and {numB}",
"add {numA} and {numB}"
]
},
{
"name": "SubIntent",
"slots": [
{
"name": "numA",
"type": "AMAZON.NUMBER"
},
{
"name": "numB",
"type": "AMAZON.NUMBER"
}
],
"samples": [
"difference between {numA} and {numB}",
"subtract {numA} from {numB}"
]
},
{
"name": "ProductIntent",
"slots": [
{
"name": "numA",
"type": "AMAZON.NUMBER"
},
{
"name": "numB",
"type": "AMAZON.NUMBER"
}
],
"samples": [
"multiply {numA} and {numB}",
"product of {numA} and {numB}"
]
},
{
"name": "DivideIntent",
"slots": [
{
"name": "numA",
"type": "AMAZON.NUMBER"
},
{
"name": "numB",
"type": "AMAZON.NUMBER"
}
],
"samples": [
"divide {numB} by {numA}",
"divide {numA} by {numB}"
]
},
{
"name": "ExponentialIntent",
"slots": [
{
"name": "numA",
"type": "AMAZON.NUMBER"
},
{
"name": "numB",
"type": "AMAZON.NUMBER"
},
{
"name": "numC",
"type": "AMAZON.NUMBER"
}
],
"samples": [
"{numA} raised to the power of {numB} by {numC}",
"{numA} raised to the power {numB}"
]
},
{
"name": "AMAZON.NavigateHomeIntent",
"samples": []
}
],
"types": []
}
}
}
Я добавляю addintenthandler здесь. Скажите, пожалуйста, правильный ли подход, который я использую для получения значений слотов из намерения, или я должен использовать sessionattributes
const AddIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === 'AddIntent';
},
handle(handlerInput) {
var output1 = "";
var num1 = handlerInput.resuestEnvelope.request.intent.slots.numA.value;
var num2 = handlerInput.resuestEnvelope.request.intent.slots.numB.value;
if((num1)&&(num2)){
output1 = 'The sum of ' +num1+ ' and ' +num2+ ' is ' + (num1+num2);
}
else {
output1 = 'Enter valid number';
}
const speechText = output1;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
Alexa отвечает "Невозможно обработать запрошенный ответ на навык". Любая помощь приветствуется.
1 ответ
У вас есть опечатка, resuestEnvelope
должно быть requestEnvelope
, В любом случае я создал точно такой же навык, калькулятор (на испанском, но это в основном то же самое), и я использую вспомогательную функцию под названием getSlotValues()
который я призываю вас использовать повторно. Это также будет прекрасно работать, когда вам нужно захватить пользовательские слоты (которые обрабатываются по-разному, потому что структура разрешения сущности отличается):
https://github.com/germanviscuso/skill-sample-nodejs-mycalculator