Формы
Формы — это инструмент для последовательного сбора данных от пользователя. Форма состоит из набора полей, которые пользователь заполняет одно за другим. Это альтернатива длинным диалогам: вместо хаотичной переписки вы получаете структурированные данные в предсказуемом порядке.
📝 Назначение
Формы используются для:
- Регистрации пользователей (имя, 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 | Ошибка валидации |
| Локальные переменные | Временное хранение данных в триггере |
| Обработчики команд | Запуск формы по команде |
🔗 Быстрая навигация
- Вверх
- Создание формы
- Типы полей
- Настройка поля
- Триггеры формы
- Доступ к результатам
- Примеры
- Частые ошибки
- Связанные разделы