Документация Formsend
Formsend принимает заявки с форм на вашем сайте и отправляет их вам в Telegram или ВКонтакте. Вставьте код на сайт — и всё работает. Программист не нужен.
Быстрый старт
Начните получать заявки за 3 шага:
- Добавьте сайт в личном кабинете. Вы получите код для вставки.
- Скопируйте код со страницы настроек сайта.
- Вставьте код на ваш сайт перед
</body>.
form_name.
Самый простой способ
Вставьте наш код на сайт — он автоматически найдёт все формы и будет отправлять заявки. Ничего менять в формах не нужно!
<script
src="https://formsend.ru/formsend.min.js"
data-formsend-key="YOUR_PUBLIC_KEY"
defer>
</script>
Готово! Теперь все формы на странице будут отправлять заявки вам.
Другой способ: через HTML
Если вы хотите, чтобы форма отправлялась напрямую, укажите адрес Formsend в action.
После отправки пользователь будет перенаправлен на страницу успеха.
<form action="https://formsend.ru/webhooks/YOUR_PUBLIC_KEY" method="POST"> <input type="text" name="name" required placeholder="Имя"> <input type="email" name="email" required placeholder="Email"> <textarea name="message" placeholder="Сообщение"></textarea> <!-- Опционально: перенаправление после отправки --> <input type="hidden" name="_next" value="https://mysite.com/thanks.html"> <button type="submit">Отправить</button> </form>
Для разработчиков: через JavaScript
Если вам нужна отправка без перезагрузки страницы, используйте fetch.
const form = document.querySelector('#contact-form');
form.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
try {
const response = await fetch('https://formsend.ru/webhooks/YOUR_PUBLIC_KEY', {
method: 'POST',
body: formData // Или JSON: JSON.stringify(Object.fromEntries(formData))
});
if (response.ok) {
alert('Спасибо! Заявка отправлена.');
form.reset();
}
} catch (error) {
console.error('Ошибка:', error);
}
});
Интеграция через HTML
Самый простой способ — прямая отправка формы на наш сервер. Браузер отправит данные, и пользователь будет перенаправлен на страницу успеха (или обратно, если настроен редирект).
<form action="https://formsend.ru/webhooks/YOUR_PUBLIC_KEY" method="POST"> <input type="text" name="name" required placeholder="Имя"> <input type="email" name="email" required placeholder="Email"> <textarea name="message" placeholder="Сообщение"></textarea> <!-- Опционально: перенаправление после отправки --> <input type="hidden" name="_next" value="https://mysite.com/thanks.html"> <button type="submit">Отправить</button> </form>
Интеграция через JavaScript
Для SPA приложений или отправки без перезагрузки страницы используйте fetch.
const form = document.querySelector('#contact-form');
form.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(form);
try {
const response = await fetch('https://formsend.io/webhooks/YOUR_PUBLIC_KEY', {
method: 'POST',
body: formData // Или JSON: JSON.stringify(Object.fromEntries(formData))
});
if (response.ok) {
alert('Спасибо! Заявка отправлена.');
form.reset();
}
} catch (error) {
console.error('Ошибка:', error);
}
});
JS Snippet
Самый простой способ для большинства сайтов. Скрипт сам найдет все формы и обработает отправку.
Используйте наш готовый скрипт для автоматического перехвата всех форм на странице. Он сам обработает отправку и покажет уведомление.
<script
src="https://formsend.io/formsend.min.js"
data-formsend-key="YOUR_PUBLIC_KEY"
defer>
</script>
Примеры для фреймворков
Готовые примеры интеграции для популярных JavaScript фреймворков.
React
import { useState } from 'react';
function ContactForm() {
const [loading, setLoading] = useState(false);
const [message, setMessage] = useState('');
const handleSubmit = async (e) => {
e.preventDefault();
setLoading(true);
const formData = new FormData(e.target);
try {
const response = await fetch(
'https://formsend.ru/webhooks/YOUR_PUBLIC_KEY',
{ method: 'POST', body: formData }
);
if (response.ok) {
setMessage('Спасибо! Заявка отправлена.');
e.target.reset();
}
} catch (error) {
setMessage('Ошибка отправки');
} finally {
setLoading(false);
}
};
return (
<form onSubmit={handleSubmit}>
<input type="text" name="name" required />
<input type="email" name="email" required />
<button disabled={loading}>
{loading ? 'Отправка...' : 'Отправить'}
</button>
{message && <p>{message}</p>}
</form>
);
}
Vue 3
<template>
<form @submit.prevent="handleSubmit">
<input v-model="form.name" type="text" required />
<input v-model="form.email" type="email" required />
<button :disabled="loading">
{{ loading ? 'Отправка...' : 'Отправить' }}
</button>
<p v-if="message">{{ message }}</p>
</form>
</template>
<script setup>
import { ref } from 'vue';
const form = ref({ name: '', email: '' });
const loading = ref(false);
const message = ref('');
const handleSubmit = async () => {
loading.value = true;
const formData = new FormData();
Object.entries(form.value).forEach(([k, v]) =>
formData.append(k, v)
);
try {
const res = await fetch(
'https://formsend.ru/webhooks/YOUR_PUBLIC_KEY',
{ method: 'POST', body: formData }
);
if (res.ok) message.value = 'Отправлено!';
} finally {
loading.value = false;
}
};
</script>
Next.js Server Action
// app/actions.ts
'use server';
export async function submitForm(formData: FormData) {
const res = await fetch(
'https://formsend.ru/webhooks/YOUR_PUBLIC_KEY',
{ method: 'POST', body: formData }
);
return { success: res.ok };
}
// app/contact/page.tsx
'use client';
import { submitForm } from './actions';
import { useFormState } from 'react-dom';
export default function ContactPage() {
const [state, formAction] = useFormState(submitForm, null);
return (
<form action={formAction}>
<input type="text" name="name" required />
<input type="email" name="email" required />
<button type="submit">Отправить</button>
{state?.success && <p>Отправлено!</p>}
</form>
);
}
Проверка согласия
Formsend может не отправлять заявку, если пользователь не поставил галочку «Согласен».
Как включить:
- Включите Проверку согласия в настройках сайта.
- Укажите название поля (по умолчанию
consent). - Добавьте галочку в вашу форму с этим названием.
<label> <input type="checkbox" name="consent" required> Я согласен на обработку персональных данных </label>
Какие поля получать
Можно настроить, чтобы получать только нужные поля, а остальное игнорировать.
В настройках укажите список полей через запятую: name, phone, email.
Безопасность
Проверка подлинности
Для разработчиков: можно проверять, что заявка пришла именно с вашего сайта.
- Создайте секретный ключ в настройках.
- Formsend добавит специальный заголовок
X-Formsend-Signatureк каждой заявке.
Защита от спама
Ограничивает количество отправок с одного IP. По умолчанию 60 в минуту.
Ограничение размера
Ограничивает максимальный размер сообщения. Полезно, чтобы не принимать слишком большие тексты.
Telegram Интеграция
Получайте уведомления о новых заявках прямо в Telegram!
1. Получите Chat ID
- Откройте бота: @formsendru_bot
- Нажмите Start или отправьте команду
/start - Бот пришлет вам ваш Chat ID
- Скопируйте этот Chat ID
2. Настройте в личном кабинете
- Перейдите в настройки проекта
- Включите Telegram
- Вставьте полученный Chat ID
- Сохраните настройки
/start — бот пришлет Chat ID группы.
3. Готово!
Теперь все новые заявки будут приходить в Telegram с полной информацией о клиенте.
VK Интеграция
Для получения уведомлений в ВКонтакте необходимо настроить токен сообщества.
1. Получите токен
- Создайте сообщество ВКонтакте (или используйте существующее).
- Зайдите в Управление → Работа с API → Ключи доступа.
- Создайте ключ с правами: Сообщения сообщества.
2. Узнайте Peer ID
- Для личных сообщений: ваш ID страницы (число, например
123456789). - Для беседы:
2000000000+ ID беседы.
3. Разрешите сообщения
Обязательно напишите любое сообщение в сообщения вашего сообщества, чтобы разрешить боту отвечать вам.
Частые вопросы
Почему сервер всегда возвращает 200 OK?
Мы принимаем данные асинхронно. Если формат верный (JSON или FormData), мы ставим задачу в очередь. Ошибки доставки (например, в VK) видны в логах, но не блокируют ответ клиенту.
Данные не приходят в VK
Проверьте: 1) Включена ли интеграция в настройках. 2) Валиден ли токен. 3) Разрешили ли вы сообщения сообществу (написав ему первым).