EnotPRO Logo EnotPRO

Формы

Формы — это инструмент для последовательного сбора данных от пользователя. Форма состоит из набора полей, которые пользователь заполняет одно за другим. Это альтернатива длинным диалогам: вместо хаотичной переписки вы получаете структурированные данные в предсказуемом порядке.

📝 Назначение

Формы используются для:

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

Ключевые возможности:

  • Последовательный сбор данных (поле за полем)
  • Валидация вводимых данных (email, телефон, число, regex)
  • Поддержка различных типов полей (текст, выбор, медиа, дата)
  • Условное отображение полей
  • Автоматическое сохранение результатов
  • Кастомные сообщения об ошибках

💡 Совет: Используйте формы вместо длинных диалогов с пользователем — они обеспечивают предсказуемый порядок и формат данных.

Как это работает

Шаг Действие
1 Создаёте форму в разделе /admФормы
2 Добавляете поля (строка, число, выбор, фото и т.д.)
3 Настраиваете валидацию для каждого поля
4 Запускаете форму реакцией StartForm
5 Пользователь заполняет поля одно за другим
6 После завершения формы вы обрабатываете результаты в триггере «Финиш формы»

⚠️ Важно: Форму можно запустить только в личном чате с ботом. Запустить форму для другого пользователя удалённо нельзя.

Создание формы

Шаг 1: Перейдите в раздел

/admФормыДобавить

Шаг 2: Настройте основные параметры

Параметр Описание
Название Техническое название формы (видно только администраторам)
Описание Краткое описание назначения формы (опционально)
Лимит интервала Минимальное время между запусками формы для одного пользователя (в секундах). По умолчанию — 0 (без ограничений)

💡 Совет: Лимит интервала полезен, чтобы пользователи не спамили запусками формы. Например, установите 60 — одна форма в минуту.

Шаг 3: Добавьте поля

Нажмите «Добавить поле» и настройте его.

Типы полей формы

Категория Тип поля Описание
Инфо Информационный пост Отображает текст с кнопкой «Далее». Не собирает данные. Используется для вступлений и пояснений
Выбор Выбор Кнопки для одиночного или множественного выбора
Текст Строка Поле для ввода текста (1–4096 символов)
Текст Число Поле для ввода целых чисел
Текст Дробное число Поле для ввода чисел с плавающей точкой
Текст Телефон Поле для ввода номера телефона с кнопкой «Отправить номер»
Текст Ссылка Поле для ввода URL
Текст Юзернейм Поле для ввода @username
Текст Дата Поле для выбора даты (календарь)
Текст Почта Поле для ввода email
Вложения Фото Приём фотографий
Вложения Видео Приём видео
Вложения Аудио Приём аудиофайлов
Вложения Файл Приём любых документов
Вложения Стикер Приём стикеров

Настройка поля

Общие настройки

Параметр Описание
Ключ Уникальный идентификатор поля. Используется для доступа к ответу: ${form.fields.ключ}
Название Отображаемый заголовок поля (пользователь видит его)
Описание Дополнительный текст-подсказка под заголовком
Обязательное Если включено — пользователь не может пропустить поле
Скрыть кнопку "Назад" Запрещает возврат к предыдущему полю

Валидация (для текстовых полей)

Параметр Описание
Регулярное выражение Шаблон для проверки ввода. Например, ^\+7\d{10}$ для номера телефона
Сообщение об ошибке Текст, который увидит пользователь при неверном вводе
Минимальная длина Минимальное количество символов (для строк)
Максимальная длина Максимальное количество символов (для строк)
Минимальное значение Минимальное числовое значение (для чисел)
Максимальное значение Максимальное числовое значение (для чисел)

Настройки для поля «Выбор»

Параметр Описание
Варианты Список вариантов для выбора (каждый с новой строки)
Режим выбора Одиночный — можно выбрать только один вариант; Множественный — можно выбрать несколько
Разрешить свой вариант Если включено — пользователь может ввести свой текст вместо выбора из списка

Настройки для поля «Дата»

Параметр Описание
Минимальная дата Самая ранняя дата, которую можно выбрать
Максимальная дата Самая поздняя дата, которую можно выбрать

Триггеры формы

У каждой формы есть встроенные триггеры, которые срабатывают на разных этапах.

Триггер Когда срабатывает Типичное использование
Старт формы При запуске формы, до первого поля Инициализация данных, очистка старых переменных
Перед полем Перед отображением каждого поля Динамическая подстановка текста, условное скрытие поля
После поля После успешного ввода данных в поле Сохранение ответа, валидация через API
Ошибка поля При ошибке валидации Отправка кастомного сообщения об ошибке
Финиш формы После успешного заполнения всех полей Обработка результатов, сохранение данных
Отмена формы При нажатии кнопки «Отменить форму» Очистка временных данных
Лимит интервала При попытке запустить форму слишком часто Предупреждение пользователю

Доступ к результатам

После заполнения формы данные доступны в переменной:

${form.fields.ключ}

где ключ — значение, указанное в настройках поля.

Примеры:

Ключ поля Переменная Значение
name ${form.fields.name} Текст, введённый пользователем
age ${form.fields.age} Число, введённое пользователем
photo ${form.fields.photo} Медиафайл (объект с file_id)
choose ${form.fields.choose.0} Первый выбранный вариант (для одиночного выбора)
choose ${form.fields.choose} Массив выбранных вариантов (для множественного выбора)

Пример использования результата

В триггере «Финиш формы»:

