Scenario (сценарии) — это сущность DSL, которая обозначает текущую тему диалога. Например, смартап "Погода" может иметь следующие сценарии: "Прогноз погоды на сегодня", "Карта осадков", "В каких странах сейчас тепло" и т.д.
Сценарии связаны с интентами — задачами, которые формулирует пользователь. По умолчанию смартап на SmartApp Framework пытается найти и запустить сценарий с таким же названием, как и у текущего интента.
Сценарий, как и любая другая сущность в DSL — это обычный словарь в формате JSON. Все описания хранятся в static/references/scenarios
.
Типы сценариев
Существуют следующие типы сценариев:
Без формы (base)
Самый простой тип сценария. Через него удобно создавать сценарий вида "Вопрос-Ответ". Например, на вход поступает запрос "Скажи один" и в качестве ответа возвращается "Один".
С формой (form_filling)
В этом типе сценария присутствует форма с фиксированным списком полей.
Древовидный (tree)
Сценарий, который имеет множество форм и ветвлений. Например, в зависимости от параметров в форме_1 может быть вызвана форма_2 или форма_3.
Сценарий без формы
Сценарий без формы — это одношаговый простой сценарий. Регистрируется с type: "base". Для создания такого сценария необходимо в static.references.scenarios
создать hello_scenario.json
.
Название | Обязательность | Описание |
---|---|---|
switched_off | Нет | Выключен ли сценарий:
|
actions | Нет | Список действий, которые выполняются при завершении сценария |
| Нет | Условие, с помощью которого можно сделать сценарий недоступным |
| Нет | Сценарий всегда должен вернуть ответ. Если ответ не найден или сценарию не удалось его сгенерировать, то вернется ответ по умолчанию |
{
"app_hello": {
"type": "base",
"actions": [
{
"type": "string",
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Привет!"
}
}
]
}
}
Сценарий с формой
Сценарий с формой — это сценарий для опроса фиксированного набора полей. Регистрируется с type: "form_filling". Действия (Actions) выполняются только после заполнения всех необходимых полей формы.
Название | Обязательность | Описание |
---|---|---|
switched_off | Нет | Выключен ли сценарий:
|
actions | Нет | Список действий, которые выполняются после заполнения форм листовых узлов сценария |
form | Да | Ключ для соответствующей формы |
keep_form_alive | Нет | Очищается ли форма при переключении между сценариями и при вызове action ClearCurrentScenarioFormAction:
При завершении сценария форма очищается |
availabe_requirement | Нет | Условие, с помощью которого можно сделать сценарий недоступным |
empty_answer | Нет | Сценарий всегда должен вернуть ответ. Если ответ не найден или сценарию не удалось его сгенерировать, то вернется ответ по умолчанию |
{
"app_hello": {
"type": "form_filling",
"form": "app_hello",
"actions": [
{
"type": "string",
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Привет!"
}
}
]
}
}
Древовидный сценарий
Древовидный сценарий — сценарий с использованием композитных форм. Регистрируется с type: "tree".
Работа с таким сценарием осуществляется в следующие этапы:
- Сценарий начинается со входа в стартовую ноду, где заполняется форма, которая привязана к текущей ноде.
- Проверяются условия перехода в ноды из списка
available_nodes
. Если одна из нод доступна для перехода (выполнился Requirement), спускаемся по дереву ниже. - Процесс повторяется до тех пор, пока не закончатся доступные для перехода ноды, либо не будет достигнут конец дерева.
Все обязательные поля могут быть не заполнены в рамках одного ответа от пользователя. При получении следующего сообщения входная нода в сценарий — это последняя нода, у которой были заполнены все обязательные поля.
Название | Обязательность | Описание |
---|---|---|
switched_off | Нет | Выключен ли сценарий:
|
actions | Нет | Список действий, которые выполняются после заполнения формы |
form | Да | Название соответствующей композитной формы |
keep_form_alive | Нет | Очищается ли форма при переключении между сценариями и при вызове action ClearCurrentScenarioFormAction:
При завершении сценария форма очищается |
availabe_requirement | Нет | Условие, с помощью которого можно сделать сценарий недоступным |
scenario_nodes | Да | Описание нод сценария. В составе каждой ноды лежит по одной форме и в них же описываются правила попадания в эти ноды из предыдущих. Представляет собой словарь следующего вида:
|
available_nodes | Да | Список нод, в которые возможен переход из текущей ноды. Эти ноды проверяются по списку и в случае выполнения Requirements управление передается ей |
form_key | Да | Название формы из состава композитной формы, заполняемой на данной ноде |
requirement | Нет | Условия для начала заполнения полей формы form_key. В первую очередь необходимо использовать условия на предмет значения и заполненности полей предыдущих нод, в которых эта нода входит в список available_nodes. В этом случае поле не используется только в начальном узле сценария. В остальных случаях поле задает ограничения, когда узел становится доступным. Уточняющие вопросы questions полей формы form_key могут быть заданы только после заполнения всех обязательных полей предыдущей формы |
actions | Нет | Выполнение списка Actions при отсутствии уточняющих вопросов / действий на поля формы |
start_node_key | Да | Название ноды из списка scenario_nodes, с которой начинается данный сценарий |