Dialogflow es 使用DialogFlow时如何创建购物车并计算总金额?

Dialogflow es 使用DialogFlow时如何创建购物车并计算总金额?,dialogflow-es,Dialogflow Es,最近,我开始用DialogFlow创建比萨饼订购聊天机器人,但不知道如何用它创建购物车,也不知道如何计算订单总额加上用户必须支付的总金额。 这里有一些我一直在做但不起作用的东西,“basket”参数似乎是空的 这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。该脚本是当客户要求比萨饼时,他们必须在意向中填写3个值:大小、类型和数量 “item.start”-此意图将包含两个上下文,分别是“item”和“item

最近,我开始用DialogFlow创建比萨饼订购聊天机器人,但不知道如何用它创建购物车,也不知道如何计算订单总额加上用户必须支付的总金额。 这里有一些我一直在做但不起作用的东西,“basket”参数似乎是空的

这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。该脚本是当客户要求比萨饼时,他们必须在意向中填写3个值:大小、类型和数量

“item.start”-此意图将包含两个上下文,分别是“item”和“item confirm”,以表示“item.confirm.yes”。此时,如果客户确认订单,“item.confirm.yes”意图将显示上下文“basket”

这里有一些关于“意向”项的日志记录。确认。是的

索引json

'use strict';

const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');

process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements

exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
  const agent = new WebhookClient({ request, response });
  console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
  console.log('Dialogflow Request body: ' + JSON.stringify(request.body));

  let intentMap = new Map();

  function showBasket(agent) {
     if (agent.context.get('basket') != null) {
       const basket = agent.context.get('basket'),
             basketItems = basket.parameters.items,
             itemKeys = Object.keys(basketItems);

       var basketOutput = `So far you've got: `;
       for (let i = 0; i < itemKeys.length; i++) {
         let item = basketItems[itemKeys[i]];
         if ((i < 0) && (i === itemKeys.length - 1)) {
           basketOutput += ` and `;
         }
         else if (i > 0) {
           basketOutput += `, `;
         }
         basketOutput += `${item.amount} ${item.type} in ${item.size}`;
       }
       agent.add(basketOutput);
     }
    else {
      agent.add(`There's nothing in your basket`);
    }
  }

  function confirmItem(agent) {
    const item = agent.context.get('item'),
          amount = item.parameters.amount,
          size = item.parameters.size,
          type = item.parameters.type;

    var basketContext = {'name': 'basket', 'lifespan':50, 'parameters': {}},
        items = {};
    if (agent.context.get('basket')) {
      items = agent.context.get('basket').parameters.item;
    }
    item[request.body.responseId] = {
      "type": type,
      "size": size,
      "amount": amount
    };
    basketContext.parameters.items = items;
    console.log(JSON.stringfy(basketContext));
    agent.context.set(basketContext);
    agent.add(`Confirming ${amount} ${type} pizza in ${size}. Anything else ?`);
  }


  intentMap.set('order.showbasket', showBasket);
  intentMap.set('item.confirm.yes', confirmItem);
  agent.handleRequest(intentMap);
});
当我想把篮子拉出来的时候 诊断信息

{
  "responseId": "bcad0d74-58ae-4f7a-9e00-532ae296b7e6-dd2bbea9",
  "queryResult": {
    "queryText": "basket",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            ""
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/pizzadelivery-gyahra/agent/sessions/7180f8e2-a871-a1d5-694b-44f8395c6c30/contexts/basket",
        "lifespanCount": 1
      }
    ],
    "intent": {
      "name": "projects/pizzadelivery-gyahra/agent/intents/fef12ceb-ba15-4b84-9a5f-406aa648c5c8",
      "displayName": "order.showbasket"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 4988
    },
    "languageCode": "en"
  },
  "webhookStatus": {
    "code": 4,
    "message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
  },
  "alternativeQueryResults": [
    {
      "queryText": "basket",
      "languageCode": "en"
    }
  ]
}
我点了一个大的意大利香肠披萨,确认了吗

