---
url: /commands/actions/form.md
description: >-
Действие «Форма» — пошаговые вопросы участнику в Telegram и передача ответов в
следующее действие через form.values.
---
# Форма
Форма задает участнику вопросы по очереди — как анкета. Когда он ответит на последний вопрос, бот запустит другое действие и передаст ему все ответы. Так делают заявки в клуб, обратную связь, регистрацию на турнир.
## Как это выглядит для участника { #flow }
1. Участник вызывает команду, например `!заявка`.
2. Бот присылает первый вопрос. Поле ввода Telegram само переключается на ответ этому сообщению.
3. Участник отвечает. Если вопрос с вариантами, он просто нажимает кнопку.
4. Бот присылает следующий вопрос — и так до конца.
5. После последнего ответа бот запускает действие «после отправки».
На каждом шаге есть кнопка **«Отмена»**. На ответ дается 5 минут — если участник молчит дольше, бот отменяет форму и сообщает об этом.
Как тебя зовут и сколько тебе лет?
## Настройки формы { #settings }
| Поле | Описание |
|---|---|
| **Заголовок** | Название формы, показывается в первом сообщении |
| **Поля** | От 1 до 5 вопросов — см. ниже |
| **Действие после отправки** | Какое действие этой команды запустить с ответами |
### Поле формы { #fields }
| Настройка | Описание |
|---|---|
| **ID** | Имя ответа латиницей, по которому его достать в шаблоне: `form.values.tag` |
| **Тип** | Текст, Число, Выбор или Да/Нет |
| **Вопрос** | Что бот спросит |
| **Обязательное** | Нельзя пропустить |
| **Подсказка** | Шаблон, который бот покажет как подсказку к ответу — например, `{{ member.name }}` |
| **Варианты** | Для типа «Выбор»: какие кнопки показать |
| **Мин. и макс.** | Для типа «Число»: допустимый диапазон |
| Тип | Как отвечает участник | Что придет в шаблон |
|---|---|---|
| Текст | Пишет ответ | Строка |
| Число | Пишет число | Число. Если написал не число или вне диапазона, бот переспросит |
| Выбор | Нажимает одну из кнопок-вариантов | Значение выбранного варианта |
| Да/Нет | Нажимает «Да» или «Нет» | `true` или `false` |
## Ответы в следующем действии { #values }
Действие «после отправки» получает ответы в `form.values`. Каждый ответ доступен по ID поля:
```template
{{ form.values.tag }}
{{ form.values['tag'] }}
```
Обе записи одинаковые. Вторая удобна, если ID хранится в переменной.
## Пример: заявка в клуб { #example }
Команда `!заявка` с двумя действиями.
**Действие 1 — «Анкета»** (по умолчанию), тип **Форма**:
| ID | Тип | Вопрос | Настройки |
|---|---|---|---|
| `tag` | Текст | Твой тег в Brawl Stars? | обязательное |
| `trophies` | Число | Сколько у тебя кубков? | от 0 до 200 000 |
| `mode` | Выбор | Любимый режим? | Варианты: Захват кристаллов, Броулбол, Одиночное ШД |
| `active` | Да/Нет | Готов играть в клубной лиге каждую неделю? | обязательное |
Действие после отправки — «Отправить заявку».
**Действие 2 — «Отправить заявку»**, тип **Отправка сообщения**, куда — **в топик «Заявки»**:
```template
## Новая заявка
От: {{ member }}
{{ table([
['Тег', '#' ~ (form.values.tag | upper | replace('#', ''))],
['Кубки', form.values.trophies | number_format],
['Режим', form.values.mode],
['Клубная лига', form.values.active ? 'да' : 'нет']
], {bordered: true, compact: true}) }}
```
## Новая заявка
От: [Анна](#)
| | |
|---|---|
| Тег | #ABCD1234 |
| Кубки | 24 510 |
| Режим | Броулбол |
| Клубная лига | да |
::: tip Проверка игрока по ЧС
Если ваш чат привязан к клубу Astral, в то же действие можно добавить проверку по черному списку — см. пример в статье [Пространство astral](/templates/astral#examples).
:::
## Ограничения { #limits }
* От 1 до 5 полей в форме.
* На каждый ответ — 5 минут.
* Бот принимает ответ только от того, кто начал форму, и только ответом на сообщение с вопросом.
* Форма не может запустить другую форму: действие после отправки должно быть другого типа.