在测试排序披萨的测试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 intent的任何话语时,会出现问题。 orderPizzaToppings intent调用另一个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美元的未定义。你想要任何浇头吗?请问!” 它似乎仍然是调用与orderPizzaSize意图相关联的第一个orderPizza Lambda函数,而不是正确的Lambda函数orderPizzaToppings。
奇怪的是,当我完全删除Lambda函数orderPizza时,将选项更改为“将参数返回给客户端”并重建机器人,它仍然会输出“你订购了一个未定义的11美元。你想要任何浇头吗? ?问问!“尽管Lambda函数甚至没有被调用。
有人知道为什么Lex还在回应“orderPizza”lambda函数吗?
答案 0 :(得分:0)
通过控制台UI或从外部服务调用Lex机器人时,您是否遇到问题?
如果是后者,请检查您所调用的Bot版本是否正确,以及是否使用正确的版本别名发布了更改。