IBM对话中的SpEL集合选择

时间:2017-10-23 19:14:44

标签: ibm-cloud ibm-watson spring-el watson-conversation

这只与IBM Watson Conversation用户有关。

我正在尝试将上下文变量设置为唯一的"有效"用户输入@ sys-date属性的日期。这里的有效日期是在01/01/1900之后和之前。根据SpEL定义,我应该选择.?[value > expression]列表。其中value或#this是当前列表项。

"context": {
    "date": "<? @sys-date and @sys-date.values ? @sys-date.values.?[value.after('1900-01-01') and value.before(now())] : null ?>",
    "thisWorks": "<? {0,1,2,3,4}.?[false] ?>",
    "thisDoesNot": "<? {0,1,2,3,4}.?[value > 1] ?>"
}

thisWorks = [] 其他一切都会引发错误。 我尝试过使用#this但是watson转换为(intent == 'this')并且像\#this之类的转义会在尝试保存之前抛出错误。

IBM表示它支持SpEL,部分定义是集合选择。即使在this blog post中,它也表示支持此类功能。但是没有它的例子,我尝试过的所有内容都会导致错误。

还有其他人在Watson Conversation中使用过集合选择并提供示例吗?

2 个答案:

答案 0 :(得分:0)

不确定您的问题,但也许这些信息可以帮助您。

尝试将日期保存在一个context变量中,例如:

{
  "context": {
    "date": <? @sys-date ?>;
  },
  "output": {
    "text": {
      "values": [
        "Are you sure about this $date?"
      ],
      "selection_policy": "sequential"
    }
  }
}

然后,提出你的条件......

查看$date是否在将来使用:

if bot recognizes now().before($date) or @sys-date.before($date)
response "Ok, the date is before $date."

如果过去:

now().after($date) or @sys-date.after($date)
response "Ok, the date is after $date, in this case is one invalid date"

Obs。:您可以在条件中使用此示例。在你的情况下是使用&#39; valids&#39;日期在如果机器人识别

答案 1 :(得分:0)

我能够过滤列表的唯一方法是将其作为对象列表。例如:

<? {1:1, 2:2, 3:3 }.?[value < 3 ].![value] ?>

希望这有帮助。