在测试订购披萨的 Lexbot 时,我遇到了一个错误,即 Lexbot 调用了错误的 Lambda 函数并输出了结果。
我有两个意图,“orderPizzaSize”和“orderPizzaToppings”。
orderPizzaSize 意图有一个槽类型 PizzaSize。此插槽类型包含值“小比萨”、“中比萨”和“大比萨”。orderPizzaSize 意图要求实现的 lambda 函数是“orderPizza”。代码如下:
exports.handler = (event, context, callback) => {
var pizzaSizeChoice = event.currentIntent.slots.pizzaSize;
var price = "free";
if (pizzaSizeChoice == "small pizza"){
price = "6 dollars";
}
else if (pizzaSizeChoice == "medium pizza"){
price = "8 dollars";
}
else if (pizzaSizeChoice == "large pizza"){
price = "10 dollars";
}
else {
price = "11 dollars";
}
callback(null, {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "You have ordered a " + event.currentIntent.slots.pizzaSize + " for " + price + ". Would you like any toppings? Just ask!"
}
}
});
};
当用户说出 orderPizzaSize 的任何话语时,此 Lambda 函数可以正常工作。它将输出“您以 10 美元的价格订购了一个大披萨。您想要任何配料吗?问吧!”
当调用 orderPizzaToppings 意图的任何话语时,就会出现问题。orderPizzaToppings 意图调用另一个 Lambda 函数“orderPizzaToppings”。此函数的代码如下:
exports.handler = (event, context, callback) => {
var pizzaToppingsChoice = event.currentIntent.slots.pizzaToppings;
var price = "free";
if (toppings == "mushrooms"){
price = "1 dollar";
}
else if (pizzaToppingsChoice == "peppers"){
price = "2 dollars";
}
else if (pizzaToppingsChoice == "onions"){
price = "3 dollars";
}
else if (pizzaToppingsChoice == "sausage"){
price = "4 dollars";
}
else if (pizzaToppingsChoice == "extra cheese"){
price = "5 dollars";
}
else if (pizzaToppingsChoice == "pepperoni"){
price = "6 dollars";
}
else {
price = "10 dollars";
}
callback(null, {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": "You put " + event.currentIntent.slots.pizzaToppings + " for an extra " + price + "."
}
}
});
};
当说出任何 orderPizzaToppings 话语时,它会输出“您以 11 美元的价格订购了一个 undefined。您想要任何浇头吗?问吧!” 它似乎仍在调用与 orderPizzaSize 意图关联的第一个 orderPizza Lambda 函数,而不是正确的 Lambda 函数 orderPizzaToppings。
奇怪的是,当我完全删除 Lambda 函数 orderPizza,将选项更改为“向客户端返回参数”并重新构建机器人时,它仍然会输出“您以 11 美元的价格订购了一个未定义的。你想要任何浇头吗?问!” 尽管 Lambda 函数甚至没有被调用。
有人知道为什么 Lex 仍然使用“orderPizza”lambda 函数来响应吗?