Kommo + Kit (ConvertKit): email-автоматизация из воронки продаж
Kit (до 2024 года — ConvertKit) — платформа email-автоматизации с мощной тег-сегментацией и визуальным конструктором последовательностей. Без интеграции с Kommo маркетолог вручную добавляет нового клиента в Kit после Won, менеджер не знает в каких email-кампаниях участвует клиент, а отписка клиента не отражается в CRM. С интеграцией смена этапа воронки в Kommo автоматически запускает Kit-последовательность с правильными тегами, и каждое значимое email-событие появляется в карточке сделки.
Kit vs Customer.io: когда что выбирать
Kit ориентирован на creator economy и контент-бизнесы — курсы, SaaS с обучающим онбордингом, community-продукты. Сильные стороны: визуальные автоматизации, теги как основной механизм сегментации, интеграции с Teachable/Kajabi/Gumroad.
Customer.io — поведенческий маркетинг для product-led SaaS: события из продукта -> кампании. API-первый подход, сложные условия на основе свойств пользователя.
Для Kommo-интеграции оба реализуются аналогично. Customer.io интеграцию выбирают когда нужна тригерная отправка по событиям в продукте. Kit — когда онбординг строится через email-последовательности с тег-логикой.
Что синхронизируется
Kommo -> Kit:
— Won -> создать или обновить подписчика в Kit (upsert по email)
— Won -> добавить тег customer, plan:{plan_name}, source:{channel}
— Won -> добавить в последовательность онбординга
— Смена этапа -> изменить теги (убрать trial, добавить active)
Kit -> Kommo:
— subscriber.unsubscribed -> Note + задача менеджеру: «Клиент отписался от Kit»
— subscriber.bounced -> Note + задача проверить email
— Завершение последовательности -> Note: «Онбординг-кампания завершена»
Архитектура
Kommo Webhook: сделка перешла в Won
↓ Backend
1. GET /api/v4/leads/{id} + contacts
-> email, имя, тариф, источник из кастомных полей
2. Kit API v4: POST /subscribers (upsert)
-> email, first_name, custom fields (plan, kommo_deal_id)
3. Kit API v4: POST /tags/{tag_id}/subscribers
-> добавить теги: customer, plan:{plan}, source:{source}
4. Kit API v4: POST /sequences/{seq_id}/subscribers
-> добавить в онбординг-последовательность
5. Kommo: POST /leads/{id}/notes
-> «Kit: подписчик добавлен, теги: customer, plan:growth»
Kit Webhook: subscriber.unsubscribed
↓ Backend
1. Из payload: subscriber.email
2. Найти сделку по email контакта в Kommo
3. Kommo: POST /leads/{deal_id}/notes
-> «Kit: клиент отписался от рассылки»
4. Kommo: POST /tasks
-> «Уточнить предпочтения - клиент отписался от Kit»
Kit API v4: ключевые запросы
Base URL: https://api.kit.com/v4/.
Аутентификация: Bearer token — Authorization: Bearer {api_key}.
API key: Kit -> Settings -> Developer -> API keys.
Создать или обновить подписчика:
import requests
KIT_API_KEY = "your_kit_api_key"
KIT_BASE_URL = "https://api.kit.com/v4"
headers = {
"Authorization": f"Bearer {KIT_API_KEY}",
"Content-Type": "application/json"
}
def upsert_subscriber(email: str, first_name: str, custom_fields: dict) -> dict:
# Kit v4 upsert: если подписчик с email существует - обновляет; если нет - создаёт
resp = requests.post(
f"{KIT_BASE_URL}/subscribers",
headers=headers,
json={
"email_address": email,
"first_name": first_name,
"fields": custom_fields,
"state": "active"
}
)
resp.raise_for_status()
return resp.json()
def add_tag_to_subscriber(subscriber_id: str, tag_id: str) -> None:
resp = requests.post(
f"{KIT_BASE_URL}/tags/{tag_id}/subscribers",
headers=headers,
json={"subscriber_id": subscriber_id}
)
resp.raise_for_status()
def add_to_sequence(subscriber_id: str, sequence_id: str) -> None:
resp = requests.post(
f"{KIT_BASE_URL}/sequences/{sequence_id}/subscribers",
headers=headers,
json={"subscriber_id": subscriber_id}
)
resp.raise_for_status()
def on_deal_won(lead: dict, contact: dict):
email = get_contact_email(contact)
first_name = contact["name"].split()[0]
plan = get_custom_field(lead, PLAN_FIELD_ID) or "starter"
source = get_custom_field(lead, SOURCE_FIELD_ID) or "unknown"
subscriber = upsert_subscriber(email, first_name, {
"plan": plan,
"kommo_deal_id": str(lead["id"]),
"source": source
})
subscriber_id = subscriber["subscriber"]["id"]
# Теги из словаря: имя тега -> tag_id (получить из Kit API заранее)
tags_to_add = [TAG_IDS["customer"], TAG_IDS.get(f"plan_{plan}")]
for tag_id in tags_to_add:
if tag_id:
add_tag_to_subscriber(subscriber_id, tag_id)
# Добавить в онбординг-последовательность
add_to_sequence(subscriber_id, ONBOARDING_SEQUENCE_ID)
create_kommo_note(
lead["id"],
f"Kit: подписчик добавлен (теги: customer, plan:{plan}), "
f"запущена онбординг-последовательность"
)
Получить ID тегов и последовательностей:
def get_tags() -> dict:
resp = requests.get(f"{KIT_BASE_URL}/tags", headers=headers)
resp.raise_for_status()
tags = resp.json().get("tags", [])
return {tag["name"]: tag["id"] for tag in tags}
def get_sequences() -> dict:
resp = requests.get(f"{KIT_BASE_URL}/sequences", headers=headers)
resp.raise_for_status()
seqs = resp.json().get("sequences", [])
return {seq["name"]: seq["id"] for seq in seqs}
Обработка Kit Webhook:
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhooks/kit", methods=["POST"])
def kit_webhook():
# Kit webhook не имеет встроенной верификации HMAC в v4
# Защита: секретный путь + IP whitelist
payload = request.json
event = payload.get("type")
subscriber = payload.get("subscriber", {})
email = subscriber.get("email_address")
if not email:
return "", 200
deal_id = find_kommo_deal_by_contact_email(email)
if not deal_id:
return "", 200
if event == "subscriber.unsubscribed":
create_kommo_note(deal_id, "Kit: клиент отписался от email-рассылки")
create_kommo_task(deal_id,
"Уточнить предпочтения по коммуникации - клиент отписался от Kit")
elif event == "subscriber.bounced":
create_kommo_note(deal_id, "Kit: email не доставлен (bounce)")
create_kommo_task(deal_id, "Проверить и обновить email клиента - Kit зафиксировал bounce")
return "", 200
Kit Webhook настройка: Settings -> Developer -> Webhooks -> Add endpoint. В Kit v4 верификация через секретный путь + IP whitelist (Kit публикует список IP-адресов).
Тег-сегментация: стратегия маппинга
Теги в Kit — основной механизм сегментации. Продуманный маппинг из Kommo:
| Событие в Kommo | Тег в Kit |
|---|---|
| Won (любой тариф) | customer |
| Won, тариф Growth | plan_growth |
| Won, тариф Scale | plan_scale |
| Источник = LinkedIn | source_linkedin |
| Churn (потеря клиента) | churned |
| Апгрейд | upgraded, убрать plan_growth, добавить plan_scale |
Теги атомарны: добавление/удаление через отдельные API-вызовы. Не перезаписывают — мерджат. Это позволяет строить Kit-автоматизации на логике «есть тег X И тег Y -> кампания Z».
Реальный кейс
Creator-SaaS (US, образовательная платформа, Kommo + Kit, 60–80 новых клиентов в месяц):
- До: маркетолог экспортировал список Won из Kommo раз в день, импортировал в Kit. Первое email уходило с задержкой 24–48 часов. Теги проставлялись вручную — часто ошибки.
- После: Won -> Kit-подписчик + теги + онбординг-последовательность за 5 секунд. Первое приветственное письмо — в пределах часа от закрытия сделки.
- Дополнительно:
subscriber.bounced-> задача обновить email -> спасли 8% контактов с неверным email в первый месяц.
Для кого актуально
- SaaS и курсы с email-онбордингом через Kit
- Команды, где маркетолог работает в Kit, продажи в Kommo — разные системы без связи
- 30+ новых клиентов в месяц — ручная синхронизация создаёт задержки и ошибки
- Продукты с несколькими тарифами — тег-сегментация под каждый план
Часто задаваемые вопросы
Kit или Mailchimp для интеграции с Kommo?
Mailchimp интеграция работает через аудитории и теги. Kit работает только через теги — более гибкая сегментация для сложных онбординг-сценариев. Mailchimp лучше для массовых рассылок по сегментам базы. Kit лучше для последовательностей, запускаемых по событиям.
Как найти ID тегов и последовательностей в Kit?
GET /v4/tags — список тегов с ID. GET /v4/sequences — список последовательностей. Рекомендуем сохранить маппинг name -> id в конфиг при первичной настройке — ID стабильны и не меняются.
Kit v3 vs v4 API?
Kit v4 (актуальный): https://api.kit.com/v4/, Bearer token. Kit v3 (устаревший): https://api.convertkit.com/v3/, api_key как query param. Новые интеграции писать только на v4 — v3 поддерживается, но не развивается.
Как удалять теги при смене этапа в Kommo?
DELETE /v4/tags/{tag_id}/subscribers/{subscriber_id} — удалить конкретный тег у подписчика. Для смены тарифа: удалить plan_growth, добавить plan_scale. Реализуется через PATCH /api/v4/leads webhook при изменении кастомного поля «Тариф».
Итого
- Kit API v4: Bearer token,
https://api.kit.com/v4/ - Upsert подписчика:
POST /subscribers(по email) - Добавить тег:
POST /tags/{tag_id}/subscribers - Добавить в последовательность:
POST /sequences/{sequence_id}/subscribers - Webhook:
subscriber.unsubscribed,subscriber.bounced— без HMAC, защита через секретный URL - Стратегия тегов: маппинг тариф/источник/статус -> теги в Kit для правильной сегментации
Если вы используете Kit и Kommo и хотите автоматизировать онбординг по этапам воронки — опишите структуру тарифов и последовательностей. Exceltic.dev настроит маппинг и webhook-обработчик.