intentGroup!
Тег активации intentGroup!
объявляет вложенные интенты, по которым диалог может перейти в стейт.
По родительскому интенту, указанному после тега, стейт не активируется.
Если вы хотите, чтобы диалог мог перейти в стейт и по родительскому интенту, используйте для него отдельный тег intent!
:
state: Nested state
intentGroup!: /Example
intent!: /Example
подсказка
intentGroup!
— это глобальный тег: переход по нему возможен из любого другого стейта в сценарии.Значение
После тега записывается путь к интенту.
При записи пути символ /
выступает разделителем между уровнями вложенности:
/hi
— путь составлен из символа/
и названия интента./hi/politely
— вложенный интент. Уровень вложенности интентов не ограничен.
Примеры использования
Подключение базы знаний к сценарию:
state: KnowledgeBase
intentGroup!: /KnowledgeBase
script: $faq.pushReplies();
предупреждение
По умолчанию срабатывает стейт, который активируется интентом с наибольшим весом.
Но если вы используете
intentGroup
или intentGroup!
совместно с intent
или intent!
,
порядок срабатывания стейтов может измениться.Рассмотрим пример сценария ниже при условии, что был распознан интент /KnowledgeBase/FAQ.Курсы/Цена
:
- Сработает стейт
PriceInt
, потому что в нем есть тегintent!
и он получит наибольший приоритет. - Приоритет стейта
FAQ.Courses
будет меньше, потому что он может сработать только по тегуintentGroup!
. - Стейт
AllFaqs
получит наименьший приоритет, поскольку активируется по самой общей группе. - Стейт
Price
не сработает вообще:/KnowledgeBase/FAQ.Курсы/Цена
— это родительский интент.
state: AllFaqs
intentGroup!: /KnowledgeBase
a: Нашел ответ в базе знаний.
script: $faq.pushReplies();
state: FAQ.Courses
intentGroup!: /KnowledgeBase/FAQ.Курсы
a: Вас интересуют наши курсы? Я нашел такой ответ:
script: $faq.pushReplies();
state: Price
intentGroup!: /KnowledgeBase/FAQ.Курсы/Цена
script: $faq.pushReplies();
state: PriceInt
intent!: /KnowledgeBase/FAQ.Курсы/Цена
script: $faq.pushReplies();