Tilda · 8 мин чтения

Заявка с Тильды в Telegram-бот: как настроить

Заявка с Тильды в Telegram-бот долетает за секунды, если настроить связку правильно - без плагинов, которые тормозят загрузку формы, и без привычки проверять почту каждые полчаса. За последние пару лет я подключал такую передачу заявок к десяткам лендингов на Tilda: где-то хватало встроенного вебхука в настройках формы, где-то приходилось поднимать отдельный сервер на Node.js, чтобы раскладывать заявки по менеджерам и продуктам. Разберу четыре рабочих способа - от встроенного в Tilda до кастомного бота на aiogram - с кодом и ошибками, которые вылезают уже после запуска, а не на этапе тестирования.

Зачем уводить заявки с формы Тильды в Telegram, а не на почту

Заявка, которая падает на почту, живёт в среднем несколько часов - пока менеджер не откроет ящик. У одного из моих клиентов на автозапчастях заявки с формы Tilda регулярно попадали в папку «Промоакции» на Mail.ru просто из-за автоматической фильтрации писем. За месяц набежало около 40 пропущенных обращений - и это при том, что на форму шёл платный трафик из Директа.

Telegram решает вопрос без лишних настроек: сообщение приходит с пуш-уведомлением на телефон, и менеджер видит его за секунды, а не когда решит открыть почтовый клиент. Плюс в сообщение сразу можно зашить кнопки «Взял в работу», UTM-метки, номер заказа и ссылку в CRM - почтовое уведомление так не умеет в принципе.

У другого клиента - интернет-магазин на связке Tilda и T‑Bank для приёма оплаты - я считал время от клика «Оплатить» до звонка менеджера: с почтовым уведомлением набегало от 40 минут до пары часов, с Telegram-ботом обычно укладываемся в 2-3 минуты, потому что уведомление не теряется среди остальной входящей почты.

Способ 1 - встроенное уведомление Tilda в Telegram

Самый быстрый путь без единой строчки кода. В панели Tilda: настройки сайта → раздел «Формы» → уведомления → добавляем канал Telegram. Tilda попросит токен бота и ID чата: токен получаете у @BotFather командой /newbot, а ID чата смотрите через @userinfobot для личного чата или через метод getUpdates у только что созданного бота, если нужен групповой чат.

Нюанс первый: встроенная интеграция с Telegram у Tilda доступна не на всех тарифах - на бесплатном и «Personal» этого канала просто нет в списке, придётся переходить на «Business» или выше. Нюанс второй: формат сообщения зашит в шаблон Tilda, поля идут одним неформатированным блоком, а файлы и картинки - например, если в форме есть загрузка ТЗ или скана паспорта - через этот канал не долетают вообще.

Для простой формы «Имя + Телефон» на лендинге услуг такого канала хватает с запасом. Для формы из 10 полей с загрузкой файлов - уже нет. Проверяю канал так: отправляю тестовую заявку через саму форму на сайте, а не тестовую отправку из редактора Tilda - она не всегда триггерит внешние уведомления, - и слежу, что сообщение пришло в течение минуты.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Способ 2 - свой вебхук: Tilda отправляет POST на ваш сервер

Когда нужен контроль над форматом сообщения, фильтрация по полям формы или отправка в разные чаты по условию, встроенного канала мало - поднимаю отдельный обработчик. В настройках формы Tilda есть вкладка «Другие системы» → Webhook, куда прописывается адрес вашего сервера. При отправке формы Tilda делает POST-запрос с JSON, где поля приходят под своими name: Name, Phone, Email, formname, а также служебные tranid и formid.

Обработчик на Node.js с Express выглядит примерно так:

const express = require('express');
const app = express();
app.use(express.json());

app.post('/tilda-webhook/a3f9c1', async (req, res) => {
  const { Name, Phone, Email, formname } = req.body;

  const text = `Новая заявка с Тильды
Форма: ${formname}
Имя: ${Name}
Телефон: ${Phone}
Email: ${Email}`;

  res.status(200).send('OK');

  await fetch(`https://api.telegram.org/bot${process.env.BOT_TOKEN}/sendMessage`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      chat_id: process.env.CHAT_ID,
      text,
      parse_mode: 'HTML'
    })
  });
});

