Как ограничить ответ респондента

Данные, которые требуется получить от респондента, могут содержать разную информацию, но соответствовать определенному шаблону (например, номер телефона, адрес, номер паспорта, включая дату и место выдачи, и т.д.). Для сбора таких данных используйте блок Сбор данных с типом Регулярное выражение.

Два способа получить данные, которые вам нужно:

  1. Настроить проверку данных на корректность. В поле Формат задайте формат данных. Например, для получения номера телефона в поле Формат укажите: ^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$ (данному формату соответствуют российские мобильные телефонные номера, а также городские с кодом из трех цифр). Респондент может указать номер телефона, начиная с +7 или 8, использовать пробелы, скобки, тире и пр. При этом cистема все равно квалифицирует номер телефона и сохранит его в результатах диалога, либо остановит бот, если пользователь написал сообщение, не содержащее номера телефона.
  2. Настроить маску ввода. В поле Маска укажите маску ввода данных. Поле многострочное, расширяется по мере ввода текста. Описание маски должно автоматически подставлять постоянные символы и контролировать вводимые значения (количество символов, набор символов, диапазон значений, порядок ввода). Если маска указана неверно, она не работает.

Маску ввода нужно указать в формате JSON, прописав для нее параметры (ключи) и их значения.

Внимание!Все ключи и строковые значения указывайте в двойных кавычках – одинарные не работают

Параметры:

  • mask – маска или тип. Сейчас используется только один тип масок: IMask.MaskedRange" - диапазон числовых значений;
  • lazy – показывать подстановочный шаблон: true – нет, false – да;
  • placeholderChar – подстановочный символ, по умолчанию _;
  • blocks – объект с отдельными паттернами подстановки;
  • autofix – автоисправление при работе с диапазоном: true – да, false – нет;
  • maxLength – длина маски: если меньше диапазона, то будут добавлены нули в начале;
  • to – верхняя граница диапазона (только числа);
  • from – нижняя граница диапазона (только числа).

Символы, которые можно использовать для задания значения в параметре mask:

  • 0 – любая цифра;
  • a – любая буква;
  • * – любой символ;
  • [] – ввод значения на место символов в скобках не обязателен;
  • {} – фиксированная часть маски;
  • ` – предотвращает смещение символов назад;
  • определения должны отделаться от маски двойной обратной наклонной чертой – например, \\0.

Примеры:

Телефон РФ. Маска отображается респонденту в поле ввода сообщения.

{
"mask": "+{7}(000)000-00-00",
"lazy": false,
"placeholderChar": "_"
}
Телефон РФ. Маска не отображается в поле ввода сообщения. Респондент вводит данные в поле – они отображаются согласно маске.

{
"mask": "+{7}(000)000-00-00",
"lazy": true,
"placeholderChar": "_"
}
Паспорт РФ

{
"mask": "00 00 000000",
"lazy": false,
"placeholderChar": "_"
}
Время

{
"mask": "HH:mm",
"lazy": false,
"placeholderChar": "_",
"blocks": {
"HH": {
"mask": "IMask.MaskedRange",
"autofix": true
"from": 0,
"to": 23
},
"mm": {
"mask": "IMask.MaskedRange",
"autofix": true,
"from": 0,
"to": 59
}
}
}
Номер банковской карты

{
"mask": "0000 0000 0000 0000",
"lazy": false,
"placeholderChar": "_"
}
ИНН
{
"mask": "0000000000[00]",
"lazy": false,
"placeholderChar": "_"
}

Более подробное описание масок ввода см. IMaskJS.

Внимание! Заполняйте только одно из полей: Маска или Формат. Если маска и формат будут противоречить друг другу, это приведет к остановке диалога: бот будет запрашивать информацию по указанному формату, а респондент не сможет ее указать, т.к. ограничен маской ввода.
СоветЕсли вы используете блок Форма, для получения шаблонных данных добавьте поле и выберите тип Регулярное выражение.