ym88659208ym87991671
Фреймворк Scenario | Документация для разработчиков

Scenario

Обновлено 18 декабря 2023

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, с которой начинается данный сценарий
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей.
Вы можете запретить сохранение cookie в настройках своего браузера.