1

在测试订购披萨的 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 函数来响应吗?

4

1 回答 1

0

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

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

于 2019-03-19T14:01:01.263 回答