Обсудить задачу

Kommo + Tilda: заявки с форм сразу в воронку без Zapier

Заявки с форм Tilda попадают в Kommo напрямую через webhook - без Zapier, без Make, без промежуточных сервисов. Tilda отправляет POST-запрос на ваш endpoint, endpoint вызывает POST /api/v4/leads/complex в Kommo и создаёт сделку с контактом за один запрос. UTM-метки с лендинга уходят в кастомные поля сделки. Дедупликация идёт по email и телефону.

По наблюдениям Exceltic.dev из интеграционных проектов, половина компаний, которые использовали Zapier для связки Tilda + Kommo, сталкивались с одним из двух сценариев: либо Zapier начинал пропускать заявки при превышении task-лимита тарифа, либо маппинг полей ломался после обновления формы на стороне Tilda - и менеджеры узнавали об этом через несколько дней, когда лиды уже остыли. Кастомный webhook решает оба сценария: нет промежуточного сервиса - нет его ограничений.

Эта статья разбирает архитектуру прямой интеграции: как Tilda отправляет данные, как /leads/complex создаёт сделку с контактом за один запрос, и как сохранить UTM-параметры в карточке сделки.

Если вы уже настраивали воронку в Kommo и подключали формы через Zapier, этот материал покажет, почему прямой webhook дешевле и надёжнее в production.

Как Tilda отправляет данные форм

Tilda передаёт данные из форм через webhook - HTTP POST-запрос на URL, который вы указываете в настройках. Путь в интерфейсе: «Настройки сайта -> Формы -> Webhook». Там указывается один URL для всех форм сайта.

Webhook - механизм, при котором сервис сам отправляет данные на ваш endpoint в момент события, без опроса с вашей стороны.

Формат запроса - application/x-www-form-urlencoded (не JSON). Поля формы передаются как параметры POST. Стандартные поля имеют фиксированные имена: Name, Email, Phone. Кастомные поля получают имена, которые вы задали в настройках блока. Вместе с полями формы Tilda автоматически добавляет два технических поля: tranid (уникальный ID заявки) и formid (ID блока формы на странице).

Пример payload при заполнении формы:

Name=Ivan+Petrov&Email=ivan%40company.com&Phone=%2B79991234567&tranid=123456789&formid=rec123456

Если вы передаёте UTM-метки через скрытые поля формы, они придут отдельными параметрами: utm_source, utm_medium, utm_campaign.

Retry-поведение: если ваш endpoint не ответил кодом 200 за 5 секунд, Tilda делает два повторных запроса с интервалом в одну минуту. После третьей неудачной попытки заявка считается недоставленной. При первом подключении webhook Tilda отправляет тестовый запрос test=test - ваш endpoint должен вернуть 200 OK.

Идемпотентность: поле tranid уникально для каждой заявки. Это ключ для дедупликации на стороне вашего endpoint - если Tilda повторно отправила запрос из-за сетевой ошибки, вы можете проверить, не создавали ли уже сделку с этим tranid.

Что реализуется: прямой webhook без посредников

Схема интеграции выглядит так: Tilda -> ваш middleware-endpoint -> Kommo API. Никаких Zapier, Make или n8n в этой цепочке нет.

Ваш endpoint принимает POST от Tilda, парсит поля, и вызывает POST https://{subdomain}.kommo.com/api/v4/leads/complex. Этот endpoint Kommo создаёт сделку и контакт за один запрос - не нужно сначала создавать контакт, получать его ID, и потом привязывать к сделке.

Тело запроса к /leads/complex:

[{
  "name": "Заявка с Tilda - Ivan Petrov",
  "pipeline_id": 12345,
  "status_id": 67890,
  "custom_fields_values": [
    {
      "field_id": 111001,
      "values": [{"value": "google"}]
    },
    {
      "field_id": 111002,
      "values": [{"value": "cpc"}]
    }
  ],
  "_embedded": {
    "contacts": [{
      "name": "Ivan Petrov",
      "custom_fields_values": [
        {
          "field_id": 264911,
          "values": [{"value": "+79991234567", "enum_code": "WORK"}]
        },
        {
          "field_id": 264913,
          "values": [{"value": "[email protected]", "enum_code": "WORK"}]
        }
      ]
    }]
  }
}]

