Kommo + Drip: email-автоматизация для e-commerce из воронки продаж

Kommo + Drip: email-автоматизация для e-commerce из воронки продаж

Drip — email-платформа, созданная для e-commerce и DTC-брендов: поведенческая сегментация на основе покупок, LTV-когорты, SMS + email в одном инструменте. Без интеграции с Kommo события воронки (Won, апгрейд тарифа, отток) не попадают в Drip — маркетолог вручную обновляет теги, последовательности запаздывают на дни. С интеграцией смена этапа в Kommo мгновенно обновляет профиль подписчика в Drip и запускает нужную автоматизацию.

Drip vs Kit (ConvertKit) для интеграции с Kommo

Drip ориентирован на e-commerce: LTV-сегментация, интеграция с Shopify/WooCommerce, revenue events (order.paid, cart.abandoned). Лучше если ваш бизнес — интернет-магазин или DTC.

Kit (ConvertKit) ориентирован на creator economy и SaaS с контент-онбордингом. Kit интеграция с Kommo — правильный выбор для SaaS. Drip — для e-commerce и продуктового бизнеса с покупками.

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

Kommo -> Drip:
— Won -> создать/обновить subscriber с атрибутами из сделки
— Won -> добавить теги customer, plan_{tier}, source_{channel}
— Won -> добавить в post-purchase последовательность
— Смена тарифа -> обновить plan в Drip, добавить/убрать теги
— Потеря клиента -> добавить тег churned, убрать active

Drip -> Kommo:
subscriber.unsubscribed -> Note + задача менеджеру
subscriber.email_bounced -> Note + задача проверить email
subscriber.received_email -> (по желанию) Note о начале последовательности

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

Base URL: https://api.getdrip.com/v2/{account_id}/.
Account ID — числовой ID аккаунта Drip (в URL дашборда).
Аутентификация: Basic Auth — API token как username, пустой пароль.
API token: Drip -> User Settings -> API Token.

import requests
from requests.auth import HTTPBasicAuth

DRIP_API_TOKEN = "your_api_token"
DRIP_ACCOUNT_ID = "your_account_id"
DRIP_BASE_URL = f"https://api.getdrip.com/v2/{DRIP_ACCOUNT_ID}"
DRIP_AUTH = HTTPBasicAuth(DRIP_API_TOKEN, "")

def upsert_subscriber(email: str, tags: list, custom_fields: dict) -> dict:
    resp = requests.post(
        f"{DRIP_BASE_URL}/subscribers",
        auth=DRIP_AUTH,
        json={
            "subscribers": [{
                "email": email,
                "tags": tags,
                "custom_fields": custom_fields,
                "update_existing_subscriber_tags": False,  # не перезаписывать теги
            }]
        }
    )
    resp.raise_for_status()
    return resp.json()

def record_event(email: str, action: str, properties: dict = None) -> None:
    resp = requests.post(
        f"{DRIP_BASE_URL}/events",
        auth=DRIP_AUTH,
        json={
            "events": [{
                "email": email,
                "action": action,
                "properties": properties or {},
                "occurred_at": datetime.now(timezone.utc).isoformat(),
            }]
        }
    )
    resp.raise_for_status()

def add_tags(email: str, tags: list) -> None:
    resp = requests.post(
        f"{DRIP_BASE_URL}/tags",
        auth=DRIP_AUTH,
        json={"tags": [{"email": email, "tag": tag} for tag in tags]}
    )
    resp.raise_for_status()

def remove_tag(email: str, tag: str) -> None:
    requests.delete(
        f"{DRIP_BASE_URL}/subscribers/{email}/tags/{tag}",
        auth=DRIP_AUTH
    )

def on_deal_won(lead: dict, contact: dict):
    email = get_contact_email(contact)
    name = contact["name"]
    plan = get_custom_field(lead, PLAN_FIELD_ID) or "starter"
    source = get_custom_field(lead, SOURCE_FIELD_ID) or "direct"
    amount = lead.get("price", 0)

    upsert_subscriber(email,
        tags=["customer", f"plan_{plan}", f"source_{source}"],
        custom_fields={
            "first_name": name.split()[0] if name else "",
            "plan": plan,
            "kommo_deal_id": str(lead["id"]),
            "mrr": amount,
        }
    )

    record_event(email, "deal_won", {
        "plan": plan,
        "amount": amount,
        "deal_id": lead["id"],
    })

    create_kommo_note(lead["id"],
        f"Drip: подписчик обновлён (теги: customer, plan_{plan})")

def on_plan_upgrade(lead: dict, contact: dict, old_plan: str, new_plan: str):
    email = get_contact_email(contact)
    remove_tag(email, f"plan_{old_plan}")
    add_tags(email, [f"plan_{new_plan}", "upgraded"])
    record_event(email, "plan_upgraded", {
        "from_plan": old_plan,
        "to_plan": new_plan,
    })

