Kommo + Qwilr: интерактивные предложения из карточки сделки с трекингом просмотров

Kommo + Qwilr: интерактивные предложения из карточки сделки с трекингом просмотров

Qwilr — платформа для создания коммерческих предложений в формате интерактивных веб-страниц. Вместо PDF — живая страница с видео, ROI-калькуляторами, встроенной электронной подписью и аналитикой: кто открыл, сколько времени смотрел, какие секции читал. В отличие от PandaDoc или GetAccept, Qwilr строит веб-опыт, а не электронный документ. Без интеграции с Kommo менеджер создаёт пропозал вручную. С интеграцией Won -> пропозал с данными сделки уходит клиенту за 30 секунд.

Qwilr vs PandaDoc vs GetAccept: форматы предложений

ПараметрQwilrPandaDocGetAccept
ФорматВеб-страница (URL)PDF + rich contentPDF + video
Аналитика просмотровДетальная (секция-уровень)БазоваяЕсть
ROI-калькуляторыВстроенные, интерактивныеНетНет
E-signДаДаДа
БрендингПолноеПолноеЧастичное
Подходит дляB2B SaaS, агентстваЛюбойSales + video pitches

Qwilr выигрывает когда продукт или услуга требует объяснения: интерактивный pricing calculator, видео-демо прямо в пропозале, адаптируемый контент под сегмент клиента.

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

Kommo -> Qwilr:
— Won -> создать Document из шаблона с данными (имя, компания, сумма, тариф)
— Сохранить URL пропозала в Note и поле сделки

Qwilr -> Kommo:
proposal.viewed -> Note: «Qwilr: клиент открыл предложение (X мин)»
proposal.accepted (подписан) -> Note + смена этапа «Предложение принято»
proposal.declined -> Note + задача: «Клиент отклонил — уточнить возражения»
proposal.expired -> Note + задача: «Пропозал истёк — переотправить»

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

Base URL: https://api.qwilr.com/v1.
Аутентификация: Authorization: Bearer {api_key}.
API Key: Qwilr -> Settings -> Integrations -> API.

import requests

QWILR_API_KEY = "your_api_key"
QWILR_BASE_URL = "https://api.qwilr.com/v1"
HEADERS = {
    "Authorization": f"Bearer {QWILR_API_KEY}",
    "Content-Type": "application/json",
}

def list_templates() -> list:
    # Получить список шаблонов для выбора нужного
    resp = requests.get(f"{QWILR_BASE_URL}/templates", headers=HEADERS)
    resp.raise_for_status()
    return resp.json().get("data", [])

def create_document(template_id: str, name: str, tokens: dict) -> dict:
    # tokens - переменные шаблона: {ClientName}, {CompanyName}, {Price} и т.д.
    payload = {
        "template_id": template_id,
        "name": name,
        "tokens": tokens,
    }
    resp = requests.post(
        f"{QWILR_BASE_URL}/documents",
        headers=HEADERS,
        json=payload,
    )
    resp.raise_for_status()
    return resp.json()

def get_document(document_id: str) -> dict:
    resp = requests.get(
        f"{QWILR_BASE_URL}/documents/{document_id}",
        headers=HEADERS,
    )
    resp.raise_for_status()
    return resp.json()

def on_deal_won(lead: dict, contact: dict):
    name = contact["name"]
    email = get_contact_email(contact)
    company = get_custom_field(lead, COMPANY_FIELD_ID) or name
    plan = get_custom_field(lead, PLAN_FIELD_ID) or "Growth"
    amount = lead.get("price", 0)

    tokens = {
        "ClientName":   name,
        "CompanyName":  company,
        "ClientEmail":  email,
        "PlanName":     plan,
        "Price":        f"${amount:,.0f}",
        "DealId":       str(lead["id"]),
    }

    doc = create_document(
        template_id=QWILR_TEMPLATE_ID,
        name=f"Предложение для {company}",
        tokens=tokens,
    )

    doc_id   = doc["id"]
    view_url = doc.get("view_url", "")

    update_kommo_deal(lead["id"], {"qwilr_document_id": doc_id})
    create_kommo_note(lead["id"],
        f"Qwilr: предложение создано\nСсылка для клиента: {view_url}")

Обработка Qwilr Webhook:

