Kommo + Jotform: заявки из форм сразу в воронку без ручного переноса
Форма на сайте заполнена — и данные оседают в Jotform. Менеджер заходит в таблицу Jotform, копирует имя, email, телефон и вставляет в Kommo вручную. При 20+ заявках в день это несколько часов потерянного времени в неделю, плюс ошибки при копировании. Webhook-интеграция Jotform -> Kommo создаёт лид в CRM в момент отправки формы — с полным маппингом полей, вложениями и маршрутизацией по нужной воронке.
Почему нативной интеграции Jotform недостаточно
Jotform имеет встроенные интеграции с несколькими CRM. Для Kommo (amoCRM) официального коннектора нет — есть обходные пути через Zapier или Make. Эти решения создают лид, но не передают:
- Файловые вложения (Jotform отдаёт URL файла, не бинарные данные — нужна дополнительная обработка)
- Условный роутинг по воронкам в зависимости от ответов в форме
- Дедупликацию контактов (повторная заявка от того же email создаёт дубль)
- Кастомные поля Kommo, требующие числового ID поля
Вебхук-интеграция решает эти ограничения.
Как работает Jotform Webhook
Jotform отправляет POST-запрос на указанный URL при каждой отправке формы. Настройка: Form Builder -> Settings -> Integrations -> Webhooks.
Полезная нагрузка (payload) содержит все поля формы в формате:
{
"rawRequest": {
"q1_firstName": "Иван",
"q2_lastName": "Петров",
"q3_email[0]": "ivan@company.com",
"q4_phone[full]": "+1 234 567 8901",
"q5_company": "Acme Corp",
"q6_service": "CRM Integration",
"q7_budget": "5000-10000",
"q8_file": "https://www.jotform.com/uploads/.../brief.pdf"
},
"formID": "240123456789",
"submissionID": "5847291034"
}
ID полей (q1_, q2_ и т.д.) задаются в настройках формы. Их стоит задавать явно при разработке формы — так маппинг читаемее.
Маппинг полей Jotform -> Kommo
Каждое поле Jotform маппируется на стандартное или кастомное поле Kommo:
| Поле Jotform | Поле Kommo | Тип Kommo |
|---|---|---|
| q1_firstName + q2_lastName | contact.name | Стандартное |
| q3_email | contact.email (field_id: 264) | Мультифилд |
| q4_phone | contact.phone (field_id: 265) | Мультифилд |
| q5_company | contact.company_name | Стандартное |
| q6_service | lead.name | Стандартное |
| q7_budget | custom_field_id: 1234 | Текст/Список |
| q8_file | note на лиде (ссылка на файл) | Примечание |
Кастомные поля Kommo требуют числового field_id — его можно получить через GET /api/v4/leads/custom_fields.
Роутинг по воронкам
Одна компания может использовать несколько воронок в Kommo: «Новые клиенты», «Партнёры», «Повторные продажи». Jotform позволяет создать разные формы для разных сегментов или использовать одну форму с полем-маршрутизатором.
def route_to_pipeline(form_data: dict) -> tuple[int, int]:
service = form_data.get("q6_service", "")
budget = form_data.get("q7_budget", "")
if "partnership" in service.lower():
return PIPELINE_PARTNERS, STATUS_NEW_PARTNER
elif budget in ["50000+", "20000-50000"]:
return PIPELINE_ENTERPRISE, STATUS_QUALIFICATION
else:
return PIPELINE_SMB, STATUS_NEW_LEAD
Триггер роутинга — значение конкретного поля формы. Это недоступно в Zapier без платного тарифа и условий.
Обработка вложений
Jotform передаёт URL файла, а не его содержимое. Чтобы файл появился в Kommo, нужно:
import requests
def attach_file_to_lead(lead_id: int, file_url: str, filename: str):
# Скачиваем файл с Jotform
response = requests.get(file_url)
file_content = response.content
# Загружаем в Kommo как вложение к лиду
kommo.leads.notes.create(
lead_id=lead_id,
note_type="file",
attachment={
"filename": filename,
"content": base64.b64encode(file_content).decode()
}
)
Важно: файлы Jotform доступны по URL только ограниченное время (обычно 7 дней). Скачивать и загружать в Kommo нужно сразу при получении webhook.
Дедупликация контактов
Если клиент подал заявку повторно — не нужно создавать второй контакт в Kommo. Правильная логика:
def find_or_create_contact(email: str, name: str) -> int:
# Ищем существующий контакт
contacts = kommo.contacts.search(query=email)
if contacts:
return contacts[0].id
# Создаём новый
contact = kommo.contacts.create(name=name, email=email)
return contact.id
Поиск по email -> если нашли, привязываем новый лид к существующему контакту. История повторных заявок сохраняется на одном контакте.
Реальный кейс
Образовательная компания (3 формы: консультация, корпоративное обучение, партнёрство):
- До интеграции: менеджер проверял Jotform три раза в день, вручную переносил заявки. Задержка до 4 часов. При 40+ заявках в неделю — 3–4 часа ручного труда.
- После: webhook -> лид в нужной воронке Kommo за 2–3 секунды после отправки формы. Роутинг: «партнёрство» -> воронка партнёров, бюджет 20k+ -> воронка Enterprise, остальное -> SMB.
- Результат: 0 задержки по лидам. Бриф (PDF из формы) автоматически прикрепляется к лиду — менеджер открывает карточку и сразу видит весь контекст.
Для кого актуально
Интеграция Kommo + Jotform имеет смысл если:
— Основной источник лидов — формы на сайте или лендингах (Jotform или похожие)
— Есть несколько типов заявок с разным маршрутом в CRM
— Клиенты прикладывают файлы (бриф, ТЗ, документы) при заявке
— Нужна дедупликация при повторных обращениях
Аналогичная логика работает с Typeform — там своя специфика интеграции с HubSpot, разобранная в статье о Typeform + HubSpot. Принцип webhook -> CRM универсален, меняется только структура payload и API назначения.
Часто задаваемые вопросы
Jotform имеет нативную интеграцию с amoCRM — она не работает?
Jotform интегрируется с amoCRM (Kommo) через сторонние коннекторы. Нативная поддержка ограничена: передаются базовые поля, нет роутинга по воронкам, нет обработки вложений. Для простых форм (имя + email + телефон) коннектор работает. Для форм с условной логикой и файлами — нет.
Как обновить существующий лид при повторной заявке?
При нахождении контакта по email можно создать новый лид и привязать его к существующему контакту — тогда вся история заявок видна. Либо обновить текущий лид, если бизнес-логика предполагает только одну активную сделку на контакт. Выбор зависит от процесса продаж.
Что если Jotform изменил структуру webhook payload?
Ведите маппинг полей отдельно от бизнес-логики. Любое изменение формы (добавление поля, изменение порядка) не должно ломать интеграцию. Логируйте полный payload каждого webhook — это упрощает отладку при изменениях в форме.
Можно интегрировать несколько Jotform-форм в одну Kommo-воронку?
Да. Настройте один webhook-endpoint, который принимает все формы. Различать форму можно по formID в payload — и применять нужный маппинг полей для каждой. Одна точка входа, несколько источников.
Сколько времени занимает разработка?
Простая интеграция (одна форма, базовые поля) — 1 неделя. С роутингом по воронкам, обработкой вложений и дедупликацией — 2–3 недели.
Итого
- Jotform webhook -> Kommo: заявка попадает в CRM за 2–3 секунды без ручного переноса
- Кастомный маппинг полей, роутинг по воронкам, вложения — это то, чего нет в Zapier-коннекторе
- Дедупликация по email обязательна — иначе повторные заявки создают дублирующие контакты
- Файлы Jotform нужно скачивать сразу при получении webhook — URL доступен ограниченное время
- Типовой срок разработки — 2–3 недели
Если вы используете Jotform для сбора заявок и тратите время на ручной перенос данных в Kommo — опишите структуру ваших форм и логику распределения заявок. Exceltic.dev разберёт маппинг и предложит схему интеграции.