Поля field_id для телефона и email в Kommo не универсальны - их нужно получить через GET /api/v4/contacts/custom_fields для вашего аккаунта. pipeline_id и status_id - аналогично через GET /api/v4/leads/pipelines.

UTM-параметры в кастомные поля. Если в форме Tilda настроены скрытые поля utm_source, utm_medium, utm_campaign, они придут в payload и их можно записать в кастомные поля сделки через тот же custom_fields_values. Так в карточке сделки будет виден источник: какая кампания, какой канал привёл лида.

Дедупликация по email и телефону. Kommo проверяет при создании контакта через /leads/complex, есть ли в базе контакт с таким же телефоном или email. Если есть - новая сделка привязывается к существующему контакту, дубль не создаётся. Это поведение встроено в endpoint и не требует отдельной логики на вашей стороне.

Аутентификация в Kommo API - OAuth 2.0. Access token передаётся в заголовке Authorization: Bearer {token}. Токен действует 24 часа, обновляется через refresh token.

Пошаговая схема интеграции

Вот как выглядит процесс реализации от начала до запуска в production.

Шаг 1. Настройка скрытых полей UTM в Tilda. В настройках блока формы добавьте скрытые поля: utm_source, utm_medium, utm_campaign, utm_term, utm_content. Tilda умеет автоматически подставлять значения из URL-параметров в скрытые поля - активируйте эту опцию в настройках формы.

Шаг 2. Разработка middleware-endpoint. Endpoint принимает POST от Tilda, парсит application/x-www-form-urlencoded, проверяет tranid на дубль (кэш или БД), формирует тело запроса для Kommo, вызывает /leads/complex, возвращает 200 OK не позже чем через 4 секунды (с запасом перед таймаутом Tilda в 5 секунд).

Шаг 3. Подключение webhook в Tilda. Настройки сайта -> Формы -> Webhook -> указать URL вашего endpoint. Tilda отправит тестовый запрос test=test. Endpoint должен вернуть 200 OK на любой запрос, включая тестовый.

Шаг 4. Маппинг field_id в Kommo. Получить актуальные ID полей для вашего аккаунта:

  • GET /api/v4/contacts/custom_fields - поля контактов (телефон, email)
  • GET /api/v4/leads/custom_fields - поля сделок (UTM-поля)
  • GET /api/v4/leads/pipelines - ID воронки и этапа

Шаг 5. Тестирование на staging. Заполнить форму с тестовыми данными, проверить: создалась ли сделка в нужной воронке, привязался ли контакт, записались ли UTM-значения, не создался ли дубль контакта при повторной отправке.

Шаг 6. Мониторинг retry-запросов. Добавьте логирование tranid и HTTP-статусов ответов. Если видите повторные tranid - значит Tilda делала retry из-за медленного ответа endpoint. Оптимизируйте время ответа: основной сценарий должен укладываться в 1-2 секунды.

Реальный кейс

Типичный сценарий из проектов Exceltic.dev: компания с несколькими лендингами на Tilda и воронкой продаж в Kommo. До интеграции менеджеры проверяли входящие заявки вручную в почте и копировали данные в CRM. Средняя задержка между заявкой и созданием сделки составляла 2-4 часа в рабочее время и до 12 часов в нерабочее.

После внедрения прямого webhook:

  • Сделка в Kommo появляется в течение 3-5 секунд после отправки формы
  • UTM-поля заполняются автоматически - менеджер видит источник лида без дополнительных вопросов
  • Дубли контактов при повторных заявках от одного клиента не создаются - новая сделка привязывается к существующему контакту
  • Ручной ввод данных исключён полностью

В одном из проектов - компания в сфере B2B-услуг с 3 активными лендингами - за первую неделю после запуска интеграции время реакции менеджера на заявку сократилось с нескольких часов до 15-20 минут: сделка уже была в CRM с заполненными полями, оставалось только позвонить.

Zapier в аналогичных сценариях давал задержку 5-15 минут (polling-интервал на базовом тарифе) плюс регулярные сбои при исчерпании task-лимита. Прямой webhook работает в режиме реального времени и не зависит от тарифных ограничений третьего сервиса.

Для кого подходит эта интеграция

