对话流实现:Webhook调用失败。错误:500内部服务器错误

时间:2019-01-17 05:09:22

标签: dialogflow actions-on-google

因此,我试图通过Dialogflow建立有关维生素的对话。但是,我不断收到相同的错误,因此,AI也给出了相同的响应。所以我们想要发生的是 (用户)-给我更多有关维生素的信息 (AI)-好的。哪种维生素 (用户)-*这里我们指定使用哪种维生素,例如-*维生素A。 (AI)-然后AI给我们指定的维生素A反应

请帮助

  

这是我们实现的代码

const functions = require('firebase-functions');
const {dialogflow} = require('actions-on-google')

const VITAMIN_INTENT = 'Vitamin'
const VITAMINS_ENTITY = 'Vitamins'

const app = dialogflow()

app.intent(VITAMIN_INTENT, (conv) => {
    const vitamin_type = conv.parameters[VITAMINS_ENTITY].toLowerCase();
    if (vitamin_type == 'Vitamin A') {
    conv.ask("Sources: carrots, sweet potato, green leafy vegetable, squash")
    } else if (vitamin_type == 'Vitamin B') {
        conv.ask("Sources: Animal products (such as fish, poultry, meat, eggs, or dairy); Also found in fortified breakfast cereals and enriched soy or rice milk.")
    } else if (vitamin_type == 'Vitamin B1') {
        conv.ask("Sources: Sunflower seeds, asparagus, lettuce, mushrooms, black beans, navy beans, lentils, spinach, peas, pinto beans, lima beans, eggplant, Brussels sprouts, tomatoes, tuna, whole wheat, soybeans.")
    } else if (vitamin_type == 'Vitamin B2') {
        conv.ask("Sources:B2 ")
    } 
})
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app)

1 个答案:

答案 0 :(得分:1)

错误500通常表明您的程序由于某种原因而崩溃,尽管不查看日志,也很难确切说明原因。

我的猜测是,在该部分

const vitamin_type = conv.parameters[VITAMINS_ENTITY].toLowerCase();

您没有名为“维生素”的参数。参数名称区分大小写,并且通常都是小写字母。因此conv.parameters[VITAMINS_ENTITY]的值为undefined,而undefined没有函数.toLowerCase()

此外,您的代码中至少还有一个逻辑问题。线

const vitamin_type = conv.parameters[VITAMINS_ENTITY].toLowerCase();

可确保字符串vitamin_type为小写。因此,诸如“维生素a”之类的值。

但是,当您测试这些值时,您将使用诸如

之类的比较
if (vitamin_type == 'Vitamin A') {

将其与“维生素A”之类的值进行比较。因此,这些值将永远不匹配。

由于所有值都不匹配,因此您将退出函数而无需调用conv.ask(),这将产生错误。 (虽然不是错误500。)