1. GetVarCloud → загружаем текущие данные пользователя
2. SetVarCloud → сохраняем имя: ${form.fields.name}
3. SetVarCloud → сохраняем телефон: ${form.fields.phone}
4. SendMessage → Спасибо, ${form.fields.name}! Мы свяжемся с вами по номеру ${form.fields.phone}.

Работа с медиа в формах

Поля типа «Фото», «Видео», «Аудио», «Файл» возвращают объект с file_id. Чтобы отправить этот файл позже, используйте макрос !{media}:

!{media|path: ${form.fields.photo}}

Пример в триггере «Финиш формы»:

1. SetVarCloud → сохраняем фото: ${form.fields.photo}  # сохраняем как есть
2. SendMessage → "Ваше фото получено!"
3. SendMessage → !{media|path: ${form.fields.photo}}  # пересылаем фото пользователю

Условное отображение полей

Вы можете показывать или скрывать поля в зависимости от предыдущих ответов. Для этого используйте триггер «Перед полем».

Пример: Показывать поле «Адрес доставки» только если пользователь выбрал «Доставка» в предыдущем поле.

В триггере «Перед полем» для поля «Адрес доставки»:

1. TriggerFolder с условием: String → ${form.fields.delivery_type} = "Доставка"
   → (условие true) — поле показывается
   → (условие false) — поле скрывается с помощью Exit

Доступные реакции для работы с формами

Реакция Назначение Ссылка
StartForm Запустить форму Подробнее
CancelForm Принудительно остановить активную форму Подробнее
SendFormResult Отправить собранные данные формы в чат Подробнее
ErrorFormField Вызвать ошибку валидации для текущего поля Подробнее

Пример: форма регистрации

Задача: Собрать контактные данные нового пользователя.

Поля формы

Ключ Тип Название Обязательное Настройки
1 name Строка Ваше имя ✅ Да Минимум 2 символа
2 email Почта Ваш email ✅ Да Валидация email
3 phone Телефон Номер телефона ❌ Нет Режим «Предоставить номер»
4 comment Строка Комментарий ❌ Нет Максимум 500 символов

Триггер «Финиш формы»

Реакция 1: SetVarCloud
  → Тип: person
  → Название: user_name
  → Значение: ${form.fields.name}

Реакция 2: SetVarCloud
  → Тип: person
  → Название: user_email
  → Значение: ${form.fields.email}

Реакция 3: SetVarCloud
  → Тип: person
  → Название: user_phone
  → Значение: ${form.fields.phone}   # если поле не было заполнено — пусто

Реакция 4: SendMessage
  → Текст: ✅ Регистрация завершена!

Реакция 5: SendMessage (в технический чат)
  → Текст: Новый пользователь: ${form.fields.name}, ${form.fields.email}

Запуск формы

Обработчик команды /register:

Реакция 1: StartForm
  → Форма: registration

⚠️ Частые ошибки и их решение

Ошибка 1: Форма не запускается

Причина: Пользователь уже находится в активной форме. Решение: У пользователя может быть только одна активная форма. Используйте CancelForm перед запуском новой формы.

Ошибка 2: Поле не проходит валидацию, но ошибка не показывается

Причина: Триггер «Ошибка поля» не настроен. Решение: Добавьте в триггер «Ошибка поля» реакцию SendMessage с текстом ошибки. Используйте ${form.error} для отображения текста ошибки.

Ошибка 3: Данные не сохраняются

Причина: Обработка результатов происходит не в триггере «Финиш формы». Решение: Все действия по сохранению данных должны быть в триггере «Финиш формы». Триггеры «После поля» не подходят для финального сохранения.

Ошибка 4: Неправильный доступ к полю выбора

Причина: Использование ${form.fields.choose} для одиночного выбора. Решение: Для одиночного выбора используйте ${form.fields.choose.0}. Для множественного — ${form.fields.choose} (это массив).

Ошибка 5: Пользователь может вернуться к заполненному полю

Причина: Кнопка «Назад» не скрыта. Решение: Включите опцию «Скрыть кнопку "Назад"» в настройках поля, если возврат нежелателен.

Ошибка 6: Медиа-файл не сохраняется

Причина: Медиа-файл сохраняется как объект, а не как строка. Решение: Сохраняйте ${form.fields.photo} как есть (это объект с file_id). Для отправки используйте !{media|path: ${form.fields.photo}}.

Сравнение форм и обычных диалогов

Характеристика Форма Обычный диалог
Структура Чёткая, предсказуемая Хаотичная, зависит от пользователя
Валидация Встроенная Требует ручной проверки
Ошибки Можно обрабатывать в одном месте Нужно обрабатывать в каждом триггере
Медиа Поддерживается Требует отдельного обработчика
Сложность настройки Средняя Низкая (на старте) / Высокая (при росте)
Когда использовать Для структурированных данных Для простых сценариев и свободного общения

💡 Совет: Используйте формы, когда нужно собрать 3+ полей. Для 1–2 полей достаточно обычного диалога.

🔗 Связанные разделы

Раздел Описание
Реакция StartForm Запуск формы
Реакция CancelForm Отмена формы
Реакция SendFormResult Отправка результатов
Реакция ErrorFormField Ошибка валидации
Локальные переменные Временное хранение данных в триггере
Обработчики команд Запуск формы по команде

🔗 Быстрая навигация

  • Вверх
  • Создание формы
  • Типы полей
  • Настройка поля
  • Триггеры формы
  • Доступ к результатам
  • Примеры
  • Частые ошибки
  • Связанные разделы
© 2025 EnotPRO. Все права защищены.