Формы

Как принимать заявки с HTML-формы без собственного backend

Разметка формы, которую Deploya обнаруживает в статическом проекте, и обработка успешной или ошибочной отправки.

Статический сайт не исполняет серверный обработчик `send.php` или маршрут `/api/contact`. Формы Deploya принимают POST-запрос на стороне платформы, сохраняют заявку в проекте и возвращают браузеру результат.

## Минимальная разметка

Форма должна иметь уникальное имя, метод POST и атрибут `data-deploya="true"`. У каждого отправляемого поля нужен `name`.

```html
<form name="contact" method="POST" data-deploya="true">
  <label>
    Имя
    <input name="name" autocomplete="name" required>
  </label>
  <label>
    Телефон
    <input name="phone" type="tel" autocomplete="tel" required>
  </label>
  <button type="submit">Отправить</button>
</form>
```

После публикации Deploya сканирует HTML и показывает найденную форму в разделе проекта. Если форма не найдена, проверяются настоящий тег `form`, атрибут `name` и опубликованная версия. Разметка, которая создаётся JavaScript только после загрузки, может не попасть в статический анализ.

## Отправка без перезагрузки

Обычная HTML-форма перезагружает страницу. Для контролируемого сообщения об успехе запрос отправляется через JavaScript:

```js
const form = document.querySelector('form[data-deploya="true"]');

form.addEventListener('submit', async (event) => {
  event.preventDefault();
  const response = await fetch(form.action || location.href, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams(new FormData(form))
  });

  if (!response.ok) throw new Error('Заявка не отправлена');
  form.reset();
});
```

Кнопку стоит блокировать на время запроса, иначе двойной клик создаст две заявки. Ошибку нужно показывать рядом с формой, сохраняя введённые данные.

> Место для скриншота: раздел «Формы» с выбранным проектом, найденной формой contact и тестовой заявкой.

## Персональные данные

Поля имени, телефона и email относятся к данным посетителя. На странице указывается цель сбора, ссылка на политику обработки и согласие, когда оно требуется для выбранного сценария. Не нужно собирать паспортные данные или медицинскую информацию через универсальную форму без отдельной правовой и технической модели.

## Защита от спама

После подключения откройте **Формы → Антиспам**. Базовые неагрессивные проверки уже включены: Deploya проверяет подписанный токен, скрытую ловушку, соответствие полей опубликованной форме, повторы и частоту запросов. Строгие правила для кириллицы, ссылок, браузерных признаков и собственных стоп-слов включаются отдельно и сохраняются автоматически.

Отфильтрованные сообщения остаются в папке «Спам» 30 дней и не отправляются в интеграции. Ошибочно заблокированную заявку можно вернуть кнопкой «Не спам». Подробнее о выборе правил — в статье [«Как защитить форму от спама без CAPTCHA»](https://blog.deploya.ru/antispam-dlya-form-bez-captcha).

Точная схема подключения и ограничения поддерживаются в [документации форм](https://docs.deploya.ru/forms). После изменения разметки проект публикуется заново, затем в панели запускается проверка подключения.

Все статьи