Kommo + GetResponse: email-автоматизация и вебинары из воронки продаж
GetResponse — польская платформа email-маркетинга и вебинаров с EU-хостингом: email-автоматизация, лендинги, вебинары (до 1000 участников), push-уведомления. Популярна в EU как GDPR-compliant альтернатива Mailchimp. В отличие от Klaviyo или Drip, GetResponse включает вебинарный модуль в base-план — важно для B2B компаний с webinar-based продажами. Без интеграции с Kommo email-контакты и CRM-сделки живут отдельно. С интеграцией Won -> контакт в правильном сегменте GetResponse автоматически.
GetResponse vs Mailchimp vs Brevo для EU-команд
| Параметр | GetResponse | Mailchimp | Brevo |
|---|---|---|---|
| Вебинары | Да, нативно (до 500 или 1000) | Нет | Нет |
| EU-хостинг | Да (Польша) | US | Франция |
| GDPR-compliance | Да, встроено | Частично | Да |
| Автоматизация | Визуальный builder | Базовая | Хорошая |
| Цена (1000 контактов) | $19/мес | $26/мес | $25/мес |
| API | REST v3, API Key | REST, API Key | REST, API Key |
GetResponse выбирают EU-компании с вебинарной стратегией и строгими GDPR-требованиями к хранению данных.
Что синхронизируется
Kommo -> GetResponse:
— Won -> создать/обновить Contact с тегами customer, plan_{tier}, source_{channel}
— Won -> добавить в список «Paying Customers»
— Смена тарифа -> обновить тег
— Потеря клиента -> тег churned, удалить из «Paying Customers»
GetResponse -> Kommo:
— Вебинар-регистрация -> создать лид в Kommo (имя, email, вебинар)
— subscriber.unsubscribed -> Note + задача менеджеру
— Email-клик на ключевую ссылку -> Note в сделку (опционально)
GetResponse API: ключевые запросы
Base URL: https://api.getresponse.com/v3.
Аутентификация: X-Auth-Token: api-key {api_key}.
API Key: GetResponse -> Account Settings -> Integrations -> API.
import requests
from datetime import datetime, timezone
GR_API_KEY = "your_api_key"
GR_BASE_URL = "https://api.getresponse.com/v3"
HEADERS = {
"X-Auth-Token": f"api-key {GR_API_KEY}",
"Content-Type": "application/json",
}
def upsert_contact(email: str, name: str, campaign_id: str,
tags: list, custom_fields: dict = None) -> dict:
# GetResponse не имеет истинного upsert - используем GET+POST или UPDATE
existing = get_contact_by_email(email)
if existing:
return update_contact(existing["contactId"], tags, custom_fields or {})
return create_contact(email, name, campaign_id, tags, custom_fields or {})
def get_contact_by_email(email: str) -> dict | None:
resp = requests.get(
f"{GR_BASE_URL}/contacts",
headers=HEADERS,
params={"query[email]": email},
)
resp.raise_for_status()
contacts = resp.json()
return contacts[0] if contacts else None
def create_contact(email: str, name: str, campaign_id: str,
tags: list, custom_fields: dict) -> dict:
payload = {
"email": email,
"name": name,
"campaign": {"campaignId": campaign_id},
"tags": [{"name": t} for t in tags],
}
if custom_fields:
payload["customFieldValues"] = [
{"customFieldId": k, "value": [v]}
for k, v in custom_fields.items()
]
resp = requests.post(
f"{GR_BASE_URL}/contacts",
headers=HEADERS, json=payload,
)
if resp.status_code == 202:
return {"status": "queued"}
resp.raise_for_status()
return resp.json()
def update_contact(contact_id: str, tags: list, custom_fields: dict) -> dict:
payload = {"tags": [{"name": t} for t in tags]}
if custom_fields:
payload["customFieldValues"] = [
{"customFieldId": k, "value": [v]}
for k, v in custom_fields.items()
]
resp = requests.post(
f"{GR_BASE_URL}/contacts/{contact_id}",
headers=HEADERS, json=payload,
)
resp.raise_for_status()
return resp.json()
GR_CAMPAIGN_ID = "your_campaign_id" # из GetResponse Contacts -> Lists -> ID
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)
tags = ["customer", f"plan_{plan}", f"source_{source}", "active"]
custom_fields = {
GR_FIELD_PLAN: plan,
GR_FIELD_MRR: str(amount),
GR_FIELD_DEAL_ID: str(lead["id"]),
GR_FIELD_WON_DATE: datetime.now(timezone.utc).strftime("%Y-%m-%d"),
}
upsert_contact(email, name, GR_CAMPAIGN_ID, tags, custom_fields)
create_kommo_note(lead["id"],
f"GetResponse: контакт добавлен (теги: customer, plan_{plan})")
def on_webinar_registration(webinar_id: str, contact_data: dict):
# GetResponse webhook при регистрации на вебинар
email = contact_data.get("email", "")
name = contact_data.get("name", "")
webinar_name = contact_data.get("webinar_name", webinar_id)
# Создать лид в Kommo
create_kommo_lead(
title=f"Вебинар: {webinar_name} - {name}",
contact_email=email,
contact_name=name,
tags=["webinar-lead", f"webinar_{webinar_id}"],
)
Webhook GetResponse (подписка/отписка):
@app.route("/webhooks/getresponse", methods=["POST"])
def gr_webhook():
payload = request.json
action = payload.get("action")
contact = payload.get("contact", {})
email = contact.get("email", "")
if not email:
return "", 200
deal_id = find_kommo_deal_by_contact_email(email)
if action == "subscribe" and payload.get("origin") == "webinar":
webinar = payload.get("webinar", {})
on_webinar_registration(webinar.get("id", ""), {
"email": email,
"name": contact.get("name", ""),
"webinar_name": webinar.get("name", ""),
})
elif action == "unsubscribe" and deal_id:
create_kommo_note(deal_id, "GetResponse: клиент отписался от рассылок")
create_kommo_task(deal_id,
"Уточнить предпочтения - клиент отписался от GetResponse")
return "", 200
Вебинарный поток: GetResponse как лид-магнит
Для B2B с вебинарной стратегией интеграция работает в обе стороны:
Из GetResponse в Kommo (генерация лидов):
— Регистрация на вебинар -> лид в Kommo с тегом webinar-{название}
— Посещение вебинара -> обновить статус лида (через GetResponse API: список attended vs registered)
— Вопрос в чате вебинара -> Note в лид (если интегрировать через GetResponse API)
Из Kommo в GetResponse (нурчеринг лидов):
— Лид из вебинара не купил -> попадает в GetResponse nurture sequence
— После Won -> перемещается в post-purchase sequence
Реальный кейс
B2B-консалтинг (Польша + EU, 200 email-подписчиков + 4 вебинара в квартал, Kommo + GetResponse):
- До: вебинарные лиды вручную копировались из GetResponse в Kommo (Excel-выгрузка -> импорт). Delay 1–3 дня. 20% лидов терялись. Paying-клиенты получали nurture emails как будто они не купили.
- После: вебинар-регистрация -> лид в Kommo за минуту. Won -> тег
customerв GetResponse -> клиент исключается из prospect sequences, попадает в onboarding sequence. 0 потерянных лидов, 0 «продающих» писем платным клиентам.
Для кого актуально
- EU-компании с GDPR-требованиями к email-маркетингу (GetResponse EU-хостинг)
- B2B с вебинарной стратегией привлечения: регистрации -> CRM-лиды автоматически
- SaaS с тарифной линейкой: разные email-sequences для каждого плана
- Компании которые уже на GetResponse и хотят связать с Kommo
Часто задаваемые вопросы
GetResponse создаёт контакт с задержкой (202 Accepted) — как это обработать?
GetResponse API возвращает 202 при создании контакта — это асинхронная операция, контакт создаётся в очереди. Нет немедленного ID. Для последующих операций (update, tag) — нужно сделать GET по email через несколько секунд. В production: сохранить email как ключ и retry через 5–10 секунд если GET вернул пустой массив.
Как получить список посетивших вебинар (attended) vs только зарегистрированных?
GET /webinars/{webinar_id}/attendees — список подтверждённых участников. GET /webinars/{webinar_id}/registrants — все зарегистрированные. Разница позволяет построить два разных сценария в Kommo: no-show -> задача follow-up; attended -> лид с высоким приоритетом.
GetResponse поддерживает double opt-in при создании через API?
Да. Параметр dayOfCycle: 0 в теле запроса при create_contact. GetResponse отправит confirmation email. После подтверждения статус меняется на subscribed. Для EU-команд с GDPR double opt-in — обязательно указывать при создании через API.
Как GetResponse webhook авторизовать?
GetResponse использует shared secret в URL или проверку IP. Рекомендуется: секретный path (/webhooks/getresponse/{token}) + IP whitelist. GetResponse публикует список своих IP в документации.
Итого
- GetResponse API:
X-Auth-Token: api-key {key},https://api.getresponse.com/v3 - Create contact: POST -> 202 Accepted (async), нужен retry для последующих операций
- Upsert: GET по email -> если есть: PATCH, если нет: POST
- Webhook: подписка, отписка, вебинар-события
- Вебинар-поток: регистрация -> лид в Kommo; Won -> контакт в GetResponse с правильными тегами
- EU-хостинг: данные в Польше, GDPR double opt-in через API
Если вы используете GetResponse и Kommo и хотите синхронизировать CRM-статусы с email-сегментами — опишите структуру ваших списков и вебинарный процесс. Exceltic.dev настроит двустороннюю интеграцию.