对话流复合实体参数在不应定义时未定义



长话短说,我正在制作一个房地产经纪人聊天机器人,我刚刚实现了一个过滤器,允许用户在一系列数字内进行搜索(例如,至少一间卧室,低于 2500 美元(。为了做到这一点,我制作了一个由范围类型(例如,最多,确切地说(和实体本身(价格的单位货币,加上一些自定义实体,如卧室数量(组成的entity_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之前,我的代码看起来完全相同,只是参数和["单位货币"之间没有["entity_range"]。无论如何,此代码记录:

price: undefined
could not find parameter

在输入"2500 美元多少"之后,并显示以下诊断信息:

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

因此,实体"单位货币"被对话流识别,但不能被我的程序识别。 entity_range确实允许用户不指定范围,所以这不是问题所在: 在此处查看屏幕截图。

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

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

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

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

最新更新