长话短说,我正在制作一个房地产经纪人聊天机器人,我刚刚实现了一个过滤器,允许用户在一定范围内搜索数字(例如,至少一间卧室,价格低于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。
非常感谢您提供的任何建议!
答案 0 :(得分:1)
该JSON显示Entity_range是数组而不是对象。一个对象。
parameters.entity_range [0] [“单位货币”]应该有效。注意[0]。您还需要在此之前添加一些检查,以确保enitiy_range存在并且其长度> 0。
这只是一个猜测,但也许您错误地在dialogflow中单击了此参数的“列表”框?我正在检查它可能会使它成为一个对象而不是数组,并且您现有的代码可以正常工作。