Form (форма) - сущность DSL, с помощью которой описывается механизм слот-филлинга. В рамках этого механизма запрос клиента - это тема обращения и набор параметров, которые образуют форму со слотами (fields).
В рамках одной формы все поля заполняются одновременно, что позволяет не описывать конкретный порядок заполнения параметров интента, а также хранить информацию в структурированном виде и переиспользовать ее от одной формы к другой.
На DSL можно создать 2 типа форм:
- Базовая форма (Form);
- Композитная форма (CompositeForm).
Базовая форма
Базовая форма используется в сценариях, в которых имеется фиксированный для опроса набор полей. Например, есть сценарий оплаты телефона, в котором можно указать поля с суммой, номером телефона и картой для перевода. И из этих полей, к примеру, только первое поле может быть обязательным.
Название | Обязательное | Описание |
---|---|---|
lifetime | Нет | Время жизни формы в секундах. После истечения указанного времени и после последнего попадания в форму, эта форма удаляется. По умолчанию задано значение 86400 секунд (сутки) |
fields | Да | Набор полей, составляющих форму. Описываются в том порядке, в котором их необходимо заполнять и задавать уточняющие вопросы. Представляет собой словарь вида {"form_name": Form / Формы} |
{
"app_hello": {
"lifetime": 600,
"fields": {
"name": {
"required": true,
"questions": [
{
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Какой твой userID?"
}
}
],
"filler": {
"type": "user_id"
}
}
}
}
}
Пример формы с повторными вопросами
{
"experience": {
"type": "question",
"ask_again_questions": [
{
"type": "string",
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Не расслышал. Как давно ты программируешь на Python?",
"items": [
{
"bubble": {
"text": "Не расслышал. Как давно ты программируешь на Python?"
}
}
]
}
},
{
"type": "string",
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Видимо, я сегодня глуховат? Повтори, пожалуйста, сколько ты программируешь на Python?",
"items": [
{
"bubble": {
"text": "Видимо, я сегодня глуховат? Повтори, пожалуйста, сколько ты программируешь на Python?"
}
}
]
}
}
],
"questions": [
{
"type": "string",
"command": "ANSWER_TO_USER",
"nodes": {
"pronounceText": "Сколько лет ты программируешь на Python?",
"items": [
{
"bubble": {
"text": "Сколько лет ты программируешь на Python?"
}
}
]
}
}
],
"filler": {
"type": "number_first"
}
}
}
Композитная форма
Композитная форма - это набор форм. Используется в сценариях с развилками, когда набор следующих уточняющих вопросов зависит от значений предыдущего набора. Выбор той или иной дочерней формы в конкретный момент времени управляется из Scenario.
Название | Обязательное | Описание |
---|---|---|
lifetime | Нет | Время жизни формы в секундах. После истечения указанного времени и после последнего попадания в форму, эта форма удаляется. По умолчанию задано значение 86400 секунд (сутки) |
forms | Да | Набор полей, составляющих форму. Описываются в том порядке, в котором их необходимо заполнять и задавать уточняющие вопросы. Представляет собой словарь вида {"form_name": Form / Формы} |
{
"type": "composite",
"lifetime": 14400,
"version": 1,
"forms": {
"start": {*FORM*},
"form1": {*FORM*},
"form2": {*FORM*}
}
}