Kommo + SignNow: автоматическая отправка документов на подпись из воронки

Kommo + SignNow: автоматическая отправка документов на подпись из воронки

SignNow — платформа электронных подписей с REST API, соответствием eIDAS (EU) и ESIGN Act (US). По функциям сопоставима с DocuSign и Adobe Sign, но стоит значительно дешевле. Интеграция с Kommo закрывает паттерн «сделка на этапе -> документ подписан -> CRM обновлена» без ручного копирования данных и без перехода менеджера в другой интерфейс.

SignNow vs DocuSign vs Adobe Sign: когда выбирать SignNow

Все три платформы закрывают базовую задачу — отправить документ на подпись и получить юридически значимую подпись. Выбор определяется ценой, API-доступностью и экосистемой:

ПараметрSignNowDocuSignAdobe Sign
Цена (бизнес-план)от $8/мес/польз.от $15/мес/польз.от $14.99/мес/польз.
API-доступОт Site License (~$146/мес)Enterprise планEnterprise план
Нативная интеграция с KommoНетНетНет
eIDAS (EU)ДаДаДа
Шаблоны документовДаДаДа
Embedded signingДаДаДа

SignNow проигрывает по экосистеме (у DocuSign больше нативных коннекторов), но выигрывает по цене при API-интеграции. Для компаний, которые строят кастомную связку с CRM, это ключевой параметр.

Аналогичные паттерны интеграции реализованы для DocuSign и Adobe Sign — архитектура идентична, меняется только API SignNow.

Что синхронизируется

Kommo -> SignNow:
— Имя и email контакта сделки -> получатель invite
— Название сделки -> subject письма с документом
— Данные кастомных полей -> подстановка в шаблон документа (merge fields)
— Дедлайн из поля Kommo -> срок подписания (expiration_days)

SignNow -> Kommo:
— Событие invite.update (статус signed) -> поле «Документ подписан» в сделке
— Перевод сделки на следующий этап воронки
— Ссылка на подписанный документ -> Note на сделке
— Дата подписания -> кастомное поле

Архитектура интеграции

Kommo Webhook: сделка перешла на этап «Подписание договора»
  ↓ Backend
  1. GET /api/v4/leads/{id} + contacts
     -> имя, email, сумма, кастомные поля
  2. Генерация PDF из шаблона с данными клиента
  3. SignNow API: POST /document (загрузка PDF)
     -> получить document_id
  4. SignNow API: POST /document/{id}/fieldinvite
     -> отправить invite клиенту
  5. Kommo: PATCH /leads/{id}
     -> обновить поле signnow_document_id

SignNow Webhook: invite.update (status = signed)
  ↓ Backend
  1. Извлечь document_id из payload
  2. GET kommo_deal_id из custom field документа
  3. SignNow API: GET /document/{id}/download
     -> сохранить подписанный PDF
  4. Kommo: PATCH /leads/{deal_id}
     -> signed = true, этап -> «Договор получен»
  5. Kommo: POST /leads/{deal_id}/notes
     -> ссылка на документ + дата подписания

SignNow REST API: ключевые запросы

SignNow использует OAuth 2.0 (Password Grant для сервисного аккаунта). Эндпоинт: api.signnow.com.

Получение токена:

import requests
import base64