def on_deal_lost(lead: dict, contact: dict):
    email = get_contact_email(contact)
    remove_tag(email, "active")
    add_tags(email, ["churned"])
    record_event(email, "churned", {"deal_id": lead["id"]})

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

from flask import Flask, request

app = Flask(__name__)

@app.route("/webhooks/drip", methods=["POST"])
def drip_webhook():
    payload = request.json
    event_type = payload.get("event")
    subscriber = payload.get("data", {}).get("subscriber", {})
    email = subscriber.get("email")

    if not email:
        return "", 200

    deal_id = find_kommo_deal_by_contact_email(email)
    if not deal_id:
        return "", 200

    if event_type == "subscriber.unsubscribed":
        create_kommo_note(deal_id, "Drip: клиент отписался от email-рассылки")
        create_kommo_task(deal_id,
            "Уточнить предпочтения по коммуникации - клиент отписался от Drip")

    elif event_type == "subscriber.email_bounced":
        create_kommo_note(deal_id,
            f"Drip: email не доставлен (bounce)")
        create_kommo_task(deal_id, "Проверить email контакта - Drip зафиксировал bounce")

    return "", 200

Drip Webhook настройка: Settings -> Webhooks -> Add Webhook. Выбрать events. Drip не подписывает webhook HMAC — защищайте URL секретным path-сегментом + IP whitelist (Drip публикует список IP).

E-commerce сегментация: LTV-тег-стратегия

Drip позволяет строить автоматизации на основе LTV и количества покупок. Для Kommo-интеграции — передавайте order_count и total_value при каждом обновлении:

# Добавить revenue event при новой покупке
record_event(email, "order_completed", {
    "order_id": str(lead["id"]),
    "grand_total": amount,
    "currency": "USD",
    "items": [{"name": plan, "price": amount, "quantity": 1}]
})

# Drip автоматически пересчитает LTV и обновит сегменты

Drip автоматически создаёт LTV-сегменты из revenue events — маркетолог строит automation workflow без дополнительного кода.

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

DTC-SaaS (US, подписочная модель, Kommo + Drip + Shopify, 50–80 новых клиентов в месяц):

  • До: маркетолог вручную экспортировал Won-сделки из Kommo раз в неделю, импортировал в Drip с тегами. Задержка 3–7 дней. Апгрейды и churns не синхронизировались вообще.
  • После: Won -> Drip-профиль обновлён в течение минуты. Post-purchase последовательность запускается автоматически. Drip видит актуальный сегмент клиента.
  • Дополнительно: при churned тег -> Win-back automation в Drip -> серия из 3 писем с предложением скидки -> возврат 12% ушедших клиентов.

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

  • E-commerce и DTC с подписочной моделью или повторными покупками
  • Команды, где продажи в Kommo, маркетинг в Drip — без актуальных данных о клиентах
  • Бизнесы с Shopify + Kommo: Drip нативно интегрирован с Shopify, Kommo-интеграция замыкает CRM-слой
  • 40+ активных клиентов — при меньшем объёме синхронизация терпима вручную

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

Drip vs Klaviyo для e-commerce?

Klaviyo — лидер для Shopify-first e-commerce, с более богатым набором шаблонов и предиктивной аналитикой. Drip — сильнее в API-гибкости и мультиканальных automation (email + SMS). Для Kommo + Klaviyo интеграции архитектура аналогична — разница в возможностях платформы.

Drip account_id — где найти?

В URL Drip Dashboard: app.getdrip.com/{account_id}/.... Числовой ID после домена — это и есть account_id для API.

Как синхронизировать отказ от конкретного типа писем?

Drip поддерживает global_state: unsubscribed (полная отписка) и status: unsubscribed по конкретной кампании. Через PATCH /subscribers/{email} -> {global_state: "active"} / {global_state: "unsubscribed"}. Для гранулярного управления — теги-флаги (no_promo, no_product_updates).

Drip поддерживает SMS?

Да, через Drip SMS (US-рынок). SMS-сообщения запускаются из тех же workflows на основе тегов и событий. Для EU — SMS-интеграция ограничена.

Итого

  • Drip API v2: Basic Auth (api_token:пустой пароль), https://api.getdrip.com/v2/{account_id}/
  • Upsert subscriber: POST /subscribers с tags и custom_fields
  • Revenue event: POST /events с action order_completed для LTV-сегментации
  • Добавить тег: POST /tags, убрать: DELETE /subscribers/{email}/tags/{tag}
  • Webhook: нет HMAC, защита через секретный URL + IP whitelist
  • Ключевые события: subscriber.unsubscribed, subscriber.email_bounced

Если вы используете Drip и Kommo и хотите синхронизировать тег-стратегию с воронкой — опишите текущую структуру тегов. Exceltic.dev настроит маппинг и обработку событий.

Ещё статьи

Все →