Action — одна из сущностей DSL, которая представляет собой реакцию на какое-либо событие. Например, отправка сообщения, запрос данных у внешней системы, изменение состояния и т.д.
Actions, которые будут использоваться многократно, хранятся в static/references/actions.
Ниже описаны основные Actions, которые передаются в поле type:
EmptyAction — если при использовании actions разработчик забыл указать тип или указал тип null, то сработает EmptyAction, который запишет в лог "EmptyAction.run: action do nothing".
{ "type": null, }
Составные Actions
Ниже представлено описание Actions, которые комбинируют другие Actions.
Тип
Описание
requirement
RequirementAction — это action, который позволяет выполнить action только при выполнении условия в requirement.
Используемые параметры:
requirement — dictionary. Условие, которое будет выполнено.
action — dictionary. Действие, которое будет выполнено в случае успеха проверки requirement.
ElseAction — это action, который позволяет выполнить action при выполнении requirement. Иначе будет выполнен else_action. Использование else_action необязательно, ключ может быть пропущен.
Используемые параметры:
requirement — dictionary. Условие, которое будет выполнено.
action — dictionary. Действие, которое будет выполнено в случае успешной проверки requirement.
else_action — dictionary. Действие, которое будет выполнено в случае не прохождения проверки requirement.
ChoiceAction — это action, который позволяет выполнить actions при их доступности. При запуске по порядку проверяется requirement:
если он вернул True, то выполняется action. Остальные requirement_action в этом случае не выполняются;
если он вернул False, то идет переход на следующий requirement.
Если не выполнен ни один из requirement_action и при этом указан else_action, то будет выполнен else_action (его использование необязательно, ключ может быть пропущен).
Используемые параметры:
requirement_actions — list[dictionary]. Список словарей вида RequirementAction
{ "type": "choice", "requirement_actions": [ { "requirement": { "type": "external", "requirement": "number_is_ok" }, "action": { "nodes": { "answer": [["Ваш номер {{main_form_phone_number}} введен верно"]] } } }, { "requirement": { "type": "external", "requirement": "number_is_wrong" }, "action": { "nodes": { "answer": [["Номер указан не верно, введите еще раз"]] } } } ], "else_action": { "nodes": { "answer": [["Ваш номер и не ok, и не ok. Странно это"]] } } }
external
ExternalAction — это action, который позволяет вызвать action, описанный в references/actions/actions.json. По данному пути описываются actions, которые являются уникальными для конкретного смартапа и которые предполагают многократное использование.
Используемые параметры:
action — string. Название action, описанный по пути references/actions/actions.json
{ "type": "external", "action": "approve" }
composite
CompositeAction — это action, который позволяет выполнить список actions.
Используемые параметры:
actions — list[dictionary]. Список словарей, в которых описываются последовательно выполняемые actions.
BreakScenarioAction — это action, который позволяет завершить обработку сценария. На момент вызова этой команды отправляются только те сообщения, который уже были сгенерированы к этому моменту.
По умолчанию форма сценария не очищается. Для этого необходимо использовать action clear_current_scenario.
{ "type": "break_scenario" }
remove_form_field
RemoveFormFieldAction — это action, который позволяет очистить значения из конкретного поля в форме.
FillFieldAction — это action, который позволяет заполнить поле формы данными.
Используемые параметры:
form — string. Название композитной формы.
field — string. Название поля в форме.
data_path — string. Данные для заполнения формы. В качестве данных можно указать конкретное значение (число, строка и т.д.) или использовать обращение через Jinja шаблоны.
ClearScenarioByIdAction — это action, который позволяет удалить сценарий из списка активный сценариев (LastScenarios). Это также приводит к удалению формы, которая соответствует данному сценарию.
RunLastScenario — это action, который запускает последний сценарий, который содержится в списке активных сценариев (LastScenarios). Параметр позволяет продолжить сценарий после получения ответа от внешней системы.
{ "type": "run_last_scenario" }
reset_current_node
ResetCurrentNodeAction — это action, который меняет активную ноду. Актуально для древовидных сценариев.
ClearCurrentScenarioAction — это action, который удаляет форму текущего сценария и сам сценарий из списка активных сценариев (LastScenarios).
{ "type": "clear_current_scenario" }
clear_current_scenario_form
ClearCurrentScenarioFormAction — это action, который очищает форму текущего сценария.
{ "type": "clear_current_scenario_form" }
choice_scenario
ChoiceScenarioAction — это action, который итерируется по списку сценариев в поле scenarios и проверяет, выполняется ли условие в поле requirement на запуск конкретного сценария. Если условие выполняется, сценарий запускается, и остальные сценарии не рассматриваются. Если условие не выполняется, тогда запускается action из поля else_action. Это опциональное поле. ChoiceScenarioAction – универсальный action для выбора сценария.
Ниже представлено описание Actions, которые позволяют сделать запрос из DSL и получить данные из внешних систем.
Название
Описание
save_behavior
SaveBehaviorAction — это action, который создает обработчик исходящего запроса во внешнюю систему — Behavior.
Используемые параметры:
check_scenario — bool. Включение проверки на совпадение сценария в момент отправки запроса и получения ответа. Является необязательным. По умолчанию имеет значение true. Влияет на состояние параметра behavior.
behavior — string. Название behavior, который определен по пути references/behaviors/behaviors.json.
SelfServiceActionWithState — это action, который позволяет создать запрос во внешнюю систему и добавить к этому запросу behavior. Используется, если интеграция с внешними системами происходит по kafka.
Используемые параметры:
behavior — string. Название behavior, который определен по пути references/behaviors/behaviors.json.
command_action — dictionary. Словарь с отправляемыми данными — message_name, тип соединения, топик kafka.
command — string. Message_name, который будет отправляться во внешнюю систему.
request_type — string. Тип интеграции (kafka).
request_data — dictionary. Словарь с описанием топиков kafka.
topic_key — string. Ключ, по которому берется топик kafka из настроек publisher.
kafka_key — string. Опциональный параметр. Позволяет выбрать набор настроек publishers, в котором нужно искать topic_key.
nodes — dictionary. Словарь с параметрами, которые будут отправлены в поле payload.
ProcessBehavior — это action, который позволяет запустить обработку behavior. Callback_id, по которому выбирается behavior, берется из входящего сообщения.
{ "type": "process_behavior" }
http_request
HTTPRequestAction — это action, который позволяет выполнить http запросы к внешним системам. Выполняется синхронно.
Используемые параметры:
params — dictionary. Параметры для запроса.
method — string. Метод запроса get / post / etc.
url — string. Адрес для запроса. Здесь также можно указать произвольные параметры, которые будут переданы при запросе.
store — string. Название переменной, по которой будет сохранен результат запроса — можно получить через user.variables.
behavior — string. Название behavior, который будет выполнен после запроса.
AskAgainAction — это action, который позволяет повторно задать вопрос пользователю из последнего сценария и поля, к которому был задан последний вопрос.
Описание в DSL
{ "type": "ask_again" }
sdk_answer
SDKAnswer — это action, который позволяет сформировать ответ для пользователя, где значения полей pronounceText, items и suggestions выбираются случайным образом. Внутри items поля bubble и card выбираются так же случайным образом.
Используемые параметры:
command — string. Название команды, которая будет отправлена пользователю в качестве ответа. Например: "ANSWER_TO_USER"
nodes — dictionary. Словарь с параметрами, которые будут отправлены в поле payload. Значения полей трактуются как Jinja шаблоны.
no_empty_nodes — bool. Если флаг True, то поля, которые равны пустой строке, будут удалены из payload.
support_templates — dictionary. Значения полей трактуются как Jinja шаблоны.
SDKAnswerToUser - это action, который формирует ответ пользователю,
Используемые параметры:
static — dictionary. Словарь с произвольными данными, которые можно использовать внутри root, items, suggestions.
items — list. Список, который может содержать в себе следующие вложения:
bubble_text:
text — отображаемый текст;
markdown — необязательное поле, по умолчанию True. Показывает, нужна ли обработка разметки markdown;
requirement — необязательное поле. Отвечает за отображение элемента массивов ответа
item_card:
text — содержимое карточки
root — list. Список который может содержать в себе следующие вложения:
pronounce_text:
text — произносимый текст
suggestions — list. Список словарей, который содержит в себе следующие вложения:
suggest_text:
title — заголовок suggest;
text — текст, который вводится при нажатии на suggest
suggest_deeplink:
title — заголовок suggest;
deep_link — диплинк, который откроется при нажатии на suggest
random_choice — опциональный массив. Состоит из набора словарей с переменными. Значения в словарях считаются jinja шаблонами. Итоговый словарь переменных — это словарь static, объединенный со случайно выбранным словарем из random_choice
Внутри элементов, можно добавлять requirement, который будет выполняться, и только в этом случае этот элемент может быть выбран.
Ниже представлено описание Actions, которые позволяют взаимодействовать с счетчиками.
Тип
Описание
counter_increment
CounterIncrementAction — это action, который позволяет увеличить значения счетчика key на значение value и задать время его жизни. Если счетчик key не существует, то с вызовом этого Action он будет создан.
Используемые параметры:
key — string. Название счетчика.
value — integer. Значение, на которое будет увеличен счетчик. По умолчанию равен 1.
lifetime — integer. Время жизни счетчика, выраженное в секундах.
CounterDecrementAction — это action, который позволяет уменьшить значения счетчика key на значение value и задать время его жизни. Если счетчик key не существует, то с вызовом этого Action он будет создан.
Используемые параметры:
key — string. Название счетчика.
value — integer. Значение, на которое будет увеличен счетчик. По умолчанию равен 1.
lifetime — integer. Время жизни счетчика, выраженное в секундах.
CounterClearAction — это action, который позволяет удалить счетчика по ключу key.
Используемые параметры:
key — string. Название счетчика.
{ "type": "counter_clear", "key": "greeting" }
counter_set
CounterSetAction — это action, который позволяет произвести настройку счетчика.
Используемые параметры:
key — string. Название счетчика.
value — integer. Значение, на которое необходимо изменить значение счетчика key. Опциональный параметр.
time_shift — integer. Время, на которое необходимо изменить значение времени счетчика key. Опциональный параметр, по умолчанию 0. Значение указывается в секундах.
reset_time — bool. Необходимо ли изменить время создания счетчика на значение time с применением time_shift. Опциональный параметр, по умолчанию false.
CounterCopyAction — это action, который позволяет создать копию уже существующего счетчика.
Используемые параметры:
source — string. Название счетчика для копирования.
destination — string. Название нового счетчика.
time_shift — integer. Время, на которое необходимо изменить значение времени счетчика key. Опциональный параметр, по умолчанию 0. Значение указывается в секундах.
reset_time — bool. Необходимо ли изменить время создания счетчика на значение time с применением time_shift. Опциональный параметр, по умолчанию false.
Ниже представлено описание Actions, которые позволяют взаимодействовать с переменными.
Тип
Описание
set_variable
SetVariableAction — это action, который позволяет сохранить в поле user.variables переменную с произвольным значением и временем жизни.
Используемые параметры:
key — string. Ключ, под которым будет храниться переменная.
value — string. Произвольное значение, которое будет храниться по ключу. Может быть передано в виде словаря типа "unified_template", для использования jinja.
loader — string. Может принимать значение json, float, int. Используется для приведения значения к определенному типу.
ttl — string. Время жизни переменной, выраженное в секундах. По умолчанию равно 86400 сек.
DeleteVariableAction — это action, который позволяет удалить переменную по ключу.
Используемые параметры:
key — string. Ключ, по которому будет произведено удаление.
{ "type": "delete_variable", "key": "greeting" }
clear_variables
ClearVariablesAction — это action, который позволяет удалить все переменные.
{ "type": "clear_variables" }
set_local_variable
set_local_variable — это action, который позволяет сохранить в поле user.local_vars переменную с произвольным значением, доступную только в рамках текущего messageID.
Используемые параметры:
key — string. Ключ, под которым будет храниться переменная.
value — string. Произвольное значение, которое будет храниться по ключу. Может быть передано в виде словаря типа "unified_template" для использования jinja.
loader — string. Может принимать значение json, float, int. Используется для приведения значения к определенному типу.
Описание формата объектов bubble и card ищите в разделе Карточки и тексты.
Как добавить свой Action
Для добавления своего Action необходимо:
Реализовать новый Action, производный от класса core.basic_models.actions.basic_actions.Action. При этом необходимо реализовать асинхронный метод run, который будет вызван при запуске:
Разместить новый Action в app/basic_entities/actions.py своего смартапа, либо создать новый модуль в удобном месте.
Зарегистрировать Action в классе CustomAppResources для вызова по названию:
/app/resources/custom_app_resources.py
#CustomAppResources внутри метода init_actions classCustomAppResources(SmartAppResources): definit_actions(self): super(CustomAppResourses, self).init_actions() actions["simple_action"]= SamlpeAction
Добавить unit-test на новый Action.
Кэширование результатов проверки условий
Если в действии проверяется условие, результат проверки можно сохранить в кэше. Этот результат будет использован при повторной проверке условия в другом действии. Использование сохраненных результатов I/O-bound условий повышает скорость исполнения сценария.
При проверке условия в новом действии, объявление условия должно совпадать с тем, как оно было объявлено впервые: поля указаны в том же порядке, значения полей одинаковы.
Для получения результата, сохраненного в примере выше, повторная проверка условия должна выглядеть так:
ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.