2017-02-17 6 views
3

У меня есть два узловых узла. Первый запускается на chat_start и запрашивает имя пользователя. Второй хранит имя пользователя из input.text в переменной контекста и спрашивает, хочет ли пользователь сделать краткий опрос или сделать что-то еще. Второй никогда не выполняется. Каким должен быть триггер на втором, чтобы продвигать разговор? Пока нет намерения или условия. В принципе, я просто хочу следовать шаблону «строка-жемчуг», где задаются каждый вопрос и позволяет пользователю отказаться от некоторых вопросов.Bluemix Разговор, продвигающий разговор

+0

Если вы просто хотите, чтобы это было вызвано. Положите true на триггер – Dudi

ответ

0

Bluemix Разговор можно рассматривать как конечный автомат. Каждый переход отображается в инструменте, но каждый узел может быть вызван только условием. Таким образом, если вы на узле задаете вопрос, и ответ, который возвращается, не вызывает ни одного из дочерних узлов, состояние не будет переходить к дочернему. Ответы, введенные в узел, обрабатываются Уотсоном, который предоставляет «намерения», которые по сути являются ключевыми словами, найденными в предложении, которое он только что проанализировал. Таким образом, одним из способов продвижения разговора является сопоставление названных «намерений» с использованием префикса # для триггера в дочернем узле. Другой способ сопоставить названные «сущности» с использованием @ prefex, хотя менее понятно, как Watson создает объекты. Третий способ - сопоставление переменных контекста с использованием префикса $ и простых условных операторов, таких как ==. Контекстные переменные полностью управляются вами, разработчиком. Вы можете установить одну переменную контекста на каждом узле. И затем вы можете использовать его для запуска дочернего узла. Это, по-видимому, хороший подход к управлению типом разговора, который я хочу реализовать. Четвертый способ - использовать входное значение предыдущего родительского узла, используя вместе с простыми условными операторами.

+0

Если ваш ответ - это то, что сработало для вас, вы можете принять свой собственный ответ. –

0

Есть два основных способа достижения этого. Я рекомендую создать намерение для каждого возможного способа. Например, вы можете создать намерение с именем #affirmative со значениями «Да», «Да», «Конечно», «Хорошо» и т. Д. Все, что вам нужно сделать, это создать намерение, а затем использовать его в поле условия ,

Но вы также можете напрямую проверить вход пользователя, используя input.text. Например, вы можете использовать input.text.toLowerCase() == 'yes' в качестве условия. Имейте в виду, что это следует использовать только в том случае, если вы контролируете ввод и допускаете только несколько возможных значений. Если нет, используйте намерение, и пусть Watson Conversation обрабатывает входной синтаксический анализ для вас.

Еще одна действительно крутая функция, которую предлагает Watson Conversation, которая может принести вам пользу: у вас есть узел с состоянием вроде intents[0].confidence < 0.6 и ответ вроде «Извините, я этого не понял». Таким образом, вы убедитесь, что ваш поток вызовет только условие с высокой уверенностью в намерениях.

Надеюсь, это поможет!

0

Вы можете использовать функцию jump to, чтобы перенаправить систему на произвольный dialog_node - это отлично подходит для создания направленных диалогов. Поэтому всякий раз, когда вы хотите продолжить следующий вопрос (пользователь ответил на предыдущий вопрос), вы можете использовать переход с узла, обрабатывающего ответ на предыдущий вопрос, чтобы задать пользователю другой вопрос (перейти к основной части следующего диалогового узла задавая новый вопрос).

Теперь для использования «получить имя» вы хотите, чтобы второй узел собирал имя из пользовательского ввода, свисающего с узла talk_start. Если разговор встречает узел с дочерними элементами, обработка следующего раунда диалога начинается с первого дочернего узла этого диалогового узла - таким образом, контекстные диалоги определяются в разговоре.

Смежные вопросы