Перейти к основному содержимому

Теги активации

Теги активации определяют действия пользователей или события, которые могут перевести контекст диалога в тот или иной стейт. Все теги активации делятся на два вида: локальные и глобальные.

  • По локальному тегу переход в стейт возможен только из ближайшего родительского, из соседних или дочерних стейтов.
  • По глобальному тегу диалог может перейти в стейт из любого другого стейта в сценарии. Названия глобальных тегов заканчиваются на !.
ТегОписание
q
q!
Объявляет паттерн, по которому диалог может перейти в стейт.
intent
intent!
Объявляет интент, по которому диалог может перейти в стейт.
intentGroup
intentGroup!
Объявляет группу интентов, по которым диалог может перейти в стейт.
event
event!
Объявляет событие, по которому диалог может перейти в стейт.

Параметры

к сведению

Параметры — пары «ключ — значение», которые отделяются от названия или значения тега (если оно есть) двумя вертикальными чертами. Если параметров несколько, они отделяются друг от друга запятыми. Параметры позволяют модифицировать поведение тега.

Для локальных тегов q, intent, intentGroup и event могут быть заданы параметры:

ПараметрТипОписаниеЗначение по умолчанию
fromStateСтрокаПуть до стейта, из которого возможен переход в текущий стейт по данному тегу активации.
toStateСтрокаПуть до стейта, в который возможен переход из текущего стейта по данному тегу активации.
onlyThisStateЛогический• Если true и указан параметр fromState, то переход в текущий стейт возможен строго из стейта в значении fromState, но не из его вложенных.
• Если true и указан параметр toState, то переход в стейт в значении toState возможен строго из текущего стейта, но не из его вложенных.
false

fromState

Параметр fromState задает путь до стейта, из которого возможен переход в текущий стейт по данному тегу активации.

подсказка
fromState позволяет перевести диалог из определенного контекста в нужный стейт без использования глобальных паттернов. Кроме того, это один из способов покинуть контекст модального стейта.

Рассмотрим пример. В сценарии ниже пользователь может выйти из контекста модального стейта OrderStatus, если не знает номер заказа.

theme: /

state: OrderStatus || modal = true
q!: * (где/статус) * [мой] ~заказ *
a: Какой номер у вашего заказа?

state: GetNumber
q: * @duckling.number *
a: Ваш заказ уже в пути!
go!: /WhatElse

state: LocalCatchAll
event: noMatch
a: Это не похоже на номер заказа. Попробуйте еще раз.

state: WhatElse
intent: /DontKnow || fromState = "/OrderStatus"
a: Чем еще я могу помочь?

toState

Параметр toState задает путь до стейта, в который возможен переход из текущего стейта по данному тегу активации.

подсказка
Назначение fromState и toState одинаково, и ответ на вопрос, что лучше использовать, во многом зависит от личных предпочтений. Когда из стейта нужно задать возможность перехода в несколько стейтов, разбросанные по разным частям сценария, то предпочтительнее toState: он позволяет держать всю информацию, связанную с возможными изменениями контекста, в одном месте.

Следующий пример работает так же, как предыдущий. Обратите внимание, что теги активации с параметром toState обычно пишутся после тегов реакций.

theme: /

state: OrderStatus || modal = true
q!: * (где/статус) * [мой] ~заказ *
a: Какой номер у вашего заказа?
intent: /DontKnow || toState = "/WhatElse"

state: GetNumber
q: * @duckling.number *
a: Ваш заказ уже в пути!
go!: /WhatElse

state: LocalCatchAll
event: noMatch
a: Это не похоже на номер заказа. Попробуйте еще раз.

state: WhatElse
a: Чем еще я могу помочь?

onlyThisState

Параметр onlyThisState используется совместно с fromState или toState. При значении true он накладывает ограничения на стейт, из которого или в который можно перейти по данному тегу активации.

  • Если указан параметр fromState, то переход в текущий стейт возможен строго из стейта в значении fromState, но не из его вложенных.
  • Если указан параметр toState, то переход в стейт в значении toState возможен строго из текущего стейта, но не из его вложенных.

Рассмотрим пример. Если в предыдущем сценарии в стейт /WhatElse можно перейти из /OrderStatus и /OrderStatus/LocalCatchAll, то в примере ниже только из /OrderStatus.

theme: /

state: OrderStatus || modal = true
q!: * (где/статус) * [мой] ~заказ *
a: Какой номер у вашего заказа?
intent: /DontKnow || toState = "/OrderStatus", onlyThisState = true

state: GetNumber
q: * @duckling.number *
a: Ваш заказ уже в пути!
go!: /WhatElse

state: LocalCatchAll
event: noMatch
a: Это не похоже на номер заказа. Попробуйте еще раз.

state: WhatElse
a: Чем еще я могу помочь?