我是Watson框架的新手,我正在尝试创建一个有助于烹饪的机器人,我正在进行对话的方式是保存用户在数组中键入的每个成分实例: / p>
如果用户写下“我能用盐和油做什么”
然后数组将是:Ingrediente:["salt","oil"]
我想要做的是添加相应的菜,具体取决于Ingrediente
数组是否包含某种成分,例如Ingrediente
同时包含“salt”和“oil”,数组{{将分别附加对应于ListaPlatillos
数组中元素的值“Steak”和“Salad”,我试图在这样的插槽中进行:
条件写得如下:
Ingrediente
($Ingrediente.contains('Sal') || $Ingrediente.contains('Sal de grano')) && !$ListaPlatillos.contains('Ensalada de ejote asado con menta y queso feta ')
附加如下:
LisaPlatillos
问题是只检查了第一个条件,因此只附加第一个菜,根据 "context": {
"ListaPlatillos": "<? context.ListaPlatillos.append( 'Ensalada de ejote asado con menta y queso feta ' ) ?>"
}
的值更新ListaPlatillos
的正确/最佳方法是什么?
答案 0 :(得分:1)
对话框的评估逻辑的工作方式是,当响应匹配时 - 将插槽中的响应条件评估为true,然后将此响应与其上下文一起处理,之后不会处理其他响应。因此,需要在仅一个响应节点的上下文中进行更新 - 在这种情况下可能不是理想的。您可以将output
字段用于此目的,因为SpEL
表达式也会在那里进行评估,并且它们的结果不会存储在您不想要的context
中(在这种情况下)你只想更新上下文中一个字段的值)。在这种情况下进行更新的代码如下所示:
output : {
"update1" : "<?($Ingrediente.contains('Sal') || $Ingrediente.contains('Sal de grano')) && !$ListaPlatillos.contains('Ensalada de ejote asado con menta y queso feta ') ? context.ListaPlatillos.append( 'Ensalada de ejote asado con menta y queso feta ' ) : '' ?>"
"update2" : "<?...?>"
}
通常语法为condition ? something : something
:
output : {
"update" : "<? condition ? what_to_do_when_true : what_to_do_when_false?>"
}
现在,当在对话框中实现这种更复杂的逻辑时,您可能想要检查Cloud Functions
- 有一种方法可以调用Watson Assistant中的自定义函数,该函数可以处理用户提交的值,计算内容和将其返回到WA,在那里它可以用来向用户输出一些文本。要了解有关详情,请访问WA Doc - how to make programatic calls from WA 或Google how to make programatic calls from watson assistant
。