@app.route("/webhooks/qwilr", methods=["POST"])
def qwilr_webhook():
    payload = request.json
    event   = payload.get("event")
    doc_id  = str(payload.get("document", {}).get("id", ""))

    deal_id = find_deal_by_field("qwilr_document_id", doc_id)
    if not deal_id:
        return "", 200

    if event == "proposal.viewed":
        duration = payload.get("metadata", {}).get("duration_seconds", 0)
        mins = duration // 60
        create_kommo_note(deal_id,
            f"Qwilr: клиент открыл предложение ({mins} мин)")

    elif event == "proposal.accepted":
        signer = payload.get("signer", {}).get("name", "")
        update_kommo_deal(deal_id, {"stage_id": STAGE_PROPOSAL_ACCEPTED})
        create_kommo_note(deal_id,
            f"Qwilr: предложение принято и подписано ({signer})")

    elif event == "proposal.declined":
        reason = payload.get("metadata", {}).get("reason", "")
        create_kommo_note(deal_id,
            f"Qwilr: клиент отклонил предложение. Причина: {reason}")
        create_kommo_task(deal_id,
            "Уточнить возражения - клиент отклонил Qwilr-предложение")

    return "", 200

Трекинг просмотров: почему это важно для продаж

Qwilr показывает: кто открыл, когда, сколько времени провёл на каждой секции. Через интеграцию с Kommo это попадает в карточку сделки. Практический сценарий:

  • Клиент открыл предложение и провёл 12 минут на разделе Pricing -> Note в Kommo -> менеджер видит это и звонит с конкретным офером по цене
  • Клиент открыл, пробыл 30 секунд -> Note -> менеджер понимает что предложение не читали, переформатирует

Без интеграции эти данные остаются в Qwilr, менеджер их не видит.

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

Digital-агентство (UK, 30–40 пропозалов в месяц, Kommo + Qwilr):

  • До: PandaDoc, PDF, создание вручную 20–30 мин на пропозал. Аналитика просмотров — нет. Менеджер не знал смотрел ли клиент.
  • После: Won -> Qwilr из шаблона за 60 секунд. proposal.viewed -> Note -> менеджер звонит через 30 минут после просмотра. Конверсия пропозалов: 34% (было 21%). Время закрытия сократилось с 18 до 11 дней.
  • Дополнительно: ROI-калькулятор в пропозале — клиент вводит свои данные, видит свой результат. Менеджер видит в трекинге сколько времени провёл на калькуляторе.

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

  • Агентства и консалтинг с 10+ пропозалами в месяц
  • SaaS с enterprise-продажами: пропозал с ROI-обоснованием
  • Компании где PDF-пропозал регулярно «теряется» в почте клиента
  • Команды где менеджер не знает «смотрел ли клиент наше предложение»

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

Qwilr vs PandaDoc — когда что выбрать?

PandaDoc: PDF-формат обязателен (юридические документы, enterprise с paper trail requirements), нужны формы для сбора данных внутри документа. Qwilr: максимальный visual impact, интерактивные калькуляторы, видео внутри, детальный трекинг. Для агентств с современными клиентами — Qwilr выглядит значительно профессиональнее.

Qwilr tokens — как узнать какие переменные поддерживает шаблон?

Через GET /templates/{id} — ответ содержит массив tokens с именами переменных. Или в Qwilr редакторе: { -> список доступных переменных. Переменные можно добавить прямо в редакторе перед именем в двойных фигурных скобках.

Qwilr поддерживает цифровую подпись с юридической силой?

Да, Qwilr e-sign — Simple Electronic Signature, юридически значимая в большинстве юрисдикций (аналог DocuSign SES). Для квалифицированной электронной подписи (QES, обязательной в некоторых EU-контрактах) — нужен отдельный инструмент типа Docuseal или Oneflow с провайдером QES.

Можно ли посылать клиенту ссылку на Qwilr напрямую из Kommo?

Не нативно, но через интеграцию: после создания документа view_url сохраняется в Note и кастомном поле. Менеджер копирует ссылку из поля и отправляет через WhatsApp или email прямо из Kommo. Автоматическая отправка через Kommo Sendgrid или email-интеграцию — следующий шаг автоматизации.

Итого

  • Qwilr API: Authorization: Bearer {api_key}, https://api.qwilr.com/v1
  • Создать документ: POST /documents с template_id и tokens
  • Webhook: proposal.viewed, proposal.accepted, proposal.declined
  • Трекинг просмотров -> Note в Kommo -> менеджер знает когда звонить
  • Формат веб-страницы вместо PDF — выше engagement, детальная аналитика

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

Ещё статьи

Все →