我在一个应用程序上工作,我根据用户的“价格范围”在我的库存中显示产品..
我需要知道如何提取输入文本中输入的值(价格)。
我尝试使用系统实体@sys-currency& @sys-number但我只能提取一个值(第一个值)..
示例:
用户要求“显示200美元到500美元之间的产品”
如何提取要与单个产品价格进行比较的值并显示相关产品..
建议赞赏..
答案 0 :(得分:0)
如果您正在使用nodejs,基于IBM Developers中的会话简单示例,您可以执行以下操作:
节点:
访问此值的代码:
function updateMessage(input, data, req, res) {
console.log("Entties: "+JSON.stringify(data.entities));
//200 and 500 do something
if (data.entities[0].value == '200' && data.entities[1].value == '500') {
console.log("User choice value:" + data.entities)
// showProducts(data, req, res); do something inside this function
// or paste your code for do something here
}
Debugg:
Obs。:如果用户只键入一个值(@ sys-currency),如果有一个条件,则需要创建一个值,并获取此值以便在我的应用程序中执行某些操作例如:
data.entities //if have one value
data.entities[i] //Watson return some array if have more than 1 value
一个好主意是使用上下文变量和join来获取所有值,例如:
{ "context": {
"result": "<? @sys-currency ?>"
}
},
如果您在库存中传递所有库存中您想要输出的物品,例如我们有库存中的X,Y,Z,那么您可以在Watson中创建输出
<? context.results.join(', ') ?> //all values return
重要提示:您需要访问 Watson Conversation调用(data
)中的conversation.message
返回,以访问所有值,例如实体,意图和上下文变量等。喜欢:
conversation.message(payload, function (err, data) {
console.log(data)
if (err) {
return res.status(err.code || 500).json(err);
}
}
答案 1 :(得分:0)
在watson对话的节点中,您可以将实体作为数组进行访问。在你的情况下,它将是:
Currency 1: <? entities['sys-currency'] != null && entities['sys-currency'].size()> 0 ? entities['sys-currency'][0].value : "---" ?>; Currency 2: <? entities['sys-currency'] != null && entities['sys-currency'].size()> 1 ? entities['sys-currency'][1].value : "---" ?>
您需要添加适当的空检查并检查数组是否有更多的输入货币