Мы создаем приложение с использованием Watson Conversation, но у нас возникла проблема с обработкой недействительных ответов пользователей. Наш бот предназначен для бронирования отелей, а упрощенная версия диалога:
- Узел 1: очистить контекст; спросите: «На какой день вы хотите приехать?»
- Узел 2: Триггер @ sys-date; обновить контекст для даты; спросите "на сколько ночей вы хотите остаться"
- Узел 3: триггер @ системный номер; обновить контекст для количества ночей; резюмируйте бронирование: «Итак, вы прибываете [ДАТА] на [КОЛИЧЕСТВО НОЧЕЙ]»
Если пользователь дает разумные ответы, тогда все работает, но если их ответ на дату регистрации «бла», он терпит неудачу, поэтому мы добавили новый узел (как родственный узел узла 2) с триггером «something_else» и вывести «извините, мы хотел свидание, попробуй еще раз ».
В идеале мы хотели бы вернуться к нашему существующему Узлу 2, чтобы триггер @ sys-date мог поймать измененный ответ пользователя, но создавал бесконечный цикл, поэтому мы являемся дочерним узлом для «something_else», который является копией Узла 2, т.е. контекст для даты и спрашивает «сколько ночей…», но теперь мы хотим поймать ответ на этот вопрос в узле 3, чтобы мы могли выбрать существующий поток, поэтому добавили переход к узлу 3. Это не удается, поскольку мы заканчиваем выходом ветвь диалога.
Если мы используем «something_else» для перехвата неверных вводимых пользователем данных, как нам снова присоединиться к существующему потоку диалога? На данный момент единственное решение, которое у нас есть, - это дублировать узлы 2 и 3, но в реальной диалоговой ветви гораздо больше узлов, поэтому такой подход нецелесообразен.