Requirement (условие) - это условия для совершения каких-либо действий. Например, условия на заполнение поля, на запуск сценария, запуск развилки в ответе и т.д. Могут быть комбинированы в любом порядке.
Результатом проверки условия является булево значение - True / False. Результат проверки можно кэшировать, чтобы ускорить исполнение сценария.
Составные Requirements
Ниже описаны параметры Requirements, которые комбинируют значения других Requirements.
| Type | Описание |
|---|---|
and | Возвращает True, если все requirements вернули True. Используемые параметры:
{
"type": "and",
"requirements": [
{
"type": "requirement_t1",
"t1_field": "t1_value"
},
{
"type": "requirement_t2",
"t2_field": "t2_value"
}
]
} |
or | Возвращает True, если хотя бы один из requirements вернул True. Используемые параметры:
{
"type": "or",
"requirements": [
{
"type": "requirement_t1",
"t1_field": "t1_value"
},
{
"type": "requirement_t2",
"t2_field": "t2_value"
}
]
} |
not | Отображение инвертированного значения внутреннего requirement. Используемые параметры:
{
"type": "not",
"requirement": {
"type": "requirement_t1",
"t1_field": "t1_value"
}
} |
external | Ссылка на внешний по отношению к текущему описанию requirement. Позволяет вызывать requirement по имени. Для этого необходимо описать {
"type": "external",
"requirement": "callcenter_white_list"
} |
Requirements на пользователя
| Type | Описание |
|---|---|
channel | Возвращает True, если канал пользователя входит в channels. Используемые параметры:
{
"type": "channel",
"channels": ["SBERBANK_MESSENGER"]
} |
random | Возвращает True в том проценте случаев, который указан в percent. Не фиксирует свой выбор для конкретного пользователя. Используемые параметры:
{
"type": "random",
"percent": 50
} |
platform_type | Возвращает True, если платформа смартапа совпадает с platform_type. Используемые параметры:
{
"type": "platform_type",
"platfrom_type": "IOS"
} |
platform_version | Возвращает True, если версия платформы смартапа соответствует заданному условию. Используемые параметры:
|
surface | Возвращает True, если поверхность смартапа совпадает с surface. Используемые параметры:
"requirement": {
"type": "surface",
"surface": "COMPANION"
} |
surface_version | Возвращает True, если версия поверхности смартапа соответствует заданному условию. Правила заполнения поля аналогичны условию {
"type": "surface_version",
"operator": {
"type": "more",
"amount": "20.11.1001"
}
} |
app_type | Возвращает True, если тип смартапа соответствует заданному условию. {
"type": "app_type",
"app_type": "DIALOG"
} |
| Возвращает True, если выбранный {
"type": "capabilities_property_available",
"property_type": "screen"
} |
Requirements на контекст беседы
| Название | Описание |
|---|---|
counter_value | Условия на значение счетчика. Используемые параметры:
{
"type": "counter_value",
"key": "greeting",
"operator": {
"type": "more",
"amount": 0
}
} |
counter_time | Проверка, что со времени последнего обновления счетчика key прошло меньше/больше/... amount секунд. Например: если за последние сутки пользователю было отправлено поздравление, то это поздравление больше не будет ему отправляться {
"type": "counter_time",
"key": "congratulation",
"operator": {
"type": "more",
"amount": 86400
}
} |
| Jinja шаблон с булевым результатом проверки {
"type": "template",
"template": "{{ payload.message.strip() in payload.murexIds }}"
} |
ask_again_exist | Проверка возможности повторного обращения к полю, к которому был задан вопрос в последнем сценарии. {
"type": "ask_again_exist"
} |
| Проверка, что результат выполнения jinja шаблона входит в допустимый список возможных результатов items:
{
"type": "template_in_array",
"template": "{{ payload.message.clientInfo.tbCode }}"
"items": ["99", "42"]
} |
| Операция обратная к template_in_array - проверка на наличие хотя бы одного значения из списка items в результате выполнения jinja шаблона:
{
"type": "array_item_in_template",
"template": {
"type": "unified_template",
"template": {{ payload.userInfo.departcode.split('/')|tojson }}",
"loader": "json"
},
"items": ["111", "456"]
} |
| Поиск совпадения по регулярному выражению внутри результата выполнения jinja шаблона
Используемые параметры:
{
"type": "regexp_in_template",
"template": "{{ payload.message.strip() }}",
"regexp": "/^\d+$/"
} |
| Возвращает True, если время отправки сообщения соответствует заданному условию. Формат времени "HH:MM:SS". Правила заполнения поля аналогичны условию
|
| Возвращает True, если дата и время отправки сообщения соответствуют заданному условию. Формат поля "match_cron" соответствует формату даты и времени в crontab файлах.
|
Requirements на текст запроса пользователя
| Название | Описание |
|---|---|
classifier | Условие, которое зависит от результата работы внешней модели классификации. Возвращает Название внешнего классификатора указывается в
|
Как добавить свой Requirement
Для добавления своего Requirement необходимо:
-
Реализовать новый 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
... -
Сохранить новый Requirement в basic_entities/requirements.py или создать для хранения новый модуль.
-
Зарегистрировать 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 -
Добавить unit-test на новый Requirement.