credentials = base64.b64encode(f'{CLIENT_ID}:{CLIENT_SECRET}'.encode()).decode()
response = requests.post(
    'https://api.signnow.com/oauth2/token',
    headers={
        'Authorization': f'Basic {credentials}',
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    data={
        'username': SN_USER,
        'password': SN_PASS,
        'grant_type': 'password',
        'scope': '*'
    }
)
access_token = response.json()['access_token']

Загрузка документа:

with open(pdf_path, 'rb') as f:
    response = requests.post(
        'https://api.signnow.com/document',
        headers={'Authorization': f'Bearer {access_token}'},
        files={'file': (filename, f, 'application/pdf')}
    )
document_id = response.json()['id']

Отправка на подпись (field invite):

invite_data = {
    'from': SENDER_EMAIL,
    'to': [
        {
            'email': client_email,
            'role': 'Signer 1',
            'order': 1,
            'reassign': '0',
            'decline_by_signature': '0',
            'reminder': 3,
            'expiration_days': expiration_days or 14,
            'subject': f'Договор по сделке {deal_name}',
            'message': f'Уважаемый {client_name}, направляем договор для подписания.'
        }
    ]
}
requests.post(
    f'https://api.signnow.com/document/{document_id}/fieldinvite',
    headers={'Authorization': f'Bearer {access_token}'},
    json=invite_data
)

Регистрация webhook:

requests.post(
    'https://api.signnow.com/api/v2/events',
    headers={
        'Authorization': f'Bearer {access_token}',
        'Content-Type': 'application/json'
    },
    json={
        'event': 'invite.update',
        'entity_id': document_id,
        'action': 'callback',
        'attributes': {
            'callback': 'https://yourbackend.com/signnow/webhook',
            'use_tls_12': True
        }
    }
)

Шаблоны документов и merge fields

SignNow поддерживает шаблоны с заполняемыми полями. Workflow с шаблонами эффективнее загрузки нового PDF при каждой сделке:

  1. Создать шаблон в UI SignNow с полями: {{client_name}}, {{company}}, {{amount}}, {{date}}
  2. При создании документа использовать POST /template/{template_id}/copy — SignNow создаёт копию с новым document_id
  3. Обновить текстовые поля через PUT /document/{id} с данными из Kommo
  4. Отправить field invite

Такой подход исключает генерацию PDF на стороне backend’а — данные подставляются прямо в шаблон SignNow.

Обработка нескольких подписантов

Если договор требует подписи с обеих сторон (клиент + менеджер), field invite поддерживает несколько получателей с порядком подписания:

'to': [
    {
        'email': client_email,
        'role': 'Client',
        'order': 1,  # подписывает первым
        'expiration_days': 14,
        ...
    },
    {
        'email': manager_email,
        'role': 'Company Representative',
        'order': 2,  # получает invite после подписания клиентом
        'expiration_days': 7,
        ...
    }
]

Webhook invite.update срабатывает при каждом подписании. Комплектный статус «все подписали» определяется по событию document.complete.

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

Юридическая компания (EU-рынок, 30–40 контрактов в месяц, клиенты в 5 странах):

  • До: менеджер вручную загружал PDF в SignNow, вводил email клиента, отправлял. После подписания — вручную обновлял этап в Kommo. Среднее время от Won до отправки документа — 2 дня.
  • После: Won в Kommo -> через 2 минуты клиент получает письмо с договором -> после подписания Kommo автоматически переходит на этап «Договор получен» с примечанием и датой.
  • Дополнительный эффект: менеджер получает Kommo-уведомление сразу после подписания и может сразу выставить счёт. Цикл от Won до инвойса сократился с 5 дней до нескольких часов.

Аналогичный паттерн реализовывали для PandaDoc и Kommo — там интеграция нативная, но SignNow выгоднее по стоимости при объёме 30+ документов в месяц.

Для кого актуально

  • Используется SignNow (или рассматривается как более дешёвая альтернатива DocuSign/Adobe Sign)
  • 10+ контрактов в месяц, которые сейчас отправляются вручную
  • Клиенты в EU или US — eIDAS и ESIGN Act обязательны
  • Нужна полная трассировка: кто подписал, когда, в каком статусе сделка
  • Важен двусторонний цикл: Won -> документ -> подпись -> следующий этап воронки

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

Есть ли нативная интеграция SignNow и Kommo?

Нативной интеграции нет. SignNow не представлен в Kommo Marketplace. Интеграция строится через REST API SignNow и Kommo webhook — это 2–3 недели разработки. Отличие от Zapier-подхода: полный контроль над логикой, merge fields из шаблонов, многоэтапное подписание и двусторонняя синхронизация статусов.

SignNow API — на каком тарифе доступен?

API SignNow доступен через Site License или отдельный API-план. Стартовый API-план — около $146/мес за 1,000 invite в год. Для тестирования есть бесплатный trial с 250 invite. Обычные тарифы (Business, Business Premium) API не включают.

Как передать данные Kommo в шаблон SignNow?

Через механизм шаблонов SignNow: создаётся шаблон с заполняемыми полями, при каждой сделке создаётся копия шаблона (POST /template/{id}/copy), поля заполняются данными из Kommo через PUT /document/{id}. Это исключает необходимость генерировать PDF на стороне сервера.

Можно ли отправить напоминание о неподписанном документе?

Да. Параметр reminder в field invite задаёт интервал напоминаний в днях. Дополнительно можно реализовать логику на стороне Kommo: если поле «Документ подписан» пустое через N дней — отправить задачу менеджеру или автоматически продублировать invite через API.

SignNow поддерживает встроенное подписание (embedded signing)?

Да. SignNow поддерживает embedded signing — документ можно открыть для подписания прямо внутри вашего интерфейса (например, в личном кабинете клиента). Используется endpoint POST /document/{id}/session для получения временного URL iframe. Это актуально если клиент работает с вашим порталом и переход на сторонний сайт нежелателен.

Итого

  • SignNow REST API: OAuth 2.0, загрузка документа, field invite с несколькими подписантами, webhook на invite.update и document.complete
  • Шаблоны с merge fields — данные из Kommo подставляются без генерации PDF на backend
  • Цикл: Won -> документ -> подпись -> обновление этапа в Kommo — полностью автоматически
  • SignNow дешевле DocuSign и Adobe Sign при сопоставимом функционале для кастомных интеграций
  • Типовой срок разработки — 2–3 недели

Если вы используете SignNow и хотите автоматизировать отправку документов из Kommo — опишите структуру ваших шаблонов и схему подписания. Exceltic.dev разберёт маппинг полей и предложит архитектуру.

Ещё статьи

Все →