Документация проекта
Заявки с сайта (webhook)
Заявки с сайта попадают в CRM через один секретный URL. Владелец сети создаёт сайт в CRM и копирует URL. Разработчик вставляет его в форму или код — лиды появляются автоматически.
Кто что делает
- Владелец сети — в CRM, раздел «Источники → Сайт». Создаёт сайт, копирует webhook URL и передаёт его разработчику (или сам вставляет в Tilda).
- Разработчик — получает URL от владельца и вставляет в HTML-форму или JavaScript на сайте. Доступ в CRM не нужен.
- Tilda — владелец копирует URL из CRM и вставляет в настройки webhook формы в Tilda. Разработчик не обязателен.
Шаги для владельца сети
- Войдите в CRM → Источники → карточка «Сайт». Если приём ещё не включён — нажмите «Активировать».
- Нажмите «Добавить сайт». Укажите название (например, «Казань») и домен этого сайта.
- Скопируйте webhook URL у нужного сайта — кнопка «Копировать» рядом со ссылкой.
- Передайте URL разработчику (мессенджер, почта). URL секретный — не публикуйте на сайте и не кладите в открытый репозиторий.
Шаги для разработчика
- Получите webhook URL от владельца сети. Один URL = один сайт (город, лендинг, центр).
- Вставьте URL в форму (атрибут action) или в fetch — готовые примеры ниже. В примерах YOUR_TOKEN замените на URL целиком из CRM.
- Отправьте тестовую заявку. В CRM должен появиться лид в «Новый» с меткой «Сайт» и названием сайта (например, «Казань»).
Webhook URL — как пароль: кто знает ссылку, может отправлять заявки от имени сайта. Храните в env или секретах, не в публичном коде на GitHub.
Несколько сайтов
Если у сети несколько сайтов — для каждого создайте отдельную строку в CRM. У «Казани» свой URL, у «Москвы» — другой. Заявка получит метку по названию сайта из CRM.
Куда отправлять заявку
POST на URL из CRM. Подходят JSON (fetch, backend) и обычная HTML-форма (form POST). Tilda шлёт POST сама — достаточно вставить URL в настройки формы.
POST https://larnes.ru/api/webhooks/website/YOUR_TOKENСамописный сайт: HTML-форма
Вставьте webhook URL в action. method="POST" обязателен — GET не подходит.
<form action="https://larnes.ru/api/webhooks/website/YOUR_TOKEN?redirect=https://yoursite.com/thanks" method="POST">
<input name="phone" type="tel" required />
<input name="name" type="text" />
<input name="email" type="email" />
<textarea name="message"></textarea>
<input type="hidden" name="form_id" value="main" />
<button type="submit">Отправить</button>
</form>Добавьте ?redirect=https://ваш-сайт.ru/spasibo — после успеха браузер перейдёт на страницу «Спасибо». Только https (на dev можно http://localhost).
Самописный сайт: fetch (JSON)
Если форма отправляется через JavaScript — POST с Content-Type: application/json. URL тот же, что дал владелец.
await fetch("https://larnes.ru/api/webhooks/website/YOUR_TOKEN", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
phone: "+79001234567",
name: "Anna",
email: "anna@example.com",
message: "Trial lesson request",
form_id: "main",
submission_id: crypto.randomUUID(),
}),
});fetch из браузера требует CORS. Обычная HTML-form и Tilda работают без CORS. На production админ задаёт WEBSITE_WEBHOOK_CORS_ORIGINS.
Пример JSON
Минимум — телефон или email плюс имя:
{
"phone": "+79001234567",
"name": "Anna",
"email": "anna@example.com",
"message": "Trial lesson request",
"form_id": "main",
"submission_id": "550e8400-e29b-41d4-a716-446655440000"
}Какие поля отправлять
Имена полей распознаются автоматически — регистр и кириллица в подписи не мешают:
- phone, tel, телефон — телефон (желательно указать)
- name, first_name, last_name — имя
- email, mail — email
- message, comment — комментарий или вопрос
- form_id, form — необязательно, если на одном сайте несколько форм
- submission_id, external_id, tranid (Tilda) — чтобы повторная отправка не создала дубль лида
Проверка
Отправьте тест с реальным телефоном или email. Лид появится в CRM → «Новый», в ленте будет «Заявка из Сайт · сайт «…»».