Я хочу перейти от узла диалога к узлу, идентификатор которого хранится в переменной контекста.
Я пытаюсь решить проблему, связанную с отступлением и описанную здесь:
Условно возврат от отступления в помощнике Ватсона
Особенно эта диаграмма визуализирует проблему:
По моему мнению, А.Х. поставил очень разумный и актуальный вопрос, на который не удалось найти жизнеспособного ответа.
Насколько я вижу, проблема не может быть решена с помощью настроек отступления. Либо узел корневого уровня (вызванный совпадением намерения # Want_to_speak_to_someone) установлен на «возврат после отступления», либо это не так.
Если настройка отступления этого узла отклонения установлена на «возврат», он всегда будет возвращаться - независимо от того, что происходит дальше в диалоговом потоке этого отклонения. Даже если пользователь подтверждает, что хочет поговорить с человеком (то есть он не хочет возвращаться), диалог вернется к узлу, с которого началось отступление.
Это даже происходит, когда я прыгаю с да-узла (пользователь подтверждает, что он хочет поговорить с человеком) на любой другой узел. Как только ветвь (или ветвь, к которой перешел пользователь) заканчивается, диалог возвращается к узлу, с которого началось отступление.
Однако если для параметра отступления этого узла отклонения установлено значение «не возвращается», возврат невозможен - даже если пользователь решает не разговаривать с человеком и предпочитает вернуться туда, где он находился.
То, что А.Х. и я хочу, - это чтобы пользователь мог отступить от диалогового потока и все еще мог решить, хочет ли он вернуться или нет. Я думаю, что это довольно естественная и важная особенность диалога. Людям нравится отменять свое решение или, может быть, они даже непреднамеренно отвлекаются от заданного диалогового потока.
Akaykay предложил иметь два разных узла - «да-узел», который позволяет возвращать, и «нет-узел», который не позволяет возвращать. Но это не работает, потому что до этого у меня должен быть другой узел, который запрашивает у пользователя подтверждение - и этот «узел подтверждения» должен быть установлен либо на «возврат», либо на «не возврат» (что приводит к проблемам, описанным выше). ).
По этой причине я попытался найти обходной путь: я сохраняю идентификатор узла диалога, из которого диалог отступает, в переменной контекста.
Это контекстная переменная
"context": {
"last_node": "<? output.nodes_visited [0]?>",
...
},
, который обновляется в каждом узле диалогового потока, который допускает отступление.
В этом примере я мог бы затем вернуться к $ last_node, если пользователь хочет вернуться, и я могу перейти к другому (фиксированному) узлу, если пользователь хочет поговорить с человеком - настройки отклонения 'узла отклонения' будут не вмешивается и может быть установлен как «не возвращается».
Затем я попытался отредактировать соответствующий узел (из которого можно вернуться к $ last_node) в файле json моего навыка:
"next_step": {
"behavior": "jump_to",
"selector": "user_input",
"dialog_node": "$last_node"
},
Но при повторном импорте файла skill-json я получаю следующее сообщение об ошибке:
Я бы согласился с любым решением - тем, которое использует настройки отступления, или тем, которое позволяет динамически устанавливать целевой узел «Jump to». Я глубоко ценю любую помощь - спасибо!