Решение актуально для компаний на Kommo, у которых Tilda - основной или один из основных источников входящих лидов. Чаще всего это компании с 15-50 сотрудниками, где есть выделенный отдел продаж и несколько лендингов под разные продукты или кампании.

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

Прямой webhook особенно полезен в трёх ситуациях:

  • Zapier или Make уже исчерпывают task-лимит или обходятся дороже, чем хотелось бы
  • Требуется передача UTM-параметров в Kommo - нативные интеграции это не поддерживают в нужном объёме
  • Нужен контроль над дедупликацией контактов: несколько форм, один клиент может заполнить несколько

Аналогичный подход - прямой webhook без посредников - применяется и в других интеграциях Kommo: например, в интеграции Kommo + Stripe, где платёжные события записываются в карточку сделки через webhook Stripe.

Если ваш стек шире Kommo и включает платные каналы трафика, стоит посмотреть как UTM-данные из CRM замыкаются на реальную стоимость сделки - это решает Prooflytics, которым пользуются команды, работающие с Kommo и несколькими рекламными каналами одновременно.

Часто задаваемые вопросы

Нужен ли Zapier или Make для интеграции Tilda с Kommo?

Нет. Tilda поддерживает отправку данных формы напрямую на любой URL через webhook (POST-запрос). Kommo принимает данные через REST API. Вам нужен только middleware-endpoint - небольшой скрипт или serverless-функция, которая принимает запрос от Tilda и вызывает Kommo API. Никакие платные автоматизационные сервисы в этой цепочке не нужны.

Что произойдёт, если мой endpoint будет недоступен в момент отправки формы?

Tilda сделает два повторных запроса с интервалом одну минуту. Если все три попытки провалились - заявка будет потеряна. Чтобы этого избежать: используйте надёжный хостинг с uptime выше 99.9%, настройте мониторинг endpoint, добавьте алерты при ошибках. Для критических форм можно добавить резервный канал - например, дублировать данные в таблицу или очередь при неудаче запроса к Kommo.

Как передать UTM-метки с лендинга в карточку сделки Kommo?

Добавьте в форму Tilda скрытые поля с именами utm_source, utm_medium, utm_campaign. В настройках формы включите автоподстановку значений из URL-параметров - Tilda умеет это из коробки. Скрытые поля придут в webhook payload вместе с остальными данными. На стороне middleware записывайте их в кастомные поля сделки через custom_fields_values в запросе к /leads/complex.

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

Kommo при создании контакта через /leads/complex проверяет базу на совпадение по email и телефону. Если контакт с такими данными уже есть - новая сделка привязывается к существующему контакту, а не создаётся второй контакт. Дополнительно используйте поле tranid от Tilda как ключ идемпотентности на стороне endpoint: храните обработанные tranid и игнорируйте повторные запросы с тем же ID.

Какие данные из формы Tilda можно передать в Kommo?

Любые поля формы: имя, email, телефон, текстовые поля, выпадающие списки, чекбоксы. Плюс скрытые поля - UTM-метки, ID страницы, любые другие данные, которые вы хотите передать. Технически ограничений по набору полей нет - всё, что отправляет Tilda в webhook payload, доступно в middleware и может быть записано в стандартные или кастомные поля Kommo.

Итог

Прямой webhook Tilda -> Kommo - это надёжнее и дешевле, чем любой автоматизационный сервис посередине:

  • Заявка попадает в CRM в течение нескольких секунд, а не минут
  • UTM-данные сохраняются в полях сделки без ручного ввода
  • Дедупликация контактов работает через встроенную логику Kommo
  • Нет зависимости от тарифных лимитов Zapier или Make

Если у вас уже есть Tilda и Kommo и вы хотите настроить прямую передачу заявок - опишите вашу форму и текущий стек команде Exceltic.dev. Разберём архитектуру, предложим решение под ваш объём трафика и набор полей.


Title tag: Kommo + Tilda: заявки с форм в воронку без Zapier Meta description: Прямой webhook Tilda -> Kommo без Zapier и Make. Как настроить передачу заявок с форм в сделки Kommo с UTM-метками и дедупликацией контактов. LSI-запросы: tilda kommo интеграция, tilda webhook crm, kommo api leads complex, заявки tilda в crm, utm метки kommo Slug: /blog/kommo-tilda-forma-v-sdelku

Ещё статьи

Все →