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

Requirement

Обновлено 5 марта 2025

Requirement (условие) - это условия для совершения каких-либо действий. Например, условия на заполнение поля, на запуск сценария, запуск развилки в ответе и т.д. Могут быть комбинированы в любом порядке.

Результатом проверки условия является булево значение - True / False. Результат проверки можно кэшировать, чтобы ускорить исполнение сценария.

Составные Requirements

Ниже описаны параметры Requirements, которые комбинируют значения других Requirements.

TypeОписание
and

Возвращает True, если все requirements вернули True.

Используемые параметры:

  • requirements - список любых условий, в том числе композитных
{
"type": "and",
"requirements": [
{
"type": "requirement_t1",
"t1_field": "t1_value"
},
{
"type": "requirement_t2",
"t2_field": "t2_value"
}
]
}
or

Возвращает True, если хотя бы один из requirements вернул True. 

Используемые параметры:

  • requirements - список любых условий, в том числе композитных
{
"type": "or",
"requirements": [
{
"type": "requirement_t1",
"t1_field": "t1_value"
},
{
"type": "requirement_t2",
"t2_field": "t2_value"
}
]
}
not

Отображение инвертированного значения внутреннего requirement.

Используемые параметры:

  • requirements - любое условие, в том числе композитное
{
"type": "not",
"requirement": {
"type": "requirement_t1",
"t1_field": "t1_value"
}
}
external

Ссылка на внешний по отношению к текущему описанию requirement. Позволяет вызывать requirement по имени. Для этого необходимо описать requirement в static/references/requirements.json

{
"type": "external",
"requirement": "callcenter_white_list"
}

Requirements на пользователя

TypeОписание
channel

Возвращает True, если канал пользователя входит в channels.

Используемые параметры:

  • channels - список строк
{
"type": "channel",
"channels": ["SBERBANK_MESSENGER"]
}
random

Возвращает True в том проценте случаев, который указан в percent.

Не фиксирует свой выбор для конкретного пользователя.

Используемые параметры:

  • percent- integer. Процент. Значение может быть указано в диапазоне 0-100
{
"type": "random",
"percent": 50
}
platform_type

Возвращает True, если платформа смартапа совпадает с platform_type.

Используемые параметры:

  • platform_type - string. Тип платформы
{
"type": "platform_type",
"platfrom_type": "IOS"
}
platform_version

Возвращает True, если версия платформы смартапа соответствует заданному условию.

Используемые параметры:

  • amount - string. Версия платформы. Представляет собой строку с разделением значений в виде точки

  • type - string. 

    Типы оператора сравнения. Доступные значения:

    • more
    • more_or_equal
    • equal
    • not_equal
    • less
    • less_or_equal
    • exists - не None, поле amount указывать не нужно
    • composite - составной оператор сравнения, принимает список операторов. Возвращает True, если все входящие операторы True
    • any - составной оператор сравнения, принимает список операторов. Возвращает True, если хотя бы один из входящих операторов True
    • in - принимает список значений. Возвращает True, если значение входит в них
    • endswith - строка заканчивается на указанное значение
    {
    "type": "platform_version",
    "operator": {
    "type": "more",
    "amount": "13.6.0"
    }
    }
surface

Возвращает True, если поверхность смартапа совпадает с surface.

Используемые параметры:

  • surface - string. Название поверхности. 
"requirement": {
"type": "surface",
"surface": "COMPANION"
}
surface_version

Возвращает True, если версия поверхности смартапа соответствует заданному условию. 

Правила заполнения поля аналогичны условию platform_version

{
"type": "surface_version",
"operator": {
"type": "more",
"amount": "20.11.1001"
}
}
app_type

Возвращает True, если тип смартапа соответствует заданному условию.

{
"type": "app_type",
"app_type": "DIALOG"
}

capabilities_property_available

Возвращает True, если выбранный property_type доступен на устройстве

{
"type": "capabilities_property_available",
"property_type": "screen"
}

Requirements на контекст беседы

НазваниеОписание
counter_value

Условия на значение счетчика.