app.listen(3000);

Дальше - обычный Bot API Telegram, никаких SDK не требуется, просто fetch на метод sendMessage. Токен и chat_id храню в переменных окружения, в репозиторий их не коммичу.

Отдельный момент - защита вебхука. URL обработчика в теории может найти кто угодно и начать слать туда мусорные POST-запросы, заваливая бота фейковыми заявками. Решаю просто: добавляю в адрес вебхука произвольный секретный параметр, как в примере выше, и на сервере сверяю его перед обработкой, а не полагаюсь на скрытость URL как единственную защиту.

Из практики: Tilda ждёт ответ HTTP 200 в течение нескольких секунд, иначе форма на сайте покажет пользователю ошибку отправки, даже если вебхук в итоге отработал корректно. Поэтому тяжёлую логику - запись в базу, отправку в CRM - стоит выносить в очередь и отвечать Тильде сразу, не дожидаясь, пока отработает всё остальное. У меня в разделе готовых скриптов уже лежит рабочий обработчик вебхука Тильды под Telegram - можно взять за основу и адаптировать под свои поля формы.

На биржах фриланса за такую же пересылку заявки в чат просят от 5 000 до 20 000 рублей в зависимости от исполнителя - это ориентир по рынку, не мои расценки. У меня минимальная доработка формы под вебхук стоит от 3 000 рублей, а комплексная интеграция с CRM или эквайрингом - от 40 000 рублей.

Способ 3 - через n8n: без своего сервера и без бэкенд-кода

Если разворачивать сервер не хочется, а логика чуть сложнее, чем «переслать всё как есть», беру n8n. Ставлю Webhook-ноду - в неё Tilda шлёт тот же POST, что и в способе выше, - а дальше нода Telegram с готовым интерфейсом под отправку текста, фото и файлов без единой строчки кода. Между ними можно воткнуть Filter или Switch: например, заявки с суммой заказа выше условных 50 000 ₽ уходят в отдельный чат к руководителю продаж, остальные - рядовым менеджерам.

Отдельно про хранение данных: если в цепочке n8n стоит нода, которая сохраняет контакты клиента - телефон, email, - держите её на сервере в РФ. По 152-ФЗ персональные данные граждан России обязаны обрабатываться на серверах внутри страны, и self-hosted n8n на российском VPS закрывает этот вопрос сразу, в отличие от облачной версии n8n.cloud, размещённой за рубежом.

Настройка такой цепочки у меня обычно занимает день-полтора вместе с тестами, стоимость отталкивается от сложности сценария - автоматизация в n8n у меня начинается от 25 000 ₽.

Способ 4 - бот на aiogram с собственной логикой распределения

Когда заявки нужно не просто пересылать, а вести - отмечать статус, назначать ответственного, хранить историю по клиенту, - встроенных нод n8n или голого вебхука уже мало. Поднимаю бота на aiogram с FastAPI-эндпоинтом, который принимает POST от Tilda, кладёт заявку в Postgres и рассылает сообщение с inline-кнопками менеджерам.

from fastapi import FastAPI, Request
from aiogram import Bot

app = FastAPI()
bot = Bot(token=BOT_TOKEN)

@app.post("/tilda-webhook")
async def tilda_webhook(request: Request):
    data = await request.json()

    text = (
        f"Новая заявкаn"
        f"Имя: {data.get('Name')}n"
        f"Телефон: {data.get('Phone')}"
    )

    await bot.send_message(
        chat_id=MANAGER_CHAT_ID,
        text=text,
        reply_markup=take_button()
    )

    return {"ok": True}

По кнопке «Взял в работу» бот меняет статус заявки в базе и убирает кнопки у остальных менеджеров, чтобы два человека не звонили одному клиенту одновременно - с такой проблемой сталкивался у клиента с отделом продаж на пять человек, где без этой логики заявки разбирали по несколько раз.

