Scenario


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 Нет

Выключен ли сценарий:

  • True
  • False (по умолчанию)
actions Нет Список действий, которые выполняются при завершении сценария

availabe_requirement

Нет Условие, с помощью которого можно сделать сценарий недоступным

empty_answer

Нет

Сценарий всегда должен вернуть ответ. Если ответ не найден или сценарию не удалось его сгенерировать, то вернется ответ по умолчанию

{
    "app_hello": {
        "type": "base",
        "actions": [
            {
                "type": "string",
                "command": "ANSWER_TO_USER",
                "nodes": {
                    "pronounceText": "Привет!"
                }
            }
        ]
    }
}

Сценарий с формой

Сценарий с формой - это сценарий для опроса фиксированного набора полей. Регистрируется с type: "form_filling". Действия (Actions) выполняются только после заполнения всех необходимых полей формы.

Название Обязательность Описание
switched_off Нет

Выключен ли сценарий:

  • True
  • False (по умолчанию)
actions Нет Список действий, которые выполняются после заполнения форм листовых узлов сценария
form Да Ключ для соответствующей формы
keep_form_alive Нет

Очищается ли форма при переключении между сценариями и при вызове action ClearCurrentScenarioFormAction:

  • True - форма не очищается;
  • False - форма очищается (по умолчанию).

При завершении сценария форма очищается

availabe_requirement Нет Условие, с помощью которого можно сделать сценарий недоступным
empty_answer Нет Сценарий всегда должен вернуть ответ. Если ответ не найден или сценарию не удалось его сгенерировать, то вернется ответ по умолчанию
{
    "app_hello": {
        "type": "form_filling",
        "form": "app_hello",
        "actions": [
            {
                "type": "string",
                "command": "ANSWER_TO_USER",
                "nodes": {
                    "pronounceText": "Привет!"
                }
            }
        ]
    }
}

Древовидный сценарий

Древовидный сценарий - сценарий с использованием композитных форм. Регистрируется с type: "tree".

Работа с таким сценарием осуществляется в следующие этапы:

  1. Сценарий начинается со входа в стартовую ноду, где заполняется форма, которая привязана к текущей ноде.
  2. Проверяются условия перехода в ноды из списка available_nodes. Если одна из нод доступна для перехода (выполнился Requirement), спускаемся по дереву ниже.
  3. Процесс повторяется до тех пор, пока не закончатся доступные для перехода ноды, либо не будет достигнут конец дерева.

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

Название Обязательность Описание
switched_off Нет

Выключен ли сценарий:

  • True
  • False (по умолчанию)
actions Нет Список действий, которые выполняются после заполнения формы
form Да Название соответствующей композитной формы
keep_form_alive Нет

Очищается ли форма при переключении между сценариями и при вызове action ClearCurrentScenarioFormAction:

  • True - форма не очищается;
  • False - форма очищается (по умолчанию).

При завершении сценария форма очищается

availabe_requirement Нет Условие, с помощью которого можно сделать сценарий недоступным
scenario_nodes Да

Описание нод сценария. В составе каждой ноды лежит по одной форме и в них же описываются правила попадания в эти ноды из предыдущих.

Представляет собой словарь следующего вида:

{"node_name": { *node_description* }}




available_nodes Да Список нод, в которые возможен переход из текущей ноды. Эти ноды проверяются по списку и в случае выполнения Requirements управление передаётся ей
form_key Да Название формы из состава композитной формы, заполняемой на данной ноде
requirement Нет

Условия для начала заполнения полей формы form_key.

В первую очередь необходимо использовать условия на предмет значения и заполненности полей предыдущих нод, в которых эта нода входит в список available_nodes. В этом случае поле не используется только в начальном узле сценария. В остальных случаях поле задаёт ограничения, когда узел становится доступным.

Уточняющие вопросы questions полей формы form_key могут быть заданы только после заполнения всех обязательных полей предыдущей формы

actions Нет Выполнение списка Actions при отсутствии уточняющих вопросов / действий на поля формы 
start_node_key Да Название ноды из списка scenario_nodes, с которой начинается данный сценарий