Используемые параметры:

  • key - string. Ключ проверяемого счетчика. Подробнее о счетчиках - в Action counter_increment
{
"type": "counter_value",
"key": "greeting",
"operator": {
"type": "more",
"amount": 0
}
}
counter_time

Проверка, что со времени последнего обновления счетчика key прошло меньше/больше/... amount секунд.

Например: если за последние сутки пользователю было отправлено поздравление, то это поздравление больше не будет ему отправляться

{
"type": "counter_time",
"key": "congratulation",
"operator": {
"type": "more",
"amount": 86400
}
}

template

Jinja шаблон с булевым результатом проверки

{
"type": "template",
"template": "{{ payload.message.strip() in payload.murexIds }}"
}
ask_again_exist

Проверка возможности повторного обращения к полю, к которому был задан вопрос в последнем сценарии.

{
"type": "ask_again_exist"
}

template_in_array

Проверка, что результат выполнения jinja шаблона входит в допустимый список возможных результатов items:

  • True, если содержится;
  • False, если совпадений не найдено.
{
"type": "template_in_array",
"template": "{{ payload.message.clientInfo.tbCode }}"
"items": ["99", "42"]
}

array_item_in_template

Операция обратная к template_in_array - проверка на наличие хотя бы одного значения из списка items в результате выполнения jinja шаблона:

  • True, если содержится хотя бы одно;
  • False, если не найдено ни одного совпадения
{
"type": "array_item_in_template",
 "template": {
      "type": "unified_template",
       "template": {{ payload.userInfo.departcode.split('/')|tojson }}",
       "loader": "json"
   },
   "items": ["111", "456"]
}

regexp_in_template

Поиск совпадения по регулярному выражению внутри результата выполнения jinja шаблона

  • True, если совпадение найдено;
  • False, в ином случае.

Используемые параметры:

  • regexp - string. Строка с регулярным выражением. Проверка на наличие только цифр
{
"type": "regexp_in_template",
 "template": "{{ payload.message.strip() }}",
  "regexp": "/^\d+$/"
}

time

Возвращает True, если время отправки сообщения соответствует заданному условию.

Формат времени "HH:MM:SS".

Правила заполнения поля аналогичны условию platform_version.

{ "type": "time", "operator": { "type": "more", "amount": "17:00:00" }

datetime

Возвращает True, если дата и время отправки сообщения соответствуют заданному условию.

Формат поля "match_cron" соответствует формату даты и времени в crontab файлах.

{ "type": "datetime", "match_cron": "*/17 14-19 * * mon" }

Requirements на текст запроса пользователя

НазваниеОписание
classifier

Условие, которое зависит от результата работы внешней модели классификации.

Возвращает True, если результат классификации запроса относится к одной из указанных категорий, прошедших порог, но не равной классу other. Иначе возвращается False.

Название внешнего классификатора указывается в classifier.

{ "type": "classifier", "classifier": { "type": "external", "classifier": "your_classifier_name_from_classifiers_json_file", } }

Как добавить свой Requirement

Для добавления своего Requirement необходимо:

  1. Реализовать новый Requirement, производный от класса core.basic_models.requirement.Requirement.

    При этом необходимо реализовать метод check, который будет вызван для проверки условия:

    check(self, text_preprocessing_result: BaseTextPreprocessingResult, user: User) -> bool

    Чтобы поддержать кэширование результата проверки условия, при объявлении класса укажите атрибут cache_result = True:

    class MyCheckViaRestRequirement(Requirement):
    cache_result = True
    ...
  2. Сохранить новый Requirement в basic_entities/requirements.py или создать для хранения новый модуль.

  3. Зарегистрировать Requirement в классе, производном от SmartAppResources. Это позволит вызывать Requirement по названию. Пример:

    class MyAppResources(SmartAppResources):
    def init_requirements(self):
    super(MyAppResources, self).init_requirements()
    # "my_new_requirement" - это тип (type), с помощью которого можно вызвать объект в DSL
    requirements["my_new_requirement"] = MyNewRequirement
  4. Добавить unit-test на новый Requirement.

ПАО Сбербанк использует cookie для персонализации сервисов и удобства пользователей. Вы можете запретить сохранение cookie в настройках своего браузера.