亚马逊Lex调用错误的Lambda函数

时间:2017-09-13 19:15:18

标签: amazon-web-services aws-lambda chatbot amazon-lex

在测试排序披萨的测试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函数吗?

1 个答案:

答案 0 :(得分:0)

通过控制台UI或从外部服务调用Lex机器人时,您是否遇到问题?

如果是后者,请检查您所调用的Bot版本是否正确,以及是否使用正确的版本别名发布了更改。