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с actionorder_completedдля LTV-сегментации - Добавить тег:
POST /tags, убрать:DELETE /subscribers/{email}/tags/{tag} - Webhook: нет HMAC, защита через секретный URL + IP whitelist
- Ключевые события:
subscriber.unsubscribed,subscriber.email_bounced
Если вы используете Drip и Kommo и хотите синхронизировать тег-стратегию с воронкой — опишите текущую структуру тегов. Exceltic.dev настроит маппинг и обработку событий.