不应将Dialogflow复合实体参数设为未定义

时间:2018-07-04 18:59:04

标签: javascript node.js dialogflow

长话短说,我正在制作一个房地产经纪人聊天机器人,我刚刚实现了一个过滤器,允许用户在一定范围内搜索数字(例如,至少一间卧室,价格低于2500美元)。为了做到这一点,我制作了一个object_range复合实体,该实体由范围类型(​​例如,至多是精确的)和实体本身(价格的单位货币,再加上一些自定义实体,例如卧室数量)组成。在创建entity_range之前,实体本身可以正常工作。但现在看来,entity_range的实体部分未定义。在下面查看我的代码示例:

function get_count(req, res) {
  console.log("price: " + req.queryResult.parameters["entity_range"]["unit-currency"])
  var price, beds, baths, num_filter_funct
  if(req.queryResult.parameters["entity_range"]["unit-currency"] != undefined) {
    price = req.queryResult.parameters["entity_range"]
    console.log("price: " + price)
  } else {
    console.log("could not find parameter")
  }

在创建entity_range之前,我的代码看起来完全一样,除了参数和[“ unit-currency”]之间没有[“ entity_range”]。无论如何,此代码记录:

price: undefined
could not find parameter

在输入“ 2500美元的价格”之后,带有以下诊断信息:

...
"queryResult": {
    "queryText": "how many for $2500",
    "parameters": {
      "entity_range": [
        {
          "unit-currency": {
            "amount": 2500,
            "currency": "USD"
          }
        }
      ]
    }...

因此Dialogflow可以识别实体“ unit-currency”,而我的程序无法识别。 entity_range确实允许用户不指定范围,所以这不是问题: see screenshot here

非常感谢您提供的任何建议!

1 个答案:

答案 0 :(得分:1)

该JSON显示Entity_range是数组而不是对象。一个对象。

parameters.entity_range [0] [“单位货币”]应该有效。注意[0]。您还需要在此之前添加一些检查,以确保enitiy_range存在并且其长度> 0。

这只是一个猜测,但也许您错误地在dialogflow中单击了此参数的“列表”框?我正在检查它可能会使它成为一个对象而不是数组,并且您现有的代码可以正常工作。