При интеграции Kommo и Juro контракт генерируется из данных сделки в один клик: имя клиента, сумма, условия - всё подтягивается из полей карточки. После подписания Juro возвращает статус и ссылку на документ обратно в Kommo. Менеджер не открывает Word, не копирует реквизиты вручную.
Juro - платформа для управления жизненным циклом контрактов с встроенным AI-ассистентом, который помогает составлять, редактировать и анализировать договоры. Для компаний, у которых каждая сделка завершается контрактом, разрыв между Kommo и Juro стоит дорого: менеджеры тратят 20-40 минут на каждый договор, допускают ошибки при копировании реквизитов, а статус подписания приходится отслеживать вручную.
По данным Juro, компании тратят в среднем 2-3 часа на подготовку и согласование одного B2B-контракта при ручном процессе - это время на поиск шаблона, заполнение реквизитов, отправку на юридическое согласование и повторную отправку клиенту после правок. Платформы contract management (Juro, DocuSign, PandaDoc) активно растут в EU B2B как ответ на этот запрос. Нативной интеграции Kommo и Juro нет: при выигрыше сделки контракт создаётся с перекопированием данных из карточки вручную. Кастомный webhook закрывает эту точку - данные из кастомных полей Kommo передаются в Juro автоматически. Ниже - детали архитектуры и реализации.
Почему нативная интеграция не работает
Juro не имеет готового виджета для Kommo. Существует Zapier-коннектор для Juro, но он работает только в одну сторону: триггер на событие в Juro отправляет данные в другой сервис. Создать документ в Juro из события в Kommo через стандартный Zapier-триггер нельзя - нет нужного action.
Проблема глубже, чем отсутствие коннектора. Juro работает с понятиями «contract workflow», «counterparty», «signatory» - это не то же самое, что «сделка», «контакт», «компания» в Kommo. Прямого маппинга нет, и без серверной логики, которая трансформирует данные, интеграция будет неполной.
Дополнительная сложность: Juro поддерживает multi-party signing - когда контракт должны подписать несколько человек. Ни один no-code инструмент не умеет правильно передавать список signatories из полей Kommo в Juro workflow.
Что реализовывается - архитектура решения
Kommo (сделка перешла на этап «Контракт»)
|
v
Сервер-оркестратор
- читает данные сделки через Kommo API
- маппит поля на Juro template variables
|
v
Juro API (создать документ из шаблона)
|
v
Juro (документ в статусе Draft)
|
Juro отправляет на подпись counterparty
|
v
Juro webhook (статус изменён: SIGNED / DECLINED)
|
v
Kommo API (обновить поле + добавить заметку + приложить ссылку)
Три ключевых поля в Juro используются при создании документа:
template_id- ID шаблона контракта в Jurocounterparty- объект с именем, email, должностью подписанта со стороны клиентаcustom_fields- переменные шаблона: сумма, срок, описание услуг
Технические детали
Juro API v2 использует Personal Access Token (PAT) для аутентификации - токен указывается в заголовке Authorization: Bearer <token>. API поддерживает создание документов из шаблона, управление workflow и получение статусов. Webhook настраивается в разделе Settings -> Integrations -> Webhooks в интерфейсе Juro.
import requests
JURO_API_URL = "https://paper.juro.com/api"
JURO_TOKEN = "your_personal_access_token"
def create_contract_from_kommo_deal(deal_data: dict) -> dict:
"""
Создаёт контракт в Juro на основе данных сделки из Kommo.
deal_data: данные сделки, полученные из Kommo API
"""
headers = {
"Authorization": f"Bearer {JURO_TOKEN}",
"Content-Type": "application/json"
}
# Маппинг полей Kommo -> Juro
payload = {
"templateId": "tmpl_your_template_id",
"name": f"Contract - {deal_data['name']}",
"counterparties": [
{
"name": deal_data["contact_name"],
"email": deal_data["contact_email"],
"role": "signatory"
}
],
"customFields": {
"deal_amount": str(deal_data["price"]),
"currency": deal_data["currency"] or "USD",
"service_description": deal_data.get("service_description", ""),
"contract_term_months": str(deal_data.get("contract_term", 12)),
"client_company": deal_data.get("company_name", "")
}
}
resp = requests.post(
f"{JURO_API_URL}/v2/documents",
json=payload,
headers=headers
)
resp.raise_for_status()
return resp.json()
def send_for_signing(document_id: str) -> bool:
headers = {"Authorization": f"Bearer {JURO_TOKEN}"}
resp = requests.post(
f"{JURO_API_URL}/v2/documents/{document_id}/send",
headers=headers
)
return resp.status_code == 200
Пошаговая реализация
Шаг 1. Подготовьте шаблон контракта в Juro
В Juro создайте шаблон договора с переменными в формате {{variable_name}}. Стандартный набор: {{deal_amount}}, {{client_company}}, {{service_description}}, {{contract_term_months}}. Запишите templateId - он виден в URL страницы шаблона.
Шаг 2. Настройте кастомные поля в Kommo
Добавьте поля: juro_document_id (текст), juro_status (список: DRAFT/SENT/SIGNED/DECLINED), juro_document_url (ссылка). Эти поля будут заполняться автоматически после создания документа.
Шаг 3. Создайте webhook в Kommo на смену этапа
Настройте webhook на событие leads.status. При переходе сделки на этап «Контракт» (укажите конкретный status_id) сервер вызывает функцию create_contract_from_kommo_deal.
Шаг 4. Разверните обработчик webhook от Juro
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/juro/webhook", methods=["POST"])
def juro_webhook():
data = request.json
event_type = data.get("type") # document.signed, document.declined
document_id = data["document"]["id"]
# Найти сделку по juro_document_id
lead = kommo_api.find_lead_by_custom_field("juro_document_id", document_id)
if not lead:
return jsonify({"error": "Lead not found"}), 404
if event_type == "document.signed":
kommo_api.update_lead(lead["id"], {
"juro_status": "SIGNED"
})
kommo_api.move_to_stage(lead["id"], SIGNED_STAGE_ID)
signed_url = data["document"].get("signedPdfUrl", "")
kommo_api.add_note(
lead["id"],
f"Контракт подписан. Документ: {signed_url}"
)
elif event_type == "document.declined":
kommo_api.update_lead(lead["id"], {"juro_status": "DECLINED"})
kommo_api.add_note(
lead["id"],
f"Контракт отклонён контрагентом. Причина: {data.get('reason', '-')}"
)
return jsonify({"ok": True})
Шаг 5. Настройте Juro webhook
В Juro -> Settings -> Integrations -> Webhooks добавьте URL https://yourserver.com/juro/webhook. Подпишитесь на события document.signed и document.declined.
Реальный кейс с цифрами
IT-компания из Амстердама, продающая SaaS-решения корпоративным клиентам в Европе. 30-50 контрактов в месяц, каждый - индивидуальный с вариациями по сумме, сроку и перечню услуг.
До интеграции:
- Менеджер получал уведомление о закрытии сделки
- Открывал Word-шаблон, копировал реквизиты из Kommo вручную
- Отправлял в Juro для согласования с юристом
- После подписания вручную обновлял статус в Kommo
- Прикладывал ссылку на документ в заметку
Время на операцию: 25-35 минут. При 40 контрактах в месяц - 17-23 часа менеджерского времени.
Частота ошибок: 8-12% контрактов содержали опечатки или неправильные цифры из-за ручного копирования. Исправления требовали перезапуска процесса подписания.
После интеграции через Exceltic.dev:
- Контракт генерируется автоматически при переходе этапа: менеджер проверяет за 2-3 минуты
- Ошибки из-за ручного копирования: 0
- Статус подписания обновляется в Kommo в реальном времени
- Экономия: 18-20 часов в месяц
Подробнее о кастомных интеграциях в Kommo CRM и том, какие сценарии автоматизации уже реализованы.
Для кого подходит
Интеграция Kommo + Juro оптимальна для:
- B2B-компаний с объёмом 20+ контрактов в месяц, где ручная работа стала узким местом
- Компаний с юридическим согласованием - Juro поддерживает внутренний approval workflow перед отправкой клиенту
- Команд, работающих с международными клиентами - Juro поддерживает eSignature, соответствующую eIDAS (Европа) и ESIGN Act (США)
- SaaS и агентств, где контракт - стандартная часть воронки, а не исключение
Если вам нужна более простая электронная подпись без AI-функционала - посмотрите на интеграции с DocuSign или SignNow. Juro выигрывает именно там, где важно управление шаблонами, совместное редактирование и AI-анализ договоров.
Часто задаваемые вопросы
Juro поддерживает юридически значимую подпись в России?
Juro ориентирован на международный рынок: США, Великобритания, ЕС. Подпись соответствует eIDAS (Европа) и ESIGN Act (США). Для российского юрисдикционного контекста Juro не подходит - рассмотрите DocuSign или Контур.Диадок.
Можно ли использовать несколько шаблонов контрактов?
Да. В Kommo можно добавить кастомное поле «Тип контракта» (список), и сервер-оркестратор будет выбирать нужный templateId в зависимости от значения. Например: NDA, Service Agreement, Subscription Agreement - каждый со своим набором переменных.
Как работает согласование контракта внутри компании перед отправкой клиенту?
Juro поддерживает internal approval workflow: после создания документа он проходит через список согласующих (юрист, CFO) и только после финального одобрения отправляется клиенту на подпись. Интеграция может отслеживать статус approval и уведомлять менеджера в Kommo через заметки или смену кастомного поля.
Как настроить воронку в Kommo под процесс работы с Juro?
Оптимальная структура этапов: «Квалификация» -> «КП отправлено» -> «Контракт» (здесь срабатывает создание документа в Juro) -> «На подписании» -> «Подписан» -> «Реализация». При такой структуре переход между «Контракт» и «На подписании» происходит автоматически после отправки документа, а «Подписан» - после события document.signed от Juro.
Сколько стоит разработка интеграции?
Типовой проект с одним шаблоном, базовым маппингом полей и обработкой webhook занимает 2-3 недели разработки. Сложные сценарии - несколько шаблонов, multi-party signing, internal approval - добавляют 1-2 недели. Точную оценку делаем после разбора вашего стека.
Если контракты - стандартная часть вашей воронки и вы хотите убрать ручную работу - опишите задачу команде Exceltic.dev. Разберём архитектуру под ваши шаблоны и оценим объём работ.