Базу с контактами клиентов держу на том же VPS в России, где крутится сам бот - так сразу закрывается требование по локализации персональных данных, и не приходится решать этот вопрос отдельно уже после запуска.

Такой бот - уже отдельный сервис с деплоем, собственным вебхуком у Telegram (setWebhook на HTTPS-адрес) и, как правило, простой админкой для статистики по заявкам. Разработка бота с такой логикой у меня стартует от 30 000 ₽, дальше стоимость растёт от количества интеграций - CRM, склад, расчёт доставки через СДЭК прямо в теле заявки.

Как выбрать способ: сравнение

Если коротко - выбор зависит от того, сколько условий и получателей у заявки. Для одной формы с двумя полями хватает встроенного канала, для филиала с разными чатами по регионам без кастомной логики уже не обойтись. Например, у клиента с формой на сайте и заявкой в двух отделах - продажи и сервис - свой обработчик за один вечер разослал заявки в два разных чата по значению поля «Тип обращения», встроенный канал Tilda так не умеет в принципе.

Способ Время настройки Гибкость Нужен сервер Стоимость
Встроенный канал Tilda 10-15 минут Низкая Нет Бесплатно (на подходящем тарифе)
Свой вебхук (Node/PHP/Python) Несколько часов Средняя Да от 3 000 ₽ за доработку, от 40 000 ₽ за интеграцию с CRM и эквайрингом
n8n Полдня-день Средняя-высокая Да, self-hosted от 25 000 ₽
Бот на aiogram с логикой Несколько дней Высокая Да от 30 000 ₽

Частые ошибки при подключении заявок из Тильды в Telegram

  • забыли опубликовать страницу после добавления вебхука - Tilda применяет настройки формы только к опубликованной версии, черновик их не подхватывает;
  • chat_id для группового чата указан без минуса - у групп в Telegram идентификатор отрицательный, без минуса бот молчит без единой ошибки в логах Tilda;
  • бота не добавили в групповой чат либо забыли, что у него включён privacy mode в @BotFather, из-за чего он не видит часть сообщений в группе;
  • вебхук указан на http вместо https - Tilda требует шифрованное соединение и просто не станет слать запрос на незащищённый адрес;
  • сервер отвечает дольше нескольких секунд - форма на сайте показывает пользователю ошибку отправки, хотя данные до бэкенда доходят и заявка не теряется.

Автоматизация в мессенджере

Telegram-бот / Mini App

от 30 000 ₽

Подробнее →

Частые вопросы

Можно ли отправлять заявки с Тильды сразу в несколько Telegram-чатов?

Да. Через встроенный канал Tilda - с ограничениями, обычно один чат на форму. Через свой вебхук или n8n - без ограничений: в обработчике просто вызываете sendMessage нужное число раз с разными chat_id или ветвите поток через Switch-ноду в n8n по условию - например, заявки на монтаж уходят одной бригаде, а на замер другой.

Нужен ли отдельный сервер, чтобы принимать вебхук от Тильды?

Для встроенного канала Tilda и для n8n в облаке - нет. Для кастомного обработчика на Node.js, PHP или Python - да, но хватает недорогого VPS: нагрузка на такой сервис минимальная, он просто пересылает JSON дальше в Bot API Telegram.

Как проверить, что вебхук от формы действительно доходит до сервера?

Перед тем как указывать боевой адрес, направляю тестовую отправку на webhook.site - сервис показывает точную структуру JSON, которую присылает Tilda, включая имена полей формы. Дальше - логи самого сервера и раздел «Формы» → «Данные форм» в панели Tilda, где видно все отправки, даже если вебхук в моменте не сработал.

Что делать, если нужно получать в Telegram файлы или фото, загруженные через форму?

Встроенный канал Tilda файлы не пересылает. При кастомном вебхуке это решается просто: Tilda присылает публичную ссылку на загруженный файл в теле запроса, а в обработчике вызывается метод sendDocument или sendPhoto Bot API с этой ссылкой вместо текста.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно