IBM Watson Assistant: выражения условия узла диалога с использованием массива?

Для 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 и Array как

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

но не удалось.

Разве условие узла не поддерживает литералы массива? Или это даст синтаксическую ошибку?


person Jarod    schedule 04.09.2020    source источник


Ответы (2)


Условия на узле диалога в IBM Watson Assistant поддерживает выражения на основе SpEL. Сюда входит содержит < / strong> для массивов JSON.

Включили ли вы отладку в Попробовать, чтобы увидеть значение переменной контекста? Я предполагаю, что ваш узел работает с визуально слишком длинным выражением. Тип контекстной переменной - строка или число? Попробуйте использовать

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

Что определенно работает, так это присвоить массив контекстной переменной (в моем тестовом testme в редакторе контекста в Попробовать), а затем использовать следующее выражение:

$testme.contains("3")

В противном случае вы можете попробовать indexOf функцию.

person data_henrik    schedule 04.09.2020
comment
Тип контекста может быть числом или строкой, если это число, я буду использовать литерал, например [1,2], а если это строка, я буду использовать, например, [1, 2]. Я проверил Попробовать, ошибка выполнения говорит, что условие [[1,2] .contains (1)] не может быть проанализировано. Проверьте синтаксис выражения. Синтаксическая ошибка SpEL: Выражение [[1,2] .contains (1)] в позиции 4: EL1043E: Неожиданный токен. Ожидается 'rsquare (])', но вместо 'запятая (,)' (и в журнале есть еще 2 ошибки) - person Jarod; 04.09.2020
comment
Я предпочитаю не использовать контекст, потому что это не интуитивно понятно, вам нужно перейти к другому узлу, чтобы проверить значение контекста. Что еще более важно, есть несколько мест, где нужны такие выражения со всеми разными значениями, это означает, что мне нужно определить много контекстов, но дело в том, что приложение, вызывающее Watson Assistant API, также отправляет контекст через HTTP-запрос, поэтому неэффективный сетевой трафик для определения многих контекстов. - person Jarod; 06.09.2020
comment
Вы можете определить контекст один раз, например, в узле приветствия. Вам не нужно пересылать контекст туда и обратно, у API есть соответствующие настройки. - person data_henrik; 14.09.2020

Попробуйте:

$long_name_context_var >= 1 || $long_name_context_var <= 5
person user987339    schedule 04.09.2020
comment
значения могут быть любым числом. - person Jarod; 04.09.2020
comment
@Jarod Это самый быстрый способ. Вы можете добавить любой интервал. Согласен, выглядит не очень хорошо, как с массивами. - person user987339; 04.09.2020