Kommo + Qwilr: интерактивные предложения из карточки сделки с трекингом просмотров
Qwilr — платформа для создания коммерческих предложений в формате интерактивных веб-страниц. Вместо PDF — живая страница с видео, ROI-калькуляторами, встроенной электронной подписью и аналитикой: кто открыл, сколько времени смотрел, какие секции читал. В отличие от PandaDoc или GetAccept, Qwilr строит веб-опыт, а не электронный документ. Без интеграции с Kommo менеджер создаёт пропозал вручную. С интеграцией Won -> пропозал с данными сделки уходит клиенту за 30 секунд.
Qwilr vs PandaDoc vs GetAccept: форматы предложений
| Параметр | Qwilr | PandaDoc | GetAccept |
|---|---|---|---|
| Формат | Веб-страница (URL) | PDF + rich content | PDF + 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 настроит интеграцию с трекингом просмотров.