【问题标题】:IBM Watson Assistant: Expressions on dialog node condition using array?IBM Watson Assistant:使用数组的对话节点条件表达式?
【发布时间】:2020-09-04 05:42:01
【问题描述】:

对于 IBM Watson Assistant 和对话节点条件,我想检查上下文变量 long_name_context_var 是否具有值 1、2、3、4、5 之一。正常的方式是

$long_name_context_var == 1 || $long_name_context_var == 2 || 
$long_name_context_var == 3 || $long_name_context_var == 4 || 
$long_name_context_var == 5

但它在视觉上太长了。因此,我想缩短它。 我尝试使用 JSONArray.contains 和数组文字作为

[1,2,3,4,5].contains($long_name_context_var)

但失败了。

节点条件不支持数组字面量吗?还是会出现语法错误?

【问题讨论】:

    标签: ibm-cloud watson-assistant


    【解决方案1】:

    conditions on a dialog node in IBM Watson Assistant 支持SpEL-based expressions。这包括contains function on JSON arrays

    您是否在试一试中启用了调试以查看上下文变量的值?我假设您的节点使用“视觉上太长”的表达方式。上下文变量的类型是字符串还是数字?尝试使用

    ["1","2","3","4","5"].contains($long_name_context_var)
    

    绝对有效的方法是将数组分配给上下文变量(在我的测试 testme 中的上下文编辑器中的 Try it 中),然后使用以下表达式:

    $testme.contains("3")
    

    否则你可以试试indexOf function

    【讨论】:

    • 上下文的类型可以是数字或字符串,如果是数字我会使用字面量[1,2],如果是字符串,我会使用["1", " 2"]。我签入 Try it,运行时错误显示 Condition [["1","2"].contains("1")] 无法解析。检查表达式的语法。 SpEL 语法错误:表达式 [["1","2"].contains("1")] 在位置 4:EL1043E:意外标记。预期为 'rsquare(])' 但为 'comma(,)'(日志中还有 2 个错误)
    • 我不喜欢使用上下文,因为它不直观,你必须去另一个节点检查上下文的值。更重要的是,有几个地方需要这种不同值的表达式,意味着我必须定义很多上下文,但问题是当调用 Watson Assistant API 的 APP 时,它也通过 http 请求发送上下文,所以它是定义许多上下文的网络流量效率不高。
    • 您可以定义一次上下文,例如,在 Welcome 节点中。不需要来回发送上下文,API有相关设置。
    【解决方案2】:

    尝试:

    $long_name_context_var >= 1 || $long_name_context_var <= 5
    

    【讨论】:

    • 值可以是任意数字。
    • @Jarod 这是最快的方法。您可以添加任何间隔。我同意,它看起来不像数组那样好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多