Я использую IBM Watson Assistant и пытаюсь проверить ввод пользователя на временные рамки/промежутки времени. Какую функцию следует использовать?
Я использовал метод @sys-date.before(now())
для проверки временных рамок между прошлым и настоящим пользовательского ввода, но теперь он работает для меня. Если я ввожу сейчас или сегодня, Watson Assistant все еще думает, что это прошлое...
@sys-date.before(now())
:
Looks "like you're trying to make a reservation in the past. Try again." true
$day it is
Я ожидаю, что если пользователь введет сейчас или сегодня, чтобы резервирование сработало, и если пользователь введет время в прошлом для ответа как
"like you're trying to make a reservation in the past. Try again."
Рассматриваемый фрагмент кода выглядит следующим образом:
{ "context":
{ "day": "@sys-date" } }
{ "context":
{ "time": "<? @sys-time.reformatDateTime('h:mm a') ?>" } }
С помощью IBM Watson Assistant вы можете использовать системные сущности @sys-дата и @sys-время для преобразования пользовательского ввода в значения данных/времени. И вы можете использовать функции языка выражений для даты и времени для оценки и преобразования этих значений. Кажется, вы уже используете оба. Теперь дело за логикой...
Есть функции до и после, а также тот же момент или тот же или после и другие для сравнения. Если пользователь вводит сегодня, это не раньше сейчас, потому что оба будут относиться к одному и тому же дню и дате. Вы ищете значение времени до текущей отметки времени или до текущей даты? Вам нужно будет сравнить время со временем или дату с датой. Вы можете переформатировать значения, чтобы отрезать компонент времени и превратить их в даты.
Для более причудливых проверок вы можете даже использовать функциональность java.util.Дата.
Это должно быть правдой, если это прошлый момент:
now.after(yourInput)
Добавьте свой код, который вы используете для сравнения, и добавьте примеры значений. Что такое пользовательский ввод, какие распознанные данные/время обрабатываются?
@sys-date.before(now())
и $day
как значение. и "Похоже, вы пытаетесь сделать бронирование в прошлом. Попробуйте еще раз". как ответ. Ввод, который я тестирую, за день до текущего дня, но в любом случае он делает оговорку, даже если я использую код.
@sys-date.before(now())
Вы не можете сделать бронирование на день в прошлом. Очистите слот и снова предложите, это то, что говорит учебник IBM, но он не работает должным образом
Я добавил образец короткого кода. Не могли бы вы добавить к своему вопросу JSON всего узла?
now.after(yourInput)
что здесь? Вместо вашего ввода что-то другое? Потому что я попробовал это, и это ничего не изменило. возможно, что-то еще не позволяет этому коду работать должным образом, чего я еще не заметил.
Спасибо кстати. На самом деле я могу добавить весь код узла. { "context": { "day": "@sys-date" } } { "context": { "time": "<? @sys-time.reformatDateTime('h:mm a') ?>" } }
Это два основных кода, обрабатывающих ввод времени для бронирования, но это мало что говорит.
только что попробовал это @sys-date.before($day)
и не повезло : На какой день вы хотите запланировать звонок ?? 24-5-2017 Неактуально @sys-number:24 @sys-date:2017-05-24 @sys-number:-5 @sys-number:-2017 2017-05-24 Сколько времени на 2017-05- 24 вы хотите запланировать звонок? как вы можете видеть здесь, он делает оговорку, даже если дата уже прошла.
Вы не делитесь всем кодом, и трудно судить, что с ним не так.
Поэтому я добавил, поделился всем деревом узлов диалога. Есть идеи?
Я решил это! Что я сделал, так это поставил (сегодня) здесь @sys-date.before(today())
и сейчас здесь @sys-time.before(now())
Привет, data_henrik! Код не сравнивает или игнорирует, если я ввожу дату в прошлом. Мой чат-бот не признает, что вчера уже прошло. Так что код, который предлагают разработчики IBM для сравнения Before(now()) в моем случае не работает. Мой чат-бот отлично распознает даты и время, но не понимает, прошло ли оно.