{
  "responseId": "04942abf-da3c-4074-9b5b-2fcaf97c053a-9aa0e9ed",
  "queryResult": {
    "queryText": "yes",
    "parameters": {},
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Great, anything else ?",
    "fulfillmentMessages": [
      {
        "text": {
          "text": [
            "Great, anything else ?"
          ]
        },
        "platform": "FACEBOOK"
      },
      {
        "text": {
          "text": [
            "Great, anything else ?"
          ]
        }
      }
    ],
    "outputContexts": [
      {
        "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket",
        "lifespanCount": 1,
        "parameters": {
          "amount": 1,
          "type": "Pepperoni",
          "size": "large",
          "type.original": "pepperoni",
          "amount.original": "one",
          "size.original": "large"
        }
      },
      {
        "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item",
        "lifespanCount": 4,
        "parameters": {
          "amount": 1,
          "type": "Pepperoni",
          "size": "large",
          "type.original": "pepperoni",
          "amount.original": "one",
          "size.original": "large"
        }
      },
      {
        "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item-confirm",
        "lifespanCount": 4,
        "parameters": {
          "size.original": "large",
          "amount": 1,
          "type": "Pepperoni",
          "size": "large",
          "type.original": "pepperoni",
          "amount.original": "one"
        }
      }
    ],
    "intent": {
      "name": "projects/pizzadelivery-gyahra/agent/intents/0723f0a9-9f7e-4c04-a57d-0218c2c3ecf9",
      "displayName": "item.confirm.yes"
    },
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "webhook_latency_ms": 4992
    },
    "languageCode": "en"
  },
  "webhookStatus": {
    "code": 4,
    "message": "Webhook call failed. Error: DEADLINE_EXCEEDED."
  },
  "alternativeQueryResults": [
    {
      "queryText": "yes",
      "outputContexts": [
        {
          "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket",
          "lifespanCount": 4,
          "parameters": {
            "size.original": "large",
            "amount": 1,
            "type": "Pepperoni",
            "size": "large",
            "type.original": "pepperoni",
            "amount.original": "one"
          }
        },
        {
          "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item",
          "lifespanCount": 4,
          "parameters": {
            "amount": 1,
            "type": "Pepperoni",
            "size": "large",
            "type.original": "pepperoni",
            "amount.original": "one",
            "size.original": "large"
          }
        },
        {
          "name": "projects/pizzadelivery-gyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/item-confirm",
          "lifespanCount": 4,
          "parameters": {
            "size": "large",
            "type.original": "pepperoni",
            "amount.original": "one",
            "size.original": "large",
            "amount": 1,
            "type": "Pepperoni"
          }
        }
      ],
      "languageCode": "en"
    }
  ]
}

虽然如果我们能看到生成的所有日志记录会很有帮助,但有几件事情可以指出正在发生的事情的方向

需要特别注意的是,
outputContext
设置为

"outputContexts": [
  {
    "name": "projects/pizzadelivery-gyahra/agent/sessions/7180f8e2-a871-a1d5-694b-44f8395c6c30/contexts/basket",
    "lifespanCount": 1
  }
],
这表明,至少当我们看到这个调试时,
basket
上下文的寿命为1,并且没有参数。这显然与您在
confirItem(agent)
中尝试执行的操作不同,因此查看与触发该意图相关联的日志可能很有用

但是,它确实解释了调用
showBasket(代理)
处理程序时发生的情况。因为没有任何参数,所以您的行

         basketItems = basket.parameters.items,
正在导致错误,因为
篮子。参数
未定义。由于它会导致错误,并且您没有任何
catch
部分,因此整个函数会在不发送响应的情况下出错。由于没有发送响应,Dialogflow最终会超时等待,如错误所示

"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."

感谢您花时间帮助我了解代码中发生了什么。这里有一些东西可以为您提供有关我的DialogFlow中发生的事情的更多信息。所以我有一个意向名称“item.confirm.yes”。脚本是当客户要求比萨饼时,他们必须在意向“item.start”中填写3个值:大小、类型和数量-此意向将包含两个上下文,即“item”和“item confirm”到意向“item.confirm.yes”。此时,如果客户确认他们的订单,“item.confirm.yes”意图将显示上下文“basket”。下面是一些关于intent“item.confirm.yes”的日志:“name”:“projects/pizzaderygyahra/agent/sessions/498ae696-5e2e-589e-7402-4fd1b803579f/contexts/basket”,“lifespanCount”:5,“parameters”:{“原版尺寸”:“大”、“数量”:2,“类型”:“辣香肠”,“大小”:“大”、“类型.原版”:“辣香肠”,“数量.原版”:“2”}`如果你有额外的信息,你应该更新你原来的问题,然后评论你已经这样做了。在评论中加入详细的信息和代码是很难阅读的,一般来说没有什么用处。嘿,我更新了我的问题,请检查并给我你的意见,非常赞赏。你说它不起作用是什么意思k?您特别有哪些错误/困难?
"message": "Webhook call failed. Error: DEADLINE_